CAN协议的特点:
1、
2、
3、
4、
5、
6、
STM32的CAN 时间特性(有关波特率):
与CAN2.0B的协议内容相比,STM32的CAN时间特性稍微有些区别。STM32把传播时间段和相位缓冲段1合并了,因此STM32的CAN一个位只有3段:同步段(SYNC_SEG)、时间段1(BS1)和时间段2(BS2)。STM的BS1段可以设置为1-16个时间单元,刚好等于传播时间段和相位缓冲段1之和。
波特率=1/正常的位时间
正常的位时间=1×tq+tbs1+tbs2
其中:tbps1=tq×(TS1[3:0]+1)
因此,我们只需要知道BS1和BS2的设置,以及APB1的时钟频率(一般为36MHz),就可以方便的计算出波特率。比如设置TS1=6,TS2=7和BRP=4,在APB1频率为36MHz的条件下,即可得到CAN通信的波特率=36000/[(7+8+1)*5]=450Kbps。
要用到的寄存器:
主控制寄存器CAN_MCR:控制进退初始化,发送FIFO优先级。
时序寄存器CAN_BTR:用来设置分频、Tbps、Tbs2以及Tsjw等非常重要的参数,直接决定了CAN的波特率。另外还可以设置工作模式(静默模式、环回模式)等。
发送邮箱标识符寄存器CAN_TIxR:该寄存器用来设置标识符(包括扩展标识符),另外还可以设置帧类型。
发送邮箱数据长度和时间戳寄存器CAN_TDTxR:用来设置数据长度。
发送邮箱低字节数据寄存器CAN_TDLxR:用来存储将要发送的数据,只能存储低4个字节。
发送邮箱高字节数据寄存器CAN_TDHxR:用来存储将要发送的高4个字节。
接收FIFO邮箱标识符寄存器CAN_RIxR:该寄存器用来保存接收到的报文标识符等信息,通过读该寄存器获取相关信息。
接收FIFO邮箱数据长度和时间戳寄存器CAN_RDTxR;接收FIFO邮箱低字节数据寄存器CAN_RDLxR;接收FIFO邮箱高字节数据寄存器CAN_RDHxR,同发送。
过滤器模式寄存器CAN_FM1R:设置各滤波器组的工作模式,对28个滤波器组的工作模式,都可以通过该寄存器设置,不过该寄存器必须在滤波器处于初始化模式下才可以设置。
过滤器位宽寄存器CAN_FS1R:用于设置各滤波器组的位宽。其他同上。
上述两个寄存器用来设置过滤器。
如FSCx=1,FBMx=0:那么其中第x个寄存器组就被设置为1个32位过滤器-标识符屏蔽,此时本滤波器组可以设置成1个过滤器。(见参考手册P432)
如FSCx=1,FBMx=1:那么其中第x个寄存器组就被设置为2个32位过滤器-标识符列表,此时本滤波器组可以设置成2个过滤器。
如FSCx=0,FBMx=1:那么其中第x个寄存器组就被设置为2个16位过滤器-标识符屏蔽,此时本滤波器组可以设置成2个过滤器。
如FSCx=0,FBMx=0:那么其中第x个寄存器组就被设置为4个16位过滤器-标识符列表,此时本滤波器组可以设置成4个过滤器。
28个过滤器组可以被设置为远大于28个过滤器数目。
每个FIFO各自对其关联的过滤器进行编号。过滤器组关联设置通过寄存器CAN_FFA1R即过滤器FIFO关联寄存器来设置。
过滤器激活寄存器CAN_FA1R:该寄存器来控制过滤器的激活与否。1开启0关闭。
过滤器组i的寄存器x CAN_FiRx:用来存放过滤参数。
STM32 CAN总线初始化步骤:
1、
使能CAN时钟,通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,设置为上拉输入(CAN_RX),设置为复用输出(CAN_TX),并使能PA口的时钟。
2、
先设置CAN_MCR寄存器的INRQ位,让CAN进入初始化模式,然后设置CAN_MCR的其他相关控制位,再通过CAN_BTR设置波特率和工作模式(正常模式/环回模式)等信息。最后设置INRQ为0,退出初始化模式。
3、
设置CAN_FMR的FINIT位,让过滤器组工作在初始化模式下,然后设置滤波器组0的工作模式以及标识符ID和屏蔽为。最后激活滤波器。并退出滤波器初始化模式。如果用到中断,还要配置中断模式。
具体的:
如何初始化CAN:
1、
2、
3、
4、
5、
6、
7、
8、
9、
10、
11、
如何发送一个报文:
1、
2、
3、
4、
5、
6、
7、
如何接收一个报文:
1、
2、
3、
4、
5、
6、
7、
如何使CAN接收工作在中断模式下:
1、
2、
3、
上一篇:keil中调试中无法添加变量到watch
下一篇:STM32的CAN应用尝试
推荐阅读最新更新时间:2024-03-16 14:30