STM32F429 rtthread CAN总线

1.简介

CAN(Controller Area Network) 总线
CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个“120欧”的电阻。来做阻抗匹配,以减少回波反射。
STM32F429 rtthread CAN总线
CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻
STM32F429 rtthread CAN总线

2.代码移植

2.1.rtconfig.h

#define RT_USING_CAN
#define BSP_USING_CAN
#define BSP_USING_CAN1

2.2.工程添加

E:\RTT\rt-thread-4.0.2-USBHID\bsp\stm32\libraries\HAL_Drivers\drv_can.c
E:\RTT\rt-thread-4.0.2-USBHID\components\drivers\can\can.c
E:\RTT\rt-thread-4.0.2-USBHID\bsp\stm32\libraries\STM32F4xx_HAL\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal_can.c

2.3.打开HAL库

STM32F429 rtthread CAN总线

2.4.修改时钟

usb和can一起使用,usb时钟为48M,can时钟为42M或者45M
STM32F429 rtthread CAN总线
STM32F429 rtthread CAN总线

2.5.can波特率修改

drv_can.c
STM32F429 rtthread CAN总线
tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1TQ~CAN_SJW_4TQ
tbs2:时间段2的时间单元. 范围:CAN_BS2_1TQ~CAN_BS2_8TQ;
tbs1:时间段1的时间单元. 范围:CAN_BS1_1TQ~CAN_BS1_16TQ
brp :波特率分频器.范围:1~1024; tq=(brp)*tpclk1
波特率=Fpclk1/((tbs1+tbs2+1)*brp); 其中tbs1和tbs2我们只用关注标识符上标志的序号,例如CAN_BS2_1TQ,我们就认为tbs2=1来计算即可。
Fpclk1的时钟在初始化的时候设置为42M
则波特率为:42M/((6+7+1)*6)=500Kbps

2.6.添加设备使用例程

thread_can.c
代码死活贴不上来,放弃了

3.验证

开发板can接口连接CANalyst-II,CANalyst-II的USB口接电脑,USB-CAN TOOL工具查看数据发送接收情况
STM32F429 rtthread CAN总线
先粗略的研究一下,可以收发数据了,以后用到在详细研究吧
代码链接:https://download.csdn.net/download/u010915068/20079981

上一篇:【STM32F429的DSP教程】第38章 STM32F429的FIR高通滤波器实现(支持逐个数据的实时滤波)


下一篇:ADI 逆变器 BMS专用 多通道I/O 数字隔离器 ADUM3481 ADUM1412 ADUM1402 ADUM1201 ADUM1210 ADUM3201