STM32CUBEMX系列——CAN通讯的配置

CUBEMX配置说明

首先打开STM32CubeMX选择你开发的芯片型号,这里我选择的是F103R6Tx的芯片。然后第一步选择SYS里面的debug模式,如果用HAL库不进行SWD或JTAG配置,单片机只能进行下载一次程序,要进行第二次或更多次程序下载,需要按复位键(如果你的单片机有复位按键的话),或者用镊子夹住复位线路上的电容使其短路,点击Keil下载,再松开镊子。
在这里插入图片描述
然后RCC时钟源选择外部高速时钟,自接外部晶振 在这里插入图片描述
然后配置时钟树
在这里插入图片描述配置CAN相关参数,波特率设定为500K,时钟频率为36M,
波特率计算公式:36M/9/(5+2+1)=500K.
模式选择正常通讯
在这里插入图片描述使能CAN RX0中断,代表的是接受邮箱0的接收中断
在这里插入图片描述

CAN相关函数说明

HAL_CAN_Start	//开启CAN通讯
HAL_CAN_Stop	//关闭CAN通讯
HAL_CAN_RequestSleep	//尝试进入休眠模式
HAL_CAN_WakeUp	//从休眠模式中唤醒
HAL_CAN_IsSleepActive	//检查是否成功进入休眠模式
HAL_CAN_AddTxMessage	//向 Tx 邮箱中增加一个消息,并且激活对应的传输请求
HAL_CAN_AbortTxRequest	//请求中断传输
HAL_CAN_IsTxMessagePending	//检查是否有传输请求在指定的 Tx 邮箱上等待
HAL_CAN_GetRxMessage	//从Rx FIFO 收取一个 CAN 帧

过滤器的配置

关于过滤器的说明与详解,可以参考这个
链接: 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结.

这个博客里面讲解的很详细
CUBEMX并没有初始化过滤器的相关内容,需要我们自己添加


void MX_CAN1_Init(void)
{
   
   

  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 9;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ
### 配置STM32CubeMX中的CAN外设 在STM32微控制器中,CAN(Controller Area Network)是一种用于嵌入式系统的串行通信协议。通过STM32CubeMX工具可以轻松配置CAN外设的功能参数。以下是关于如何在STM32CubeMX配置CAN外设的相关说明。 #### 1. 创建新项目并选择目标MCU型号 启动STM32CubeMX软件后,在初始界面创建一个新的工程文件,并选择适合的STM32系列芯片作为目标设备[^1]。 #### 2. 启用CAN外设功能 进入Pinout & Configuration页面,找到RCC选项卡下的Peripherals部分,定位到CAN模块并将Mode设置为Enabled状态。这一步骤会激活硬件资源分配给CAN总线接口使用。 #### 3. 设置时钟源与时基分频器 继续在同一窗口下调整Clock Configuration区域内的参数来定义系统主频率以及衍生出来的各子模块操作速度。对于CAN而言,默认情况下其时间基准来源于APB1 bus clock经过预分频后的信号输出;可以通过修改Prescaler value字段改变此比例关系从而影响最终波特率计算结果。 #### 4. 定义传输速率及相关寄存器初始化值 切换至Middleware标签页下方专门针对汽车网络标准设计的部分——即STSW-STM32084包内含有的bxCAN驱动程序库组件位置处展开更多高级属性设定项列表。在这里可以根据实际应用场景需求指定具体的bit timing parameters组合形式以满足不同距离范围内的数据交换效率要求。 #### 5. 波特率计算器辅助工具应用实例演示 为了简化上述过程中涉及复杂数学运算环节所带来的不便之处,官方还提供了图形化用户界面版本的在线服务叫做“STM32CubeMX Baudrate Calculator”。它能够帮助开发者快速估算出符合条件的最佳整数值集合方案供后续代码生成阶段采纳实施。 ```c // Example Code Snippet for initializing CAN filter registers. void MX_CAN_Init(void){ hcan.Instance = CAN1; hcan.Init.Prescaler = 9; // Adjust according to your system's core frequency hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SynchroJumpWidth = CAN_SJW_1TQ; hcan.Init.TimeSeg1 = CAN_BS1_13TQ; hcan.Init.TimeSeg2 = CAN_BS2_2TQ; HAL_CAN_Init(&hcan); } ```
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值