CAN笔记(14) STM32-M4 寄存器

  • 1. 主控制寄存器
  • 2. 位时序寄存器
  • 3. 发送邮箱标识符寄存器
  • 4. 发送邮箱数据长度和时间戳寄存器
  • 5. 发送邮箱低字节数据寄存器
  • 6. 接收 FIFO 邮箱标识符寄存器
  • 7. 过滤器模式寄存器
  • 8. 过滤器位宽寄存器
  • 9. 过滤器 FIFO 关联寄存器
  • 10. 过滤器激活寄存器
  • 11. 过滤器组 i 的寄存器 x

1. 主控制寄存器

首先,来看 CAN 的主控制寄存器 CAN_MCR
该寄存器各位描述如图 :

  • 位 0 INRQ初始化请求 (Initialization request)
    软件通过将此位清零,来将硬件切换到正常模式
    一旦在 Rx 信号上监测到连续 11 个隐性位, CAN 硬件即完成同步并准备进行发送和接收
    硬件通过将 CAN_MSR 寄存器的 INAK位清零来指示此事件
    软件通过将此位置 1 来请求 CAN 硬件进入初始化模式
    一旦置 1, CAN 硬件将等待当前 CAN 活动(发送或接收)结束,然后进入初始化模式
    硬件通过将 CAN_MSR寄存器的 INAK 位置 1 来指示此事件

  • 位 1 SLEEP: 睡眠模式请求 (Sleep mode request)
    0:将退出睡眠模式
    1:用于请求 CAN 硬件进入睡眠模式,一旦当前 CAN 活动(发送或接收CAN帧)结束,即进入睡眠模式
    AWUM 位置 1 以及在 CAN RX 信号上检测到 SOF 位时,硬件即将此位清零
    复位后,此位将置 1,CAN 启动睡眠模式

  • 位 2 TXFP: 发送 FIFO 优先级 (Transmit FIFO priority)
    此位用于控制在几个邮箱同时挂起时的发送顺序
    0:优先级由消息标识符确定
    1:优先级由请求顺序(时间顺序)确定

  • 位 3 RFLM: 接收 FIFO 锁定模式 (Receive FIFO locked mode)
    0:接收 FIFO 上溢后不锁定。接收 FIFO 装满后,下一条传入消息将覆盖前一条消息
    1:接收 FIFO 上溢后锁定。接收 FIFO 装满后,下一条传入消息将被丢弃

  • 位 4 NART: 禁止自动重发送 (No automatic retransmission)
    0:CAN 硬件将自动重发送消息,直到根据 CAN 标准消息发送成功
    1:无论发送结果如何(成功、错误或仲裁丢失),消息均只发送一次

  • 位 5 AWUM: 自动唤醒模式 (Automatic wakeup mode)
    此位控制 CAN 硬件在睡眠模式下接收到消息时的行为
    0:在软件通过将 CAN_MCR 寄存器的 SLEEP 位清零发出请求后,退出睡眠模式
    1:一旦监测到 CAN 消息,即通过硬件自动退出睡眠模式
    CAN_MCR 寄存器的 SLEEP 位和 CAN_MCR 寄存器的 SLAK 位由硬件清零

  • 位 6 ABOM: 自动的总线关闭管理 (Automatic bus-off management)
    此位控制 CAN 硬件在退出总线关闭状态时的行为
    0:在软件发出请求后,一旦监测到 128 次连续 11 个隐性位,并且软件将 CAN_MCR 寄存器的 INRQ 位先置 1 再清零,即退出总线关闭状态
    1:一旦监测到 128 次连续 11 个隐性位,即通过硬件自动退出总线关闭状态

  • 位 7 TTCM:时间触发通信模式 (Time triggered communication mode)
    0:禁止时间触发通信模式
    1:使能时间触发通信模式

  • 位 14:8 保留
    必须保持复位值

  • 位 15 RESET: bxCAN 软件主复位 (bxCAN software master reset)
    0:正常工作
    1:强制 bxCAN 进行主复位 -> 复位后激活睡眠模式(FMP位和 CAN_MCR 寄存器初始化为复位值)
    此位自动复位为 0

  • 位 16 DBF: 调试冻结 (Debug freeze)
    0:调试期间 CAN 处于工作状态。
    1:调试期间 CAN 处于接收/发送冻结状态,接收 FIFO 仍可正常访问/控制

  • 位 31:17 保留
    必须保持复位值


2. 位时序寄存器

CAN 位时序寄存器 CAN_BTR

只有 CAN 硬件处于初始化模式时,才能由软件访问此寄存器

该寄存器用于设置分频、Tbs1、Tbs2以及 Tsjw 等非常重要的参数,直接决定了 CAN 的波特率
另外该寄存器还可以设置 CAN 的工作模式

