1151|2

162

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【STM32F746 Nucleo】二、CubeMX开发CAN通讯 [复制链接]

  1. CubeMx
    1.1 CubeMx加载开发板HAL库,也可以加载芯片HAL库
      
    2 CubeMX 已经配置过SYS 需要查看一下
      
    3 时钟配置 在这也选择默认
     
  1. CAN通讯配置
    在此需要配置时钟分频系数,从而得到想要的通讯波特率
    在新版的CubeMX 有显示分频后的CAN波特率,Baud Rate 750000bit/s 也就是750Kbit/s
      
      
    5.RCC时钟源查看设置
      
    6.程序生成为.c和.h文件
      
    7.设置工程文件名设置生成MDK开发环境,设置代码工程的保存路径
     
  1. 引脚功能引脚
    查看硬件电路引脚位置,并找到供电位置。
      
      
  2. CAN通讯设置
    3.1 设计了一个CAN通讯模块,然后使用杜邦线进行链接,如图所示:
      
    3.2 CAN通讯设置
     通讯频率设置为250K
      
    3.3 程序代码开发完后,进行通讯测试
     
  3. 软件代码
    4.1 CAN发送和接收函数代码
     
    • CAN_TxHeaderTypeDef TXHeader;
    • CAN_RxHeaderTypeDef RXHeader;
    • uint8_t TXmessage[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
    • uint8_t RXmessage[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};uint32_t pTxMailbox = 0;
    • uint32_t CAN_ID = 0x01;
    • int counT_A = 0;
    • int counT_B = 0;
    • void CAN_Config(void)
    • {
    • CAN_FilterTypeDef sFilterConfig;/*配置CAN过滤器*/
    • sFilterConfig.FilterBank = 0; //过滤器0
    • sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
    • sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
    • sFilterConfig.FilterIdHigh = 0x0000; //32位ID
    • sFilterConfig.FilterIdLow = 0x0000;
    • sFilterConfig.FilterMaskIdHigh = 0x0000; //32位MASK
    • sFilterConfig.FilterMaskIdLow = 0x0000;
    • sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;//过滤器0关联到FIFO0
    • sFilterConfig.FilterActivation = ENABLE; //激活滤波器0
    • sFilterConfig.SlaveStartFilterBank = 14;
    • if(HAL_CAN_ConfigFilter(&hcan1,&sFilterConfig) != HAL_OK)//初始化过滤器
    • {
    • Error_Handler();
    • }
    • if(HAL_CAN_Start(&hcan1) != HAL_OK)//打开can
    • {
    • Error_Handler();
    • }
    • if(HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)//开启接受邮邮箱0挂起中断
    • {
    • Error_Handler();
    • }
    • // /*配置传输过程*/
    • // TXHeader.StdId = 0x321;
    • // TXHeader.ExtId = 0x01;
    • // TXHeader.RTR = CAN_RTR_DATA;
    • // TXHeader.IDE = CAN_ID_STD;
    • // TXHeader.DLC = 2;
    • // TXHeader.TransmitGlobalTime = DISABLE;
    • }//发送函数
    • void CAN_senddata(CAN_HandleTypeDef *hcan,uint32_t can_id)
    • {
    • TXHeader.StdId=can_id ;
    • TXHeader.ExtId=0x12345000;//0x12345000
    • TXHeader.DLC=8;
    • TXHeader.IDE=CAN_ID_EXT;
    • TXHeader.RTR=CAN_RTR_DATA;
    • TXHeader.TransmitGlobalTime = DISABLE;
    • HAL_CAN_AddTxMessage(hcan,&TXHeader,TXmessage,&pTxMailbox);
    • }
    • uint8_t RxData[8];
    • uint8_t ubKeyNumber=0;
    • /**
    • * [url=home.php?mod=space&uid=159083]@brief[/url] Rx Fifo 0 message pending callback
    • * @param hcan: pointer to a CAN_HandleTypeDef structure that contains
    • * the configuration information for the specified CAN.
    • * @retval None
    • */
    • void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
    • {
    • /* Get RX message */
    • if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RXHeader, RxData) != HAL_OK)
    • {
    • /* Reception Error */
    • Error_Handler();
    • }
    • /* Display LEDx */
    • if ((RXHeader.StdId == 0x321) && (RXHeader.IDE == CAN_ID_STD) && (RXHeader.DLC == 2))
    • {
    • ubKeyNumber = RxData[0];
    • }
    • }

    4.2 声明和调用函数代码
     
    • void CAN_Config(void);
    • extern uint8_t TXmessage[8];
    • extern uint8_t RXmessage[8];
    • extern uint32_t CAN_ID;
    • extern int counT_A;
    • extern int counT_B;
    • void CAN_senddata(CAN_HandleTypeDef *hcan,uint32_t can_id);
    • uint32_t CAN1_Receive_Msg(uint8_t *buf);
    • /* USER CODE BEGIN WHILE */
    • while (1)
    • {
    • //CAN1_Receive_Msg(RXmessage);
    • HAL_GPIO_WritePin(GPIOB, LD1_Pin|LD3_Pin|LD2_Pin, GPIO_PIN_RESET);
    • HAL_Delay(500);
    • HAL_GPIO_WritePin(GPIOB, LD1_Pin|LD3_Pin|LD2_Pin, GPIO_PIN_SET);
    • HAL_Delay(500);
    • CAN_senddata(&hcan1,0x08A);
    • /* USER CODE END WHILE */
    • /* USER CODE BEGIN 3 */
    • }

    4.3 工程包文件
  4. can.rar (26.21 MB, 下载次数: 18)
此帖出自stm32/stm8论坛

最新回复

这是一个CAN和USB转接模块吗?     详情 回复 发表于 2023-9-28 08:54
点赞 关注
 

回复
举报

7756

帖子

18

TA的资源

五彩晶圆(高级)

沙发
 

挺详细的,谢谢分享!

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复

6811

帖子

10

TA的资源

版主

板凳
 

这是一个CAN和USB转接模块吗?  

此帖出自stm32/stm8论坛
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表