大一寒假——设置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

 

 

 

 

 

 

 

posted @ 2022-01-15 18:15  烟雨汀  阅读(1968)  评论(0编辑  收藏  举报
返回顶端