- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
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)。而过滤器的位宽和模式的设置,则必须在初始化模式下,进入正常模式前完成。
睡眠模式(低功耗)
*软件通过对CAN_MCR寄存器的SLEEP位置1,来请求进入这一模式。在该模式下,bxCAN的时钟停止了,但软件仍然可以访问邮箱寄存器。
*当bxCAN处于睡眠模式,软件想通过对CAN_MCR寄存器的INRQ位置1,来进入初始化式,
那么软件必须同时对SLEEP位清0才行
*有2种方式可以唤醒(退出睡眠模式)bxCAN:通过软件对SLEEP位清0,或硬件检测CAN
总线的活动。
工作流程
那么究竟can是怎样发送报文的呢?
发送报文的流程为:
应用程序选择1个空发送邮箱;设置标识符,数据长度和待发送数据;
然后对CAN_TIxR寄存器的TXRQ位置1,来请求发送。TXRQ位置1后,邮箱就不再是空邮箱;而一旦邮箱不再为空,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上进入挂号状态,并等待成为最高优先级的邮箱,参见发送优先级。一旦邮箱成为最高优先级的邮箱,其状态就变为预定发送状态。一旦CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。一旦邮箱中的报文被成功发送后,它马上变为空邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。
如果发送失败,由于仲裁引起的就对CAN_TSR寄存器的ALST位置1,由于发送错误引起的
就对TERR位置1。
原来发送的优先级可以由标识符和发送请求次序决定:
由标识符决定
当有超过1个发送邮箱在挂号时,发送顺序由邮箱中报文的标识符决定。根据CAN协议,标
识符数值最低的报文具有最高的优先级。如果标识符的值相等,那么邮箱号小的报文先被发
送。
由发送请求次序决定
通过对CAN_MCR寄存器的TXFP位
原创力文档


文档评论(0)