一、CAN原理
参考:STM32 的 CAN 通讯全攻略_stm32的can通信-优快云博客
STM32入门教程(CAN通信篇)_stm32 can-优快云博客
STM32CubeIDE——CAN中断接收、阻塞发送_mcu can通信中断函数-优快云博客
二、STM32CubeMX配置can
参考:STM32CubeMX 配置CAN通信 HAL库_stm32cubemx can-优快云博客
- RCC开启外部高速时钟(略)
- 配置STLink调试口(略)
- 配置串口方便调试输出(略)
- 配置工程名、生成路径,之后生成工程(略)
- 配置CAN
CAN波特率 = 时钟频率 / ((时间单元1+时间单元2+重新同步跳跃时间单元)* 分频系数)
上图设置波特率为:500kbps = 36M/((8+9+1)*4)
- 时间触发模式(Time Triggered Communication Mode):会自动为报文生成时间戳,没有研究过,暂时默认关闭。
- 自动总线关闭管理(Automatic Bus-Off Management):没有研究过,暂时默认关闭。
- 自动唤醒模式(Automatic Wake-Up Mode):使能后,当CAN外设在休眠状态时如果CAN总线有数据,则自动唤醒CAN外设。建议使能。
- 自动重发(Automatic Retransmission):使能后,如果因为仲裁失败(总线冲突)或是其他原因导致发送失败,会自动重发。建议使能。
- 接收FIFO锁定模式(Receive Fifo Locked Mode):如果使能,当接收FIFO满时,下一条数据会被丢失。如果不使能,则覆盖前面的数据。
- 发送FIFO优先级(Transmit Fifo Priority):当发送邮箱中同时有多个帧,是按照先进先出的顺序发送还是按照ID的优先级发送。如果不使能,则按照ID优先级发送。如果使能,则按照先进先出优先级发送。