大一寒假——设置can总线——STM32CubeMX
-
CAN收发器
c板与一块具备CAN收发功能的开发板的连接类似下图
这样就形成了一个CAN总线的闭环通信网络
-
使用CubeMX生成工程
时钟
如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC;
如果使用默认内部时钟(HSI),这一步可以略过;
调试选项配置
选项SYS中
默认没有配置下载引脚,烧录之后下载器将无法再检测到;
使用ST-Link,配置为SW选项:
配置串口
串口开启与芯片模块有关,参照说明更改
注意要手动更改引脚
配置can外设
1.CubeMX配置没有CAN模块配置如下:
CAN波特率计算:
1、can分频,4分频:32Mhz / 4 = 8Mhz;
2、公式:SYNC_SEG+BS1+BS2 = T;
2、波特率计算,目标波特率是500khz:
根据:8Mhz/ T = 8000khz/T = 500khz
计算出:T=16
2.CubeMX配置有Can外设
(1)选中CAN1(主)
配置CAN控制只需配置波特率,一般为500KHz,最高1MHz,其它保持默认即可。
CAN总线的波特率比较特别,串口协议的波特率只支持一个确定值,而CAN总线的波特率支持一个较宽的范围,这也使得CAN总线的抗噪声性能大大增强。
CAN总线的波特率计算方式如下:
① 确定CAN外设连接的外设总线时钟PCLK1
此处CAN1连接到APB1外设总线上,在配置HCLK=168Mhz的基础上,PCLK=42Mhz。
② 确定分频系数
此处将PCLK1进行7分频,为 42Mhz / 7 = 6Mhz,所以设置CAN1外设的分频系数为7:
③ 配置位段时序
CAN协议的每一个数据位都分为许多时间段,如图:
同步段(SYNC_SEG):位变化应该在此时间段内发生,只有一个时间片的固定长度(1 x tq);
位段1(BS1):定义采样点的位置,其持续长度可以在 1 到 16 个Tq之间调整;
位段2(BS2):定义发送点的位置,其持续长度可以在 1 到 8 个Tq之间调整;
同步跳转宽度(SJW):定义位段加长或缩短的上限,它可以在 1 到 4 个Tq之间调整;
目标波特率是500khz,设:
B S 1 + B S 2 + S J W = T BS1+BS2+SJW = T
BS1+BS2+SJW=T
根据:
6 M h z / T = 6000 k h z / T = 500 k h z 6Mhz/T = 6000khz / T = 500khz
6Mhz/T=6000khz/T=500khz
计算出:
T = 12 T = 12
T=12
最后在BS1、BS2、SJW的每个范围内,调整出和为12即可:
使能CAN1控制器接收中断
(2)配置时钟树
STM32F407ZGT6的最高主频到168M,使HCLK = 168Mhz即可
3.生成工程
————————————————
参考资料原文链接:
https://mculover666.blog.csdn.net/article/details/110148532?depth_1-
https://blog.csdn.net/qq_39758638/article/details/113363763