1.简介
CAN(Controller Area Network) 总线
CAN通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有CAN_High和CAN_Low两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。
CAN物理层的形式主要分为闭环总线及开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度最高为1Mbps,总线的两端各要求有一个“120欧”的电阻。来做阻抗匹配,以减少回波反射。
CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km,最高通讯速率为125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2千欧”的电阻
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库
2.4.修改时钟
usb和can一起使用,usb时钟为48M,can时钟为42M或者45M
2.5.can波特率修改
drv_can.c
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工具查看数据发送接收情况
先粗略的研究一下,可以收发数据了,以后用到在详细研究吧
代码链接:https://download.csdn.net/download/u010915068/20079981