STM32入门学习笔记之CAN通信实验2

电子说

1.3w人已加入

描述

18.2 相关寄存器

18.2.1 CAN主控制器:CAN_MCR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- DBF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RESET - TTCM ABOM AWUM NART RFLM TXFP SLEEP INRQ

Bit 16:DBF:调试冻结

0:在调试时,CAN照常工作

1:在调试时,冻结CAN的接收/发送。仍然可以正常地读写和控制接收FIFO

Bit 15:bxCAN软件复位

0:本外设正常工作

1:对bxCAN进行强行复位,复位后bxCAN进入睡眠模式。此后硬件自动对该位清0

Bit 7:时间触发通信模式

0:禁止时间触发通信模式

1:允许时间触发通信模式

Bit 6:自动离线管理

0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,则退出离线状态

1:一旦硬件检测到128次11位连续的隐性位,则自动退出离线状态

Bit 5:自动唤醒模式

0:睡眠模式通过清除CAN_MCR寄存器的SLEEP位,由软件唤醒

1:睡眠模式通过检测CAN报文,由硬件自动唤醒。唤醒的同时,硬件自动对SLEEP和SLAK位清0

Bit 4:禁止报文自动重传

0:按照CAN标准,CAN硬件在发送报文失败时会一直自动重传直到发送成功

1:CAN报文只被发送1次,不管发送的结果如何

Bit 3:接收FIFO锁定模式

0:在接收溢出时FIFO未被锁定,当接收FIFO的报文未被读出,下一个收到的报文会覆盖原有的报文

1:在接收溢出时FIFO被锁定,当接收FIFO的报文未被读出,下一个收到的报文会被丢弃

Bit 2:发送FIFO优先级

0:优先级由报文的标识符来决定

1:优先级由发送请求的顺序来决定

Bit 1:睡眠模式请求(在复位后该位被置1)

1:可以请求CAN进入睡眠模式,一旦当前的CAN活动结束,CAN就进入睡眠

0:使CAN退出睡眠模式

Bit 0:初始化请求

0:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对INAK位清0

1:一旦当前的CAN活动结束,CAN就进入初始化模式。相应地,硬件对INAK位置1

18.2.2 CAN主状态寄存器:CAN_MSR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- RX SAMP RXM TXM - SLAKI WKUI ERRI SLAK INAK

Bit 11:CAN接收电平,该位反映CAN接收引脚的实际电平

Bit 10:上次采样值,CAN接收引脚的上次采样值(对应于当前接收位的值)

Bit 9:接收模式,该位为1表示CAN当前为接收器

Bit 8:发送模式,该位为1表示CAN当前为发送器

Bit 4:睡眠确认中断,当SLKIE=1,一旦CAN进入睡眠模式硬件就对该位置1,紧接着相应的中断被触发软件可对该位清0,当SLAK位被清0时硬件也对该位清0

Bit 3:唤醒中断挂号,当CAN处于睡眠状态,一旦检测到帧起始位,硬件就置该位为1

Bit 2:出错中断挂号,当检测到错误时,CAN_ESR寄存器的某位被置1,如果CAN_IER寄存器的相应中断使能位也被置1时,则硬件对该位置1

Bit 1:睡眠模式确认

0:CAN退出睡眠模式

1:CAN模块正处于睡眠模式

Bit 0:初始化确认

0:CAN退出初始化模式时

1:CAN模块正处于初始化模式

18.2.3 CAN位时序寄存器:CAN_BTR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
SILM LBKM - SJW[1:0] - TS2[2:0] TS1[3:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- BRP[9:0]

Bit 31:静默模式(用于调试)

0:正常状态

1:静默模式

Bit 30:环回模式(用于调试)

0:禁止环回模式

1:允许环回模式

Bit 25~Bit 24:重新同步跳跃宽度,该位域定义了CAN硬件在每位中可以延长或缩短多少个时间单元的上限,t RJW =t CAN ×(SJW[1:0]+1)

Bit 22~Bit 20:时间段2,该位域定义了时间段2占用了多少个时间单元,t BS2 =t CAN ×(TS2[2:0]+1)

Bit 19~Bit 16:时间段1,该位域定义了时间段1占用了多少个时间单元,t BS1 =t CAN ×(TS1[3:0]+1)

Bit 9Bit 0:波特率分频器,该位域定义了时间单元tq的时间长度,t q =(BRP[9:0]+1)×tPCLK~

18.2.4 CAN发送状态寄存器:CAN_TSR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
LOW2 LOW1 LOW0 TME2 TME1 TME0 CODE[1:0] ABRQ2 - TERR2 ALST2 TXOK2 RQCP2
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ABRQ1 - TERR1 ALST1 TXOK1 RQCP1 ABRQ0 - TERR0 ALST0 TXOK0 RQCP0

Bit 31,Bit30,Bit 29:邮箱x最低优先级标志

当多个邮箱在等待发送报文,且邮箱x的优先级最低时,硬件对该位置1

Bit 28,Bit 27,Bit 26:发送邮箱x空

Bit 25~Bit 24:邮箱号

当有至少1个发送邮箱为空时,表示下一个空的发送邮箱号。

当所有的发送邮箱都为空时,表示优先级最低的那个发送邮箱号

Bit 23,Bit 15,Bit 7:邮箱x终止发送

Bit 19,Bit 11,Bit 3:邮箱x发送失败

Bit 18,Bit 10,Bit 2:邮箱x仲裁丢失

Bit 17,Bit 9,Bit 1:邮箱x发送成功

Bit 16,Bit 8,Bit 0:邮箱x请求完成

18.2.5 CAN接收FIFOx寄存器:CAN_RFxR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- ROFM FOVR FULL - FMP[1:0]

Bit 5:释放接收FIFO,输出邮箱软件通过对该位置1来释放接收FIFO的输出邮箱。如果接收FIFO为空,那么对该位置1没有任何效果,即只有当FIFO中有报文时对该位置1才有意义。如果FIFO中有2个以上的报文,由于FIFO的特点,软件需要释放输出邮箱才能访问第2个报文,当输出邮箱被释放时,硬件对该位清0

Bit 4:FIFO溢出,当FIFO0已满,又收到新的报文且报文符合过滤条件,硬件对该位置1,该位由软件清0

Bit 3:FIFO满,当FIFO0中有3个报文时,硬件对该位置1,该位由软件清0

Bit 1~Bit 0:FIFO报文数目,表示当前接收FIFO0中存放的报文数目

每当1个新的报文被存入接收FIFO0,硬件就对FMP0加1

每当软件对RFOM位写1来释放输出邮箱,FMP就被减1,直到其为0

18.2.6 CAN过滤器主控寄存器:CAN_FMR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- FINIT

Bit 0:过滤器初始化模式

0:过滤器组工作在正常模式

1:过滤器组工作在初始化模式

18.2.7 CAN过滤器模式寄存器:CAN_FM1R

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- FBM[27:16]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FBM[15:0]

Bit 29~Bit 0:过滤器模式

0:过滤器组x的2个32位寄存器工作在标识符屏蔽位模式

1:过滤器组x的2个32位寄存器工作在标识符列表模式

18.2.8 CAN过滤器位宽寄存器:CAN_FS1R

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- FSC[27:16]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FSC[15:0]

Bit 29~Bit 0:过滤器位宽设置

0:过滤器位宽为2个16位

1:过滤器位宽为单个32位

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分