基本的CAN通信的位定时与同步可参看下面地址的博文:
CAN总线学习笔记(5)- CAN通信的位定时与同步_can的同步跳转宽度-CSDN博客
要明白图206中的位时序,需要明白:正常的位时间,sync_seg,tq,采样点等一系列的问题。
tq如下图
就STM32而言,传播时间段(PTS)与相位缓冲断1(PBS1)合并形成了时间段BS1。
tq是can的一个时钟周期,can的时钟是挂在PCKL1上面的。
在每个有效沿(显性到隐性)进行同步。
采样点,can芯片在此时进行采样,判断是1还是0。
正常位时间,如下图,就是报文的一位。
sync_seg同步段,就是沿的开始,这个同步段是固定的一个can时钟,也就是tq。
首先要明确是的,执行时序同步动作的都是接收节点,最终目的都是要跟发送节点的时序同步起来,所以发送节点是不需要同步的。其次,发送节点在SS段如果因为位的改变,会产生电平跳变沿,只有在同步的情况下,接收节点接收到的跳变沿才能也处于接收节点时序的SS段。
但是在传输过程中,肯定会有各种问题导致发送和接收节点的时序不同步,故引入了同步机制:硬同步、重新同步。
当总线空闲时,所有的节点均处于接收状态,按照各自的时序来监听总线的信息,在同一时刻,很有可能节点A处于PTS段,节点B处于PBS1段,节点C处于PBS2段。
此时节点A要准备发起通讯,等它的时序到了SS段,它往总线上发送SOF跳变沿,此时,有可能节点B处于PTS,节点C处于PBS1。显然它们的时序没有跟节点A同步。故节点B和C要强行调整它们的SS段,令其包含接收到的SOF的跳变沿。
如下图所示,接收节点在PBS1阶段接收到了SOF的跳变沿,它只能强行调整SS段,变成调整之后的时序。
硬同步只发生在SOF位,它只能保证SOF的同步,无法保证后续位的同步。
当硬同步结束后,在后续的数据传输过程中,必须保证每一个由隐性电平到显性电平的跳变沿也必须落在SS段内。否则,产生重新同步。重新同步分为两种情况:
(1)SS段超前隐性电平到显性电平的跳变沿,PBS1暂时延长
如下图所示,以接收节点的位数来分析:
第1位,硬同步结束后,发送和接收节点的时序已经同步,跳变沿能落在接收节点的SS段内。
第2位,接收节点因为某些干扰,导致该位的时长缩短了。
第3位,发送节点的跳变沿没有落在接收节点的SS段内,而是落在了PTS段,但是这是一个由显
性电平到隐性电平的跳变沿,接收节点不会进行同步动作。
第4位,发送节点产生一个电平跳变,同样的接收节点发现该跳变还是落在了PTS段,但这次是由
隐性电平到显性电平的跳变,接收节点会进行同步动作,它要延长PBS1,以便同步时序。
第5位,发送和接收节点的时序又同步了,PBS1的延长只在重新同步的那一位生效,该位结束
后,PBS1会恢复预设值。
下图是对第4位时间同步的详细解析,接收节点接收到隐性电平到显性电平跳变沿时,已经处于PTS阶段,SS段超前跳变沿2个Tq,故为了后面的SS段能同步,在本次位
(2)SS段滞后隐性电平到显性电平的跳变沿,PBS2暂时缩短
如下图所示,以接收节点的位数来分析:
第1位,硬同步结束后,发送和接收节点的时序已经同步,跳变沿能落在接收节点的SS段内。
第2位,接收节点因为某些干扰,导致该位的时长增大了。但此时发送节点已经发送了第3位的跳
变沿,它落在了PBS2段内,但这是一个由显性电平到隐性电平的跳变沿,接收节点不会进行同步动
作。
第3位,同样的,接收节点的PBS2接收到了发送节点发送的第4位的跳变沿,这是一个由隐性电
平到显性电平的跳变沿,接收节点会进行同步动作,它要缩短PBS2,以便同步时序。
第4位,发送和接收节点的时序又同步了,PBS2的缩短只在重新同步的那一位生效,该位结束
后,PBS2会恢复预设值。
下图是对第3位时间同步的详细解析,接收节点接收到隐性电平到显性电平跳变沿时,已经处于PBS2阶段,SS段落后跳变沿2个Tq,故为了后面的SS段能同步,在本次位时间片中,必须缩短PBS2相同长度的Tq,即图中的2个Tq。
stm32配置
(1)时钟配置
采用内部HSI作为震荡源。
(2)can 配置