STM32之CANTTCAN模式浅析

发布者:QuantumPulse最新更新时间:2016-05-25 来源: eefocus关键字:STM32  CANTT  CAN模式 手机看文章 扫描二维码
随时随地手机看文章

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

STM32之CANTTCAN模式浅析

                                                                                                图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位时间累加。内部定时器在接收和发送的帧起始位的采样点位置被采样,并生成时间戳。如下:

发送邮箱时间戳:

STM32之CANTTCAN模式浅析

                                                                                                                       图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寄存器。

接收邮箱时间戳:

STM32之CANTTCAN模式浅析

                                                                                 图3

在TTCAN模式下,接收邮箱数据长度和时间戳寄存器的TIME[15:0]记录接收到的报文的SOF时间戳。

关键字:STM32  CANTT  CAN模式 引用地址:STM32之CANTTCAN模式浅析

上一篇:STM32学习笔记time定时器
下一篇:STM32定时器的小问题总结

推荐阅读最新更新时间:2024-03-16 14:54

STM32学习第二课:STM32c语言基础2
1.Typedef typedef用于为现有类型创建一个新的名字,或称为类型别名,用来简化变量的定义。typedef在MDK用得最多的就是定义结构体的类型别名和枚举类型了。 如:typedef struct { u16 seq_num; u16 len; u8 dev_id ; u16 command_id; u8 *pro_data; }gprs_pro_cmd_t; 然后我们就可以直接使用gprs_pro_cmd_t定义一个结构体变量。 2.结构体 ① 一般形式:Struct 结构体名 { 成员列表; }变量名列表; ② 这样是声明后直接定义,也可以先声明,后定义; 如: Stru
[单片机]
STM32复习笔记(十二)RTC实时时钟(低功耗待机唤醒)
一、RTC实时时钟特征与原理: ★ RTC (Real Time Clock):实时时钟 ★ RTC是个独立的定时器。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期。 ★ RTC模块和时钟配置系统(RCC_BDCR寄存器)是在后备区域,即在系统复位或从待机模式唤醒后RTC的设置和时间维持不变。但是在系统复位后,会自动禁止访问后备寄存器和RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前, 先要取消备份区域(BKP)写保护。 (1)RTC特征: (2)RTC工作原理框图: (3)RTC由两部分组成: APB1接口:用来和APB1总
[单片机]
<font color='red'>STM32</font>复习笔记(十二)RTC实时时钟(低功耗待机唤醒)
STM32库函数详解----(通用输入/输出GPIO)
初始化和配置相关函数 1.void GPIO_DeInit (GPIO_TypeDef* GPIOx) 函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不在使用某一接口后,可以调用该函数。 参数:GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。 2.void GPIO_Init (GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct) 函数解释:GPIO的初始化函数,该函数的作用是对io进行初始化。 参数:(1)GPIOx,GPIO的分组,如 GPIOA,
[单片机]
意法完成STM32微控制器底层软件部署
   意法半导体 (ST)完成了将其免费底层应用程序编程接口(Low-LayerApplicationProgrammingInterface,LLAPI)软件,导入支持所有的 STM32 微控制器(MCU)的 STM32 Cube软件包中。LLAPI软件让专业的开发人员,能够在方便好用的STMCube环境内开发应用,使用ST验证的软件,对最低到寄存器级的代码进行优化,从而缩短产品上市时间。下面就随嵌入式小编一起来了解一下相关内容吧。   在所有的 STM32 Cube组合内,整合LLAPI和硬件抽象层(HardwareAbstractionLayer,HAL)软件,让开发人员能够完全自由地选择外部周边的控制方式。他们可以选择利
[嵌入式]
意法半导体量产STM32 F0系列入门级MCU
意法半导体(ST)5月15日在北京媒体沟通会上宣布,开始量产基于ARM Cortex-M0处理器内核的入门级STM32 F0系列32位MCU。其适于工业控制器、家庭自动化、打印机和白色家电等应用。   STM32 F0的主要特性包括:①工作频率48MHz时,性能为38DMIPS,独立第三方评测机构的CoreMark评分为68;24MHz时,22DMIPS,CoreMark39。11项外设映射在5通道的DMA,结合总线矩阵,使闪存中执行代码与DMA数据传输同步操作。   ②四个低功耗模式包括5.3μA停止模式,实时时钟运行的2.8μA待机模式,电池供电模式下且实时时钟运行时0.4μA。1.8V/2-3.6V电源电压。功耗效率如图
[模拟电子]
意法半导体量产<font color='red'>STM32</font> F0系列入门级MCU
STM32用串口(USB串口)下载程序的方法(只能用UASRT1)
一、 STM32串口下载程序步骤 1)安装《CH340驱动(USB串口驱动)_XP_WIN7共用》 2)打开串口下载软件《STM32F4串口下载软件(FLYMCU)》 3)开发板USB接口连接到电脑USB口,给开发板供电 4)下载软件设置如下;点搜索串口,选择正确的串口号,波特率不用管,选择HEX文件,点开始编程就可以下载了。 二、 硬件连接 USB转串口CH340接线图如下。 ARM串口TXD连接到CH340G的RXD脚,RXD连接到CH340G的TXD脚; CH340是5V供电,可以由USB供电。boot0置1(接到3.3V) ,boot1置0(接地)。 三、说明:对于已加密的STM32芯片可以通过串口下载程序来解锁下
[单片机]
<font color='red'>STM32</font>用串口(USB串口)下载程序的方法(只能用UASRT1)
STM32之串口的使用
1、为什么要用串口? 自上一篇写的时间是1月20号,今6月7号了,半年没更新了。 这半年发生了什么?过完年就去找公司实习,在那里自我感觉进步很大。其实在公司大多都是自学,师傅基本不会给你说什么。但这并不能说明你的师傅对你不好,带我的那个师傅只比我高一届,但他的水平比我高的好多届。他也是自学,也没人告诉他该怎么做,因为老板也不太懂。所以自学能力很重要,当然有人带你的话,这样会更好。 不说这些了,串口在调试的时候作用非常大。也学我们在学51的时候,只是将程序下载到开发板,看看是否能运行起来,通过数码管将结果显示出来,从而就知道程序设计的正确性。以前我也是这样做的,没什么不好。 在公司实习的时候,他们调试都是使用串口打印输出
[单片机]
<font color='red'>STM32</font>之串口的使用
简述stm32的usart的功能特点
关于STM32的启动流程,网上有的资料在讨论几种boot模式,有的在回答启动文件的内容,在查阅了很多资料后,本文给出一个比较全面的总结和回答。 1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。BOOT0与BOOT1引脚的不同值指向了三种启动方式: 从主Flash启动。主Flash指的是STM32的内置Flash。选择该启动模式后,内置Flash的起始地址将被重映射到0x00000000地址,代码将在该处开始执行。一般我
[单片机]
简述<font color='red'>stm32</font>的usart的功能特点
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved