微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32的CAN应用尝试

STM32的CAN应用尝试

时间:11-27 来源:互联网 点击:
最近向系统的学习一下CAN总线的应用,苦于找不到合适的板子来做实验。刚好看到STM32单片机自带有CAN控制器,就想通过STM32作为载体来学习一下CAN总线。

CAN控制器之外加上CAN收发器就可以用于CAN通讯了,于是随便找了一个小板子,焊接上CAN收发器TJA1050,就可以用于CAN通讯了。

在这篇博文中,先把通常的思路给自己理清一下。至于CAN协议的具体内容还是要参考CAN-BUS的规范了。在这里就是讲使用STM32单片机的CAN的简单思路。

STM32 CAN总线初始化步骤:

1、配置相关引脚的复用功能,使能CAN时钟。

使能CAN时钟,通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,设置为上拉输入(CAN_RX),设置为复用输出(CAN_TX),并使能PA口的时钟。

2、设置CAN工作模式及波特率等。

先设置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退出初始化模式

然后再初始化过滤器


然后就可以开始进行通讯了。

待续


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top