CAN通讯精简知识点及STM32库函数配置流程

一、CANt通讯有高速和低速两种方式,高速适合近距离传输,为闭环,而低速则适用于远距离传输,为开环。

二、CAN电平标准

CAN总线采用差分信号,即两线电压差来传输数据,对高速CAN而言,电压差为0时,表示逻辑1(隐性电平),相反,电压差为2v时,表示逻辑0(显性电平)低速CAN的电平标准稍有不同,显性电平有优先级

三、CAN总线帧格式

CAN协议规定了5种类型的帧

数据帧:发送设备主动发送的数据

遥控帧:接收设备主动请求数据

错误帧:某个设备检测出错误时,向其它设备通知错误

过载帧:接收设备通知其尚未做好接收准备

帧间隔:用具将数据帧与遥控帧与前面的帧分开

对于大多数帧硬件已经设计好了,我们用的时候重点关注数据帧。

四、数据帧

数据帧由七个段构成:

帧起始:表示数据开始的段,一个数据位,均为显性电平0

仲裁段:表示该帧优先级的段

控制段:表示数据的字节数及保留位的段

数据段:发送数据的具体内容,可发送0-8个字节

CRC段:校验段,发送端根据发送的数据,计算好CRC校验后的值,并与附在数据段后面,接收设备根据接收到数据段的数据,就算CRC校验后的值,并与发送段计算好CRC校验后的值进行对比,看是否相同,相同则数据正确,反之数据有误。

ACK段:表示确定正常接收的段,与I2C类似

帧结束:表示数据帧结束的段

五、STM32标准库函数CAN通信配置流程:

分为三个部分:CAN外设初始化发送报文接收报文

1、CAN外设初始化

  • RCC时钟初始化(CAN引脚时钟和CAN时钟)
  • GPIO初始化,CAN_TX所对应的引脚初始化为复用推挽输出(~AF_PP),CAN_RX所对应的引脚初始化为上拉输入(~IPU)
  • 整个CAN外设的初始化(CAN_Init)
  • 过滤器初始化(CAN_FilterInit)
  • 中断,ITConfig函数,使能中断输出,再加上NVIC和中断函数(如需)

2、发送报文

  • CanTxMsg:发送报文结构体变量,需要先初始化适用,用法类似于GPIO_InitTypeDef
  1. StdId(标准ID)
  2. ExtId(扩展ID)
  3. IDE(ID类型,标准/扩展),
  4. RTR(指定消息帧类型,数据帧/远程帧)
  5. DLC(发送数据的长度,0-8)
  6. DaTa[8]:要发送数据的数组
  7. CRC校验由硬件自动生成,无需我们操作
  • CAN_Transmit:其库函数返回值表明要传的邮箱
  • CAN_TransmitStatus:获取邮箱状态

3、接收报文

  • CanRxMsg:接收报文结构体变量,需要先初始化再使用,内部包含:
  1. StdId(标准ID)
  2. ExtId(扩展ID)
  3. IDE(ID类型,标准/扩展),
  4. RTR(指定消息帧类型,数据帧/远程帧)
  5. DLC(接收数据的长度,0-8)
  6. DaTa[8]:要接收数据的数组
  7. CRC校验由硬件自动生成,无需我们操作
  • CAN_MessagePending:获取指定FIFO队列里面排队报文的数目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值