首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» STM32之CAN---发送管理分析(2)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
STM32之CAN---发送管理分析(2)
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2014-12-22 17:28
|
只看该作者
STM32之CAN---发送管理分析(2)
寄存器
,
硬件
,
邮箱
3 取消发送发送邮箱中待发送的报文在正常发送成功之前也可以中途取消,通过对CAN_TSR寄存器的ABRQ位置’1’,可以中止发送请求。
当发送邮箱处于挂号或预定状态时:
发送请求马上就被中止了。
当发送邮箱处于发送状态时:
那么中止请求可能导致2种结果: 1:如果邮箱中的报文被成功发送,那么邮箱变为空邮箱,并且CAN_TSR寄存器(CAN发送状态寄存器)的TXOK位被硬件置’1’;
2:如果邮箱中的报文发送失败了,那么邮箱变为预定状态,然后发送请求被中止,邮箱变为空邮箱且TXOK位被硬件清’0’。
因此,不管如何,一旦取消发送,那么在发送操作结束后,邮箱都会变为空邮箱。
固件库中取消发送的接口为:
[cpp]
view plain
copy
/**
* @brief Cancels a transmit request.
* @param CANx: where x can be 1 or 2 to select the CAN peripheral.
* @param Mailbox: Mailbox number.
* @retval None
*/
void CAN_CancelTransmit(CAN_TypeDef* CANx, uint8_t Mailbox);
4 自动重传模式该模式主要用于满足CAN标准中,时间触发通信选项的需求。通过对CAN_MCR寄存器的NART位置’1’,来让硬件工作在该模式(禁止自动重传)。
在该模式下,发送操作只会执行一次。如果发送操作失败了,不管是由于仲裁丢失或出错,硬件都不会再自动发送该报文。
在一次发送操作结束后,硬件认为发送请求已经完成,从而对CAN_TSR寄存器的RQCP位置’1’,同时发送的结果反映在TXOK、ALST和TERR位上。
5 发送邮箱的组成说了那么多,那个三个发送邮箱的结构到底是怎么样的呢?与接收FIFO的邮箱类似,发送邮箱也是由四个寄存器组成:发送邮箱标识符寄存器(CAN_TIxR x=0..2),发送邮箱长度和时间戳寄存器(CAN_TDTxR x=0..2),发送邮箱低字节数据寄存器(CAN_TDLxR x=0..2),发送邮箱高字节寄存器(CAN_TDHxR x=0..2)。
5.1 发送邮箱标识符寄存器 (CAN_TIxR) (x=0..2)地址偏移量: 0x180,0x190,0x1A0
复位值: 0xXXXX XXXX,X=未定义位(除了第0位,复位时TXRQ=0)
注: 1 当其所属的邮箱处于等待发送的状态时,该寄存器是写保护的。
2 该寄存器实现了发送请求控制功能(第0位)-复位值为0
图2
与接收FIFO的邮箱的发送邮箱标识符寄存器类似,各位定义如下:
位31:21
STID[10:0]: 标准标识符
扩展身份标识的高字节。
位20:3
EXID[17:0]: 扩展标识符
扩展身份标识的低字节。
位2
IDE: 标识符选择
该位决定发送邮箱中报文使用的标识符类型
0: 使用标准标识符;
1: 使用扩展标识符。
位1
RTR: 远程发送请求
0: 数据帧;
1: 远程帧。
位0
TXRQ: 发送数据请求
由软件对其置1,来请求发送其邮箱的数据。当数据发送完成,邮箱为空时,硬件对其清0。
5.2 发送邮箱数据长度和时间戳寄存器 (CAN_TDTxR) (x=0..2)地址偏移量:0x184,0x194,0x1A4
复位值:未定义
图3
位31:16
TIME[15:0]: 报文时间戳
该域包含了,在发送该报文SOF的时刻,16位定时器的值。
位15:9
保留位
位8
TGT: 发送时间戳
只有在CAN处于时间触发通信模式,即CAN_MCR寄存器的TTCM位为1时,该位才有效。
0: 不发送时间戳;
1: 发送时间戳TIME[15:0]。在长度为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。
位7:4
保留位。
位3:0
DLC[15:0]: 发送数据长度
该域指定了数据报文的数据长度或者远程帧请求的数据长度。1个报文包含0到8个字节数据,而这由DLC决定。
5.3 发送邮箱低字节数据寄存器 (CAN_TDLxR) (x=0..2)地址偏移量:0x188,0x198,0x1A8
复位值:未定义位
当邮箱为空时,寄存器中的所有位为只读。
图4
位31:24
DATA3[7:0] : 字节3
报文的数据字节3。
位23:16
DATA2[7:0] : 字节2
报文的数据字节2。
位15:8
DATA1[7:0] : 字节1
报文的数据字节1。
位7:0
DATA0[7:0] : 字节0
报文的数据字节0。
报文包含0到8个字节数据,且从字节0开始。
5.4 发送邮箱高字节数据寄存器 (CAN_TDHxR) (x=0..2)地址偏移量:0x18C,0x19C,0x1AC
复位值:未定义位
当邮箱为空时,寄存器中的所有位为只读。
图5
位31:24
DATA7[7:0] : 字节7
报文的数据字节7
注: 如果CAN_MCR寄存器的TTCM位为1,且该邮箱的TGT位也为1,那么DATA7和DATA6将被TIME时间戳代替。
位23:16
DATA6[7:0] : 字节6
报文的数据字节6。
位15:8
DATA5[7:0] : 字节5
报文的数据字节5。
位7:0
DATA4[7:0] : 字节4
报文的数据字节4。
6 CAN发送状态寄存器 (CAN_TSR)地址偏移量: 0x08
复位值: 0x1C00 0000
单有发送邮箱还不行,不得有一个寄存器从整体上显示发送各邮箱的状态及控制,而CAN发送状态寄存器(CAN_TSR)即负责此工作的。
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
返回列表
FPGA/CPLD可编程逻辑
综合技术交流
测试测量
数字电路
DSP技术
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议