该寄存器各位描述如图:

  • 位 9:0 BRP[9:0]: 波特率预分频器 (Baud rate prescaler)
    这些位定义一个时间片的长度
    Tq = (BRP[9:0]+1) x tPCLK

  • 位 15:10 保留
    必须保持复位值

  • 位 19:16 TS1[3:0]: 时间段 1 (Time segment 1)
    这些位定义时间段 1 中的时间片数目
    tBS1 = tCAN x (TS1[3:0] + 1) ,其中 tCAN = 1Tq

  • 位 22:20 TS2[2:0]: 时间段 2 (Time segment 2)
    这些位定义时间段 2 中的时间片数目
    tBS2 = tCAN x (TS2[2:0] + 1)

  • 位 23 保留
    必须保持复位值

  • 位 25:24 SJW[1:0]: 再同步跳转宽度 (Resynchronization jump width)
    这些位定义 CAN 硬件在执行再同步时最多可以将位加长或缩短的时间片数目
    tRJW = tCAN x (SJW[1:0] + 1)

  • 位 29:26 保留
    必须保持复位值

  • 位 30 LBKM: 环回模式(调试) (Loop back mode (debug))
    0:禁止环回模式
    1:使能环回模式

  • 位 31 SILM: 静默模式(调试) (Silent mode (debug))
    0:正常工作
    1:静默模式

STM32F429 提供了两种测试模式:

  • 环回模式
  • 静默模式

当然还可以组合成环回静默模式

这里简单介绍下环回模式:
在环回模式下, bxCAN 把发送的报文当作接收的报文并保存(如果可以通过接收过滤)在接
收邮箱里
也就是环回模式是一个自发自收的模式

CAN 环回模式如图:

环回模式可用于自测试
为了避免外部的影响,在环回模式下 CAN 内核忽略确认错误
(在数据/远程帧的确认位时刻,不检测是否有显性位)

在环回模式下, bxCAN 在内部把 Tx 输出回馈到 Rx 输入上
而完全忽略 CANRX 引脚的实际状态,发送的报文可以在 CANTX 引脚上检测到


3. 发送邮箱标识符寄存器

CAN 发送邮箱标识符寄存器CAN_TIxR(x = 0~2)
因为有 3 个发送邮箱,所以寄存器 CAN_TIxR 有 3 个

当邮箱处于发送挂起状态( TMEx 复位)时,所有发送寄存器均为写保护状态

该寄存器各位描述如图:

  • 位 0 TXRQ: 发送邮箱请求 (Transmit mailbox request)
    由软件置 1,用于请求发送相应邮箱的内容
    邮箱变为空后,此位由硬件清零

  • 位 1 RTR: 远程发送请求 (Remote transmission request)
    0:数据帧
    1:遥控帧

  • 位 2 IDE: 标识符扩展 (Identifier extension)
    此位用于定义邮箱中消息的标识符类型。
    0:标准标识符。
    1:扩展标识符。

  • 位 20:3 EXID[17:0]:扩展标识符 (Extended identifier)
    扩展标识符的 LSB

  • 位 31:21 STID[10:0]/EXID[28:18]: 标准标识符或扩展标识符 (Standard identifier or extended identifier)
    标准标识符或扩展标识符的最高加权位MSB(取决于 IDE 位的值)


4. 发送邮箱数据长度和时间戳寄存器

发送邮箱数据长度和时间戳寄存器 CAN_TDTxR(x = 0~2)

该寄存器目前仅用来设置数据长度,即最低 4 个位

当邮箱未处于空状态时,该寄存器的所有位均为写保护状态

该寄存器各位描述如图:

  • 位 3:0 DLC[3:0]: 数据长度代码 (Data length code)
    该字段定义数据帧或遥控帧请求中的数据字节数
    一条消息可以包含 0 到 8 个数据字节,具体取决于 DLC 字段的值

  • 位 7:4 保留
    必须保持复位值

  • 位 8 TGT: 发送全局时间 (Transmit global time)
    只有硬件处于时间触发通信模式( CAN_MCR 寄存器的 TTCM 位置 1)时,此位才会激活
    0:不发送时间戳 TIME[15:0]
    1:在 8 字节消息的最后两个数据字节中发送时间戳 TIME[15:0] 的值
    数据字节 7 对应TIME[7:0],数据字节 6 对应 TIME[15:8]
    该值将替换 CAN_TDHxR[31:16] 寄存器( DATA6[7:0] 和 DATA7[7:0])中写入的数据
    DLC 必须编程为 8,才能通过 CAN 总线发送这两个字节

  • 位 15:9 保留
    必须保持复位值

  • 位 31:16 TIME[15:0]: 消息时间戳 (Message time stamp)
    此字段包含在进行 SOF 发送时所捕获的 16 位定时器值


