前言

在配置工程前需要有一块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需要的时间)

 比特时间 =  \frac{1}{500kb/s} = 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:点击生成代码

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

生成后就是这样

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