首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STM32之CAN---工作/测试模式浅析(2)

STM32之CAN---工作/测试模式浅析(2)

5 控制和状态寄存器5.1 CAN主控制寄存器 (CAN_MCR)地址偏移量: 0x00
复位值: 0x0001 0002

                                                                                      图4

位31:16保留,硬件强制为0。
位15RESET: bxCAN 软件复位
0: 本外设正常工作;
1: 对bxCAN进行强行复位,复位后bxCAN进入睡眠模式(FMP位和CAN_MCR寄存器被初始化为其复位值)。此后硬件自动对该位清0。
位14:8保留,硬件强制为0。
位7TTCM: 时间触发通信模式
0: 禁止时间触发通信模式;
1: 允许时间触发通信模式。
注: 要想了解关于时间触发通信模式的更多信息,请参考21.4.2:时间触发通信模式。
位6ABOM: 自动离线(Bus-Off)管理
该位决定CAN硬件在什么条件下可以退出离线状态。
0: 离线状态的退出是在,软件对CAN_MCR寄存器的INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,就退出离线状态;
1: 一旦硬件检测到128次11位连续的隐性位,自动退出离线状态。
位5AWUM: 自动唤醒模式
该位决定CAN处在睡眠模式时由硬件还是软件唤醒
0: 睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒;
1: 睡眠模式通过检测CAN报文,由硬件自动唤醒。唤醒的同时,硬件自动对CAN_MSR寄存器的SLEEP和SLAK位清0 。
位4NART: 禁止报文自动重传
0: 按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功;
1: CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失)。
位3RFLM: 接收FIFO锁定模式
0: 在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有的报文;
1: 在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃。
位2TXFP: 发送FIFO优先级
当有多个报文同时在等待发送时,该位决定这些报文的发送顺序
0: 优先级由报文的标识符来决定;
1: 优先级由发送请求的顺序来决定。
位1SLEEP: 睡眠模式请求
软件对该位置1可以请求CAN进入睡眠模式,一旦当前的CAN活动(发送或接收报文)结束,CAN就进入睡眠。
软件对该位清0使CAN退出睡眠模式。
当设置了AWUM位且在CAN Rx信号中检测出SOF位时,硬件对该位清0。
在复位后该位被置1-CAN在复位后处于睡眠模式。
位0INRQ: 初始化请求
软件对该位清0可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清0。
软件对该位置1可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置1。
5.2 CAN主状态寄存器 (CAN_MSR)地址偏移量: 0x04
复位值: 0x0000 0C02

                                                                                    图5

位31:12保留位,硬件强制为0
位11RX: CAN接收电平
该位反映CAN接收引脚(CAN_RX)的实际电平。
位10SAMP: 上次采样值
CAN接收引脚的上次采样值(对应于当前接收位的值)。
位9RXM: 接收模式
该位为1表示CAN当前为接收器。
位8TXM: 发送模式
该位为1表示CAN当前为发送器。
位7:5保留位,硬件强制为0。
位4SLAKI: 睡眠确认中断
当SLKIE=1, 一旦CAN进入睡眠模式硬件就对该位置1,紧接着相应的中断被触发。软件可对该位清0,当SLAK位被清0时硬件也对该位清0。
注: 当SLKIE=0, 不应该查询该位,而应该查询SLAK位来获知睡眠状态。
位3WKUI: 唤醒中断挂号
当CAN处于睡眠状态,一旦帧起始位(SOF)被检测到,硬件就对该位置1;并且如果CAN_IER寄存器的WKUIE位为1,则相应的中断被触发。
该位由软件清0。
位2ERRI: 出错中断挂号
当由于检测到出错而对CAN_ESR 寄存器的某位置1,并且CAN_IER 寄存器的相应中断使能位也被置1时,硬件对该位置1;并且如果CAN_IER寄存器的ERRIE位为1则错误中断被触发。
该位由软件清0。
位1SLAK: 睡眠模式确认
当CAN进入睡眠模式时硬件就对该位置1,从而供软件进行状态查询。 该位是对软件请求进入睡眠模式的确认(对CAN_MCR寄存器的SLEEP位置1)。当CAN退出睡眠模式时硬件对该位清0 (需要跟CAN总线同步)。 这里跟CAN总线同步是指,硬件需要在CAN的RX引脚上检测到连续的11位隐性位。
注: 通过软件或硬件对CAN_MCR 的SLEEP位清0,是开启退出睡眠模式过程的唯一途径。有关清除SLEEP位的详细信息,参见CAN_MCR寄存器的AWUM位的描述。
位0INAK: 初始化确认
当CAN进入初始化模式时硬件就对该位置1,从而供软件进行状态查询。 该位是对软件请求进入初始化模式的确认(对CAN_MCR寄存器的INRQ位置1)。
当CAN退出初始化模式时硬件对该位清0 (需要跟CAN总线同步)。这里跟CAN总线同步是指,硬件需要在CAN的RX引脚上检测到连续的11位隐性位。
继承事业,薪火相传
返回列表