5. 发送邮箱低字节数据寄存器

发送邮箱低字节数据寄存器 CAN_TDLxR(x = 0~2)

当邮箱未处于空状态时,该寄存器的所有位均为写保护状态

该寄存器各位描述如图:

  • 位 7:0 DATA0[7:0]: 数据字节 0 (Data byte 0)
    消息的数据字节 0
    一条消息可以包含 0 到 8 个数据字节,从字节 0 开始
  • 位 15:8 DATA1[7:0]: 数据字节 1 (Data byte 1)
    消息的数据字节 1
  • 位 23:16 DATA2[7:0]: 数据字节 2 (Data byte 2)
    消息的数据字节 2
  • 位 31:24 DATA3[7:0]: 数据字节 3 (Data byte 3)
    消息的数据字节 3

该寄存器用来存储将要发送的数据,这里只能存储低 4 个字节
另外还有一个寄存器CAN_TDHxR,该寄存器用来存储高 4 个字节
这样总共就可以存储 8 个字节
CAN_TDHxR的各位描述同 CAN_TDLxR 类似


6. 接收 FIFO 邮箱标识符寄存器

接收 FIFO 邮箱标识符寄存器 CAN_RIxR (x = 0/1)

该寄存器用于保存接收到的报文标识符等信息,可以通过读该寄存器获取相关信息

该寄存器各位描述同 CAN_TIxR 寄存器几乎一模一样
只是最低位不是发送邮箱请求 TXRQ,而是保留位

该寄存器各位描述如图:

同样的, CAN 接收 FIFO 邮箱数据长度和时间戳寄存器CAN_RDTxR、 接收 FIFO邮 箱 节 数 据 寄 存 器CAN_RDLxRCAN_RDHxR分别和发送邮箱的: CAN_TDTxRCAN_TDLxR 以及 CAN_TDHxR 类似


7. 过滤器模式寄存器

过滤器模式寄存器 CAN_FM1R

该寄存器各位描述如图

  • 位 27:0 FBMx: 筛选器模式 (Filter mode)
    筛选器 x 的寄存器的模式
    0:筛选器存储区 x 的两个 32 位寄存器处于标识符屏蔽模式
    1:筛选器存储区 x 的两个 32 位寄存器处于标识符列表模式

不过必须在过滤器处于初始化模式下( 过滤器主寄存器 CAN_FMRFINIT 位=1),才可以进行设置


8. 过滤器位宽寄存器

过滤器位宽寄存器 CAN_FS1R

该寄存器各位描述如图:

  • 位 27:0 FSCx: 筛选器尺度配置 (Filter scale configuration)
    这些位定义了筛选器 13-0 的尺度配置。
    0:双 16 位尺度配置
    1:单 32 位尺度配置

该寄存器也只能在过滤器处于初始化模式下进行设置


9. 过滤器 FIFO 关联寄存器

过滤器 FIFO 关联寄存器 CAN_FFA1R

该寄存器各位描述如图:

  • 位 27:0 FFAx: 筛选器 x 的筛选器 FIFO 分配 (Filter FIFO assignment for filter x)
    通过此筛选器的消息将存储在指定的 FIFO 中
    0:筛选器分配到 FIFO 0
    1:筛选器分配到 FIFO 1

该寄存器也只能在过滤器处于初始化模式下进行设置


10. 过滤器激活寄存器

过滤器激活寄存器 CAN_FA1R

该寄存器各位描述如图:

  • 位 27:0 FACTx: 筛选器激活 (Filter active)
    软件将此位置 1 可激活筛选器 x
    0:筛选器 x 未激活
    1:筛选器 x 激活

要修改筛选器 x 的寄存器 (CAN_FxR[0:7]),必须将 FACTx位清零或将 CAN_FMR 寄存器的 FINIT 位置 1


11. 过滤器组 i 的寄存器 x

过滤器组 i 的寄存器 x CAN_FiRx( i = 0~27; x = 1/2)

该寄存器各位描述如图:

  • 位 31:0 FB[31:0]:筛选器位 (Filter bits)
    标识符
    寄存器的每一位用于指定预期标识符相应位的级别
    0:需要显性位
    1:需要隐性位
    掩码
    寄存器的每一位用于指定相关标识符寄存器的位是否必须与预期标识符的相应位匹配
    0:无关,不使用此位进行比较。
    1:必须匹配,传入标识符的此位必须与筛选器相应标识符寄存器中指定的级别相同

每个滤波器组的 CAN_FiRx 都由 2 个 32 位寄存器构成,即: CAN_FiR1CAN_FiR2
根据过滤器位宽和模式的不同设置, 这两个寄存器的功能也不尽相同
具体功能在CAN笔记(13) STM32-M4 bxCAN 中已说明


参考:
《STM32 CAN控制器原理与配置-M4》


相关推荐:
CAN笔记(13) STM32-M4 bxCAN
CAN笔记(12) 同步
CAN笔记(11) 位时序
CAN笔记(10) 错误种类和输出
CAN笔记(9) 位填充


谢谢!

CAN笔记(14) STM32-M4 寄存器相关推荐

  1. 笔记:STM32中寄存器地址与指针的转换

    1.STM32中的存储器映射地址(查STM32F429数据手册) /*片上外设基地址*/ #define PERIPH_BASE ((unsigned int)0x40000000)/*AHB1总线基 ...

  2. stm32学习笔记-1 STM32简介

    1 STM32简介 [toc] 注:笔记主要参考B站 江科大自化协 教学视频"STM32入门教程-2023持续更新中". 注:工程及代码文件放在了本人的Github仓库. 1.1 ...

  3. STM32——影子寄存器

    STM32--影子寄存器 定时器里面的常客了.一直也困恼我比较久了,其实作为大创项目的话倒是没有必要了解这么透彻,其实我也还不是那么清楚.但是一些基本点还是可以说说吧. 首先我们来百度一下影子寄存器 ...

  4. node.js学习笔记14—微型社交网站

    node.js学习笔记14-微型社交网站 1.功能分析 微博是以用户为中心,因此需要有注册和登录功能. 微博最核心的功能是信息的发表,这个功能包括许多方面,包括:数据库访问,前端显示等. 一个完整的微 ...

  5. STM32串口寄存器操作(转)

    源:STM32串口寄存器操作 //USART.C/*************************************************************************** ...

  6. Linux学习笔记14

    Linux学习笔记14 Linux学习笔记14 DNS服务搭建 基本介绍 使用bind搭建dns服务 增加一个域名zone 配置DNS转发 配置主从 测试主从同步 后续课程 DNS服务搭建 基本介绍 ...

  7. 【转】 C#学习笔记14——Trace、Debug和TraceSource的使用以及日志设计

    [转] C#学习笔记14--Trace.Debug和TraceSource的使用以及日志设计 Trace.Debug和TraceSource的使用以及日志设计   .NET Framework 命名空 ...

  8. 台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction

    台大李宏毅Machine Learning 2017Fall学习笔记 (14)Unsupervised Learning:Linear Dimension Reduction 本博客整理自: http ...

  9. 笔记14 灯光、预设体、3d物体的事件、碰撞体、刚体、炸箱子、触发器、物理材质、射线

    笔记14 灯光.预设体.3d物体的事件.碰撞体.刚体.炸箱子.触发器.物理材质.射线 灯光 基本项 烘焙 灯光的种类 Lighting窗口 预设体 了解预设体 利用代码操作预设体 实例化预设体Inst ...

最新文章

  1. Science:人类在实验室创建了微型“大脑”,含祖先基因的那种
  2. VMware Resource Pool Recommendations
  3. 论文阅读笔记03-fast-rcnn
  4. 牛客 - Strange Bulbs(bitset优化拓扑)
  5. linux监测指定进程的CPU及物理内存消耗情况(c程序)
  6. .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 )...
  7. mysql 和区块链的差别_论区块链是什么数据库——正名篇
  8. ubuntu 更新python2.7 ssl 错误解决
  9. easyui datagrid 让某行复选框置灰不能选
  10. PowerShell设置命令别名Alias
  11. 【DevOps】做个愉快的DevOps之XenServer自动化管理(1)
  12. 关于IE6,7下面的一些兼容性问题
  13. Atitit 发帖机系列(6) USRQBN2201 setup spec安装程序的实现规范与标准化解决方案
  14. 【SAS NOTES】数据输出-proc export
  15. TIS-prescan
  16. win10图片打开方式里没有默认照片查看器的解决方法
  17. 时间格式 yyyy-MM-dd'T'HH:mm:ss.SSSZ 中的T和Z表示什么
  18. 详解Python曲线拟合
  19. php微信公众号消息推送
  20. 【数学分析入门】R语言独立性检验方法

热门文章

  1. FG60B SSL ××× V3.0配置
  2. Spring Data JPA简单学习
  3. C++根据系统时间生成不重复的随机数
  4. jq执行2次同样的方法怎么让第一次执行的不触发_你不知道的CMS GC
  5. IT兄弟连 JavaWeb教程 使用Servlet实现在页面中显示随机数
  6. 客户服务支持管理软件—工单管理
  7. python 迭代器相关知识
  8. GCC同时使用静态库和动态库链接
  9. 用vue实现简单实时汇率计算功能
  10. Elasticsearch —— bulk批量导入数据