【HAL库】基于STM32F407的CAN通信实现--工程配置
在配置工程前需要有一块STM32的开发板,芯片型号STM32F407IGT6,使用8MHZ的外部时钟源配置需求如下。
前言
在配置工程前需要有一块STM32的开发板,芯片型号STM32F407IGT6,使用8MHZ的外部时钟源
配置需求如下
| CAN通信速率 | 500kb/s | 500kb/s是比较常用的速率 |
|---|---|---|
| CAN协议类别 | CAN 2.0 | 开发板上的CAN收发器是JTA1050,不支持CAN FD。 |
工程配置
步骤1:使用STM32CubeMX新建工程

步骤2:选择MCU芯片
步骤3:设置烧写方式
System Core ->sys->debug 设置为Serial Wire,目的是为了适配多种烧写方式,通用STLink、JLink、DAP等仿真器。忘记设置将导致,烧录程序后,第二次无法再烧录(锁芯片)。

步骤4:设置时钟源
HSE(高速时钟源)选择了Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。LSE(低速时钟源)没有选,开发板有低速时钟这里可以选。查手册,开发板的外部高速晶振和外部低速晶振分别是:8MHz和32.768KHz,所以HSE时钟频率就是8MHz,LSE时钟频率就是32.768KHz(这里没有选择)。

步骤5:时钟系统(时钟树)配置
点击Clock Configuration选项卡即可进入时钟系统配置栏
系统时钟配置分为七个步骤,分别用标号①~⑦表示,详细过程为:
①时钟源参数设置:我们选择HSE为时钟源,根据上步骤选择的外部时钟频率(8MHZ)设置
②时钟源选择:我们配置选择器选择HSE即可。
③PLL1分频系数M配置。分频系数M我们设置为4。
④PLL1倍频系数N配置。倍频系数N我们设置为168。
⑤PLL1分频系数P配置。分频系数P我们配置为2。
⑥系统时钟时钟源选择:PLL,HSI还是HSE。我们选择PLL,选择器选择PLLCLK即可。
⑦经过上面配置以后此时SYSCLK=168MHz。
经过上面的7个步骤,就配置好STM32F4的系统时钟为168MHz。接下来我们还需要配置AHB、APB1、APB2和Systick的分频系数,
⑨配置Systick分配系数1
⑩配置APB1分配系数4
⑪配置APB2分配系数为2
配置完成之后,那么HCLK=168MHz,Systick=168MHz,PCLK1=42MHz,PCLK2=84MHz
需要注意:CAN总线采用的时钟总线是PCLK1(APB1),APB1是低速总线,CAN控制器通信速率(≤1Mbps)可以认为是低速外设,所以使用APB1总线是可以的。CAN总线要求严格的时序同步(误差需<1%)。APB1的较低频率(如42MHz)更容易通过分频生成标准CAN波特率(如500kbps、1Mbps),避免高频时钟分频后的累积误差。
步骤6:CAN通信配置
引脚配置,STM32CubeMX工程中CAN_TX,对应CAN收发器中的TXD,CAN_RX,对应CAN收发器中的RXD,参考CAN收发器的休眠唤醒--TJA1043-CSDN博客。根据开发板原理图选择PB9为CAN_TX引脚,PI9为CAN_RX引脚


重要!!!CAN 的Time Quantum(时间量子)配置(Time Quantum作用介绍文章参考。。。)
计算步骤
①目的 :CAN比特率500kb/s
②根据速率计算标准比特时间(发送一个bit需要的时间)
比特时间 = = 2us
比特时间又等于 TQ总数* TQ
③ 时间量子TQ = 预分频器分频数 * 最小时间量子
④最小时间量子 = 1/总线频率 = 1/42MHZ
所以最后公式是:
预分频器分频数 * 1/42MHZ * TQ总数 ≈ 2us (计算数值与预期数值误差不能大于1%)
&& TQ总数一般在6-29(查国际标准),对于42MHZ的总线,比较合理的分频器分频数是6和7
| 分频数 | TQ总数 | 计算比特速率 |
|---|---|---|
| 6 | 14 | 500kb/s |
| 7 | 12 | 500kb/s |
由此得出TQ值可以选择12或者14。
⑤采样点计算

-
目标:使分子部分占总Tq的75%。
-
作用:长总线会增加传播误差,采样点靠后可以容忍更大的延迟差异。过早(<70%):易采样到不稳定的信号,导致误码。过晚(>90%):可能错过信号跳变,无法容忍时钟偏差。实际上需要根据总线长度和波特率大小配置采样点。
这里选择分频数6来计算采样点
| NO | Sync Seg | Pro Seg | Phase Seg1 | Phase Seg2 | 总TQ | 采样点 |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 8 | 2 | 12 | 83.% |
| 2 | 1 | 1 | 7 | 3 | 12 | 75% |
结论:选择No2的配置
注意:STM32CubeMX中的Time Quanta in Bit Segment 1 包含 Pro Seg 和 Phase Seg1
实际配置如下:

勾选RX中断

步骤7:编辑项目


步骤7:点击生成代码
遇到下面警告时需要下载对应的固件包再生成代码。注册账号登入就可以下载固件包

生成后就是这样


更多推荐



所有评论(0)