CAN笔记(14) STM32 |
您所在的位置:网站首页 › pubmed过滤器忽略4000个字节 › CAN笔记(14) STM32 |
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 环回模式如图: 在环回模式下, 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) 当邮箱未处于空状态时,该寄存器的所有位均为写保护状态 该寄存器各位描述如图: 该寄存器用来存储将要发送的数据,这里只能存储低 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_RDLxR和 CAN_RDHxR分别和发送邮箱的: CAN_TDTxR、 CAN_TDLxR 以及 CAN_TDHxR 类似 7. 过滤器模式寄存器过滤器模式寄存器 CAN_FM1R 该寄存器各位描述如图 不过必须在过滤器处于初始化模式下( 过滤器主寄存器 CAN_FMR 的 FINIT 位=1),才可以进行设置 8. 过滤器位宽寄存器过滤器位宽寄存器 CAN_FS1R 该寄存器各位描述如图: 该寄存器也只能在过滤器处于初始化模式下进行设置 9. 过滤器 FIFO 关联寄存器过滤器 FIFO 关联寄存器 CAN_FFA1R 该寄存器各位描述如图: 该寄存器也只能在过滤器处于初始化模式下进行设置 10. 过滤器激活寄存器过滤器激活寄存器 CAN_FA1R 该寄存器各位描述如图: 要修改筛选器 x 的寄存器 (CAN_FxR[0:7]),必须将 FACTx位清零或将 CAN_FMR 寄存器的 FINIT 位置 1 11. 过滤器组 i 的寄存器 x过滤器组 i 的寄存器 x CAN_FiRx( i = 0~27; x = 1/2) 该寄存器各位描述如图: 每个滤波器组的 CAN_FiRx 都由 2 个 32 位寄存器构成,即: CAN_FiR1 和 CAN_FiR2 根据过滤器位宽和模式的不同设置, 这两个寄存器的功能也不尽相同 具体功能在CAN笔记(13) STM32-M4 bxCAN 中已说明 参考: 《STM32 CAN控制器原理与配置-M4》 相关推荐: CAN笔记(13) STM32-M4 bxCAN CAN笔记(12) 同步 CAN笔记(11) 位时序 CAN笔记(10) 错误种类和输出 CAN笔记(9) 位填充 谢谢! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |