STM32G431xxxx系列CAN通信(一)
CAN通信,从会到不会,从入门到入土。
CAN通信基础知识
在某些场景下,由于串口、I2C等通信方式的速率、数据量的限制,或者布线限制等,用CAN通信在上述场景下进行数据交流。优点为传输距离较远(Max10km)、数据传输速率高(Max1Mb/s)和具备优秀的仲裁机制。
1.硬件
a.硬件接线
图1中所有的设备挂载在CAN_H、CAN_L两条通信线上,左侧125kbps使用的是低速ISO11519-2标准,此标准下不需要两根线形成闭环,且每根线上接一个2.2kΩ的电阻;右侧500kbps使用的是高速ISO11898标准,此标准下,线要形成回路,且回路要接上两个120Ω(终端)电阻做导线的阻抗匹配,为了模拟无限远的传输线及减少回波反射。
每个节点包含三部分CAN通信的外设,分别为微控制器、CAN控制器和CAN收发器,经典的组合为51单片机+SJA1000+PCA82C250(5V供电),特别的像STM32已经集成了CAN控制器,所以只需要再增加一个CAN收发器即可,经典的组合为STM32+SN65HVD230(3.3V供电)。
发送报文时,由CAN控制器串转并;接收报文时,由CAN控制器并转串,当其接收到来自CAN收发器的数据后,会由接口管理逻辑向主控制器提起中断。
b.信号电平
2.软件
a.帧结构
CAN通信的一次通信过程包含5个帧,分别为数据帧、遥控帧、错误帧、过载帧和帧间隔。其中 由硬件完成,其他两帧需要配置。
起始帧:单个显性位(低电平)组成;
结束帧:7个连续隐性位(高电平)组成,结束帧EOF之后再等三个位的空闲(隐性位或高电平),总线才空闲或者才能开启下一帧;
遥控帧:发送给目标节点,以向目标节点请求数据(RTR为高电平,对应帧为遥控帧;反之,对应帧为数据帧),没有数据段。
仲裁段:此段存储的信息为CAN通信的ID,每一个挂在总线上的设备都有一个CAN控制器,在此控制器里可以设置过滤器,便于筛选出用户所需的ID,从而与此ID对应的设备通信。当多个设备同时发送数据时,需要进行仲裁(仲裁在发送的时候用,而过滤在接收的时候用),ID可以被认作地址,但并不一定是真正的地址,ID的两个作用:仲裁+过滤;
左为标准ID,右为扩展ID。
RTR位用于表示是数据帧还是远程帧,IDE用于表示是标准帧还是扩展帧。
控制段:此段用于表示CAN通信的数据帧由多少字节组成,DLC有4位,DLC3~DLC0从0000到1000分别表示数据段有0-8个字节;
数据段:此段由CAN控制器对应的寄存器控制,将需要发送的数据填入发送缓冲区即可;
CRC段:接收方将接收到的15位CRC发送方的CRC对比,15位由此段前15位共同组成;
ACK段:发送方将ACK段置隐性位(高电平),接收方完成CRC校验后会将此段置显性位(低电平),当发送方回读到显性位时,证明接收方接受成功;
b.仲裁
关键:线与和回读。
(1)总线处于空闲状态时,最先开始发送数据的节点获得总线控制权,且发送过程不会被其他节点抢断;
(2)多个节点同时开始发送数据时,总线按如图1-11-1所示的过程进行仲裁;
(3)总线从忙到空闲状态时,ID优先级高(ID小)的节点会先获得总线控制权,即使其在ID优先级低的节点之后申请,如图1-11-2所示;
(4)具有相同ID的数据帧和遥控帧在总线上竞争时,仲裁段最后一位(RTR)位为显性的具有优先权,可以继续发送;
(5)标准格式的数据帧和与其具有相同ID的扩展格式的数据帧在总线上竞争时,标准格式的RTR为显性位的具有优先权,可以继续发送。
c.过滤器
STM32的每一组CAN都有14个过滤器,因此当接收到的ID满足其中的任何一个时,便可以被接收或者可以说接收方能接收至少14种不同的报文。
过滤器有标识符识别模式和屏蔽模式。其中前者要求只有报文中的ID要与过滤器设置的ID完全一致,此报文才能通过。后者的过滤器不仅有过滤器,还有屏蔽器,当屏蔽器某一位为1时,报文中的ID对应的位必须与过滤器设置的ID对应的位一致,报文中的ID的那一位才能通过;当屏蔽器为0时,报文中的ID可与过滤器设置的ID不一致,此时报文中的ID那一位也能通过。
左图为标识符(ID)识别模式,右图为屏蔽模式。
每个过滤器又有2个32的寄存器,因此可以组成四类不同的过滤模式:
图中采用掩码模式配置了一个32位的过滤器,允许通过的ID通过两个16位过滤器设置,掩码也通过两个16位过滤器设置,图中掩码为111…111,表示32位ID必须与过滤器的32位ID全部相同。
d.报文
总线上传输的信息叫报文,是将数据按规定的标准格式“打包”后形成的“包裹”。
e.波特率
1bit可由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2)组成,而1段的时间又可以由若干TQ(最小时间单位)组成。
由于STM32把传播时间段和同步段合并了,所以其1bit由同步段(SYNC_SEG)、时间段1(BS1)和时间段2(BS2)组成,波特率的计算如图17所示:
通常控制(SS+BS1)/(SS+BS1+BS2)在75%~85%之间,其中SS为SYNC_SEQ的值。上述三段在CubeMX里的对应关系在“STM32G431xxxx系列CAN通信(二)”中列出。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)