STM32的can现场总线的特点及工作流程分析

最近在搞stm32实验板的can现场总线实验,之前只是搞过STC51的串口通信,相比之下,发觉can总线都挺复杂的。开始时,知道自己是新手,只知道can总线跟串行通信,485通信,I2C通信一样都是用来传输数据通信的,对其工作原理一窍不通,还是从基础开始看书看资料,先了解它的基本原理吧。

原来can总线有以下特点:

主要特点

支持CAN协议2.0A和2.0B主动模式

波特率最高可达1兆位/秒

支持时间触发通信功能
 

发送

3个发送邮箱

发送报文的优先级特性可软件配置

记录发送SOF时刻的时间戳

 

接收

3级深度的2个接收FIFO

14个位宽可变的过滤器组-由整个CAN共享

标识符列表

FIFO溢出处理方式可配置

记录接收SOF时刻的时间戳

 

可支持时间触发通信模式

禁止自动重传模式

16位自由运行定时器

定时器分辨率可配置

可在最后2个数据字节发送时间戳

 

管理

中断可屏蔽

邮箱占用单独1块地址空间,便于提高软件效率

 

看完这些特点后,疑问一个一个地出现,

1. 什么是时间触发功能?

2. 发送邮箱是什么来的?

3. 报文是什么来的?

4. 什么叫时间戳?

5. 什么叫接收FIFO?

6. 什么叫过滤器?

 

好了,带着疑问往下看,看完一遍后,

 

报文:

报文包含了将要发送的完整的数据信息

 

发送邮箱:

共有3个发送邮箱供软件来发送报文。发送调度器根据优先级决定哪个邮箱的报文先被发送。

 

接收过滤器:

共有14个位宽可变/可配置的标识符过滤器组,软件通过对它们编程,从而在引脚收到的报文中选择它需要的报文,而把其它报文丢弃掉。

 

接收FIFO

共有2个接收FIFO,每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理

 

工作模式

bxCAN有3个主要的工作模式:初始化、正常和睡眠模式。

 

初始化模式

*软件通过对CAN_MCR寄存器的INRQ位置1,来请求bxCAN进入初始化模式,然后等待硬件对CAN_MSR寄存器的INAK位置1来进行确认

*软件通过对CAN_MCR寄存器的INRQ位清0,来请求bxCAN退出初始化模式,当硬件对CAN_MSR寄存器的INAK位清0就确认了初始化模式的退出。

*当bxCAN处于初始化模式时,报文的接收和发送都被禁止,并且CANTX引脚输出隐性位(高电平)

 

正常模式

在初始化完成后,软件应该让硬件进入正常模式,以便正常接收和发送报文。软件可以通过对CAN_MCR寄存器的INRQ位清0,来请求从初始化模式进入正常模式,然后要等待硬件对CAN_MSR寄存器的INAK位置1的确认。在跟CAN总线取得同步,即在CANRX引脚上监测到11个连续的隐性位(等效于总线空闲)后,bxCAN才能正常接收和发送报文。

 

过滤器初值的设置不需要在初始化模式下进行,但必须在它处在非激活状态下完成(相应的FACT位为0)。而过滤器的位宽和模式的设置,则必须在初始化模式下,进入正常模式前完成。

 

睡眠模式(低功耗)

  • STM32的can现场总线的特点及工作流程分析已关闭评论
    A+
发布日期:2019年07月14日  所属分类:参考设计