最近向体系的学习一下CAN总线的运用,苦于找不到适宜的板子来做试验。刚好看到STM32单片机自带有CAN操控器,就想经过STM32作为载体来学习一下CAN总线。
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的作业形式和波特率。
当CAN进入初始化之后,先设置CAN_MCR的操控位。见下面的图
用来操控这些设置。
接下来是设置寄存器CAN_BTR,经过这个寄存器来设置CAN的作业形式和波特率。
寄存器描绘
程序代码
mode用来设置形式,一般形式或许回环形式。
而下面的四个用来设置波特率,tsjw tbs2 tbs1 brp
这四个参数是怎样来决议CAN的波特率的呢?
然后使CAN退出初始化形式
然后再初始化过滤器
然后就可以开端进行通讯了。
待续