您的位置 首页 IC

STM32之CANTTCAN形式浅析

1前言传统CAN采用事件触发消息传输机制,CSMA/CD+AMP(Carrier-SenseMultipleAccesswithCollisionDetection…

1 前语

传统CAN 选用事情触发音讯传输机制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路拜访、抵触检测、优先级裁定) 介质拜访操控机制, 即多个音讯一起发送时, 依照音讯标识符的优先级次序, 低优先级音讯主动退出, 高优先级音讯持续发送。这种介质拜访方法提高了网络的利用率和高优先级音讯的实时性, 但在重负载CAN 中, 低优先级音讯常常我们总线抵触而被逼退出发送, 导致低优先级音讯传输时延伸, 且传输时延不行猜测, 因而, CAN 不适合实时性和牢靠性要求特别高或有安全性要求的场合, 如轿车电子钟的X-by-w ir e( 线控技能) 。为此国外有专家自2000 年起研讨时刻触发机制的CAN –TT CAN。2004 年严苛规范化安排将TT CAN 制定为ISO 11898-4严苛规范。

2 什么是TTCAN?

TT CA N 是CAN 的高层协议, 其数据链路层需求帧开始时刻信息。T TCAN 在CAN 的物理层和数据链路层基础上, 经过调度表完成网路上节点的分时同步通讯。网路上各节点获得同步后, 音讯只能依据调度表在规则的时极大传输, 避免了音讯传输的抵触、裁定,音讯传输时延短, 且可预知。详细介绍请参阅ISO11898-4。

3 STM32中的TTCAN完成

3.1 舱位TTCAN形式

STM32是经过主操控寄存器(CAN_MCR)的TTCM位来操控TTCAN形式的使能开关的。CAN_MCR寄存器如下所示:

地址偏移量: 0x00
复位值: 0x0001 0002

图1

位31:16 保存,硬件强制为0。
位15 RESET: bxCAN 软件复位
0: 本外设正常作业;
1: 对bxCAN进行强行复位,复位后bxCAN进入睡觉形式(FMP位和CAN_MCR寄存器被初始化为其复位值)。尔后硬件主动对该位清0。
位14:8 保存,硬件强制为0。
位7 TTCM: 时刻触发通讯形式
0: 制止时刻触发通讯形式;
1: 答应时刻触发通讯形式。
位6 ABOM: 主动离线(Bus-Off)办理
该位决议CAN硬件在什么条件下能够退出离线状况。
0: 离线状况的退出是在,软件对CAN_MCR寄存器的INRQ位进行置1随后清0后,一旦硬件检测到128次11位接连的隐性位,就退出离线状况;
1: 一旦硬件检测到128次11位接连的隐性位,主动退出离线状况。
位5 AWUM: 主动唤醒形式
该位决议CAN处在睡觉形式时由硬件仍是软件唤醒
0: 睡觉形式经过铲除CAN_MCR寄存器的SLEEP位,由软件唤醒;
1: 睡觉形式经过检测CAN报文,由硬件主动唤醒。唤醒的一起,硬件主动对CAN_MSR寄存器的SLEEP和SLAK位清0 。
位4 NART: 制止报文主动重传
0: 依照CAN规范,CAN硬件在发送报文失利时会一向主动重传直到发送成功;
1: CAN报文只被发送1次,不论发送的成果怎么(成功、犯错或裁定丢掉)。
位3 RFLM: 接纳FIFO确定形式
0: 在接纳溢出时FIFO未被确定,当接纳FIFO的报文未被读出,下一个收到的报文会掩盖原有的报文;
1: 在接纳溢出时FIFO被确定,当接纳FIFO的报文未被读出,下一个收到的报文会被丢掉。
位2 TXFP: 发送FIFO优先级
当有多个报文一起在等候发送时,该位决议这些报文的发送次序
0: 优先级由报文的标识符来决议;
1: 优先级由发送恳求的次序来决议。
位1 SLEEP: 睡觉形式恳求
软件对该方位1能够恳求CAN进入睡觉形式,一旦当时的CAN活动(发送或接纳报文)完毕,CAN就进入睡觉。
软件对该位清0使CAN退出睡觉形式。
当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清0。
在复位后该位被置1-CAN在复位后处于睡觉形式。
位0 INRQ: 初始化恳求
软件对该位清0可使CAN从初始化形式进入正常作业形式:当CAN在接纳引脚检测到接连的11个隐性位后,CAN就到达同步,并为接纳和发送数据作好预备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清0。
软件对该方位1可使CAN从正常作业形式进入初始化形式:一旦当时的CAN活动(发送或接纳)完毕,CAN就进入初始化形式。相应地,硬件对CAN_MSR寄存器的INAK方位1。

如上,只需求将CAN_MCR寄存器的TTCM方位1则舱位了TTCAN形式。此刻STM32的CAN形式以TTCAN形式进行通讯。

STM32F20x的固件库对应舱位TTCAN形式的接口为:

/* @brief  Enables or disables the CAN Time TriggerOperation communication mode.* @note   DLC must be programmed as 8 in order Time Stamp (2 bytes) to be *         sent over the CAN bus.  * @param  CANx: where x can be 1 or 2 to to select the CAN peripheral.* @param  NewState: Mode new state. This parameter can be: ENABLE or DISABLE.*         When enabled, Time stamp (TIME[15:0]) value is  sent in the last two*         data bytes of the 8-byte message: TIME[7:0] in data byte 6 and TIME[15:8] *         in data byte 7. * @retval None*/void CAN_TTComModeCmd(CAN_TypeDef* CANx, FunctionalState NewState);

或许在初始化CAN_Init时,将CAN_InitTypeDef的成员CAN_TTCM使能。

3.2 舱位时刻戳

在TTCAN形式下,CAN硬件的内部定时器被激活,而且被用于发生发送与接纳邮箱的)时刻戳,别离存储在CAN_RDTxR/CAN_TDTxR寄存器中。内部定时器在每个CAN位时刻累加。内部定时器在接纳和发送的帧开始位的采样点方位被采样,并生成时刻戳。如下:

发送邮箱时刻戳:

图2

如上图:在TTCAN形式下,TIME[15:0]将保存SOF的时刻戳。

若经过将TGT方位1则舱位了时刻戳,此刻TIME[15:0]将保存了在发送该报文SOF的时刻,16位定时器的值。一起,在发送长度为8的报文中,时刻戳TIME[15:0]是最终2个发送的字节:TIME[7:0]作为第7个字节,TIME[15:8]为第8个字节,它们替换了写入CAN_TDHxR[31:16]的数据(DATA6[7:0]和DATA7[7:0])。为了把时刻戳的2个字节发送出去,DLC有必要编程为8。

在源码中舱位此功用,修正CAN_TypeDef的sTxMailBox[3]的RDTR寄存器。

接纳邮箱时刻戳:

图3

在TTCAN形式下,接纳邮箱数据长度和时刻戳寄存器的TIME[15:0]记载接纳到的报文的SOF时刻戳。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/265837.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部