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

发布者:WhisperingRain最新更新时间:2024-05-10 来源: elecfans关键字:STM32  入门学习 手机看文章 扫描二维码
随时随地手机看文章

18.2 相关寄存器

18.2.1 CAN主控制器:CAN_MCR

31302928272625242322212019181716
-DBF













1514131211109876543210
RESET-TTCMABOMAWUMNARTRFLMTXFPSLEEPINRQ





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

1514131211109876543210
-RXSAMPRXMTXM-SLAKIWKUIERRISLAKINAK




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

31302928272625242322212019181716
SILMLBKM-SJW[1:0]-TS2[2:0]TS1[3:0]








1514131211109876543210
-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

31302928272625242322212019181716
LOW2LOW1LOW0TME2TME1TME0CODE[1:0]ABRQ2-TERR2ALST2TXOK2RQCP2


1514131211109876543210
ABRQ1-TERR1ALST1TXOK1RQCP1ABRQ0-TERR0ALST0TXOK0RQCP0



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

1514131211109876543210
-ROFMFOVRFULL-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

1514131211109876543210
-FINIT













Bit 0:过滤器初始化模式

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

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

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

31302928272625242322212019181716
-FBM[27:16]













1514131211109876543210
FBM[15:0]














Bit 29~Bit 0:过滤器模式

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

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

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

31302928272625242322212019181716
-FSC[27:16]













1514131211109876543210
FSC[15:0]














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

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

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


关键字:STM32  入门学习 引用地址:STM32入门学习笔记之CAN通信实验2

上一篇:STM32入门学习笔记之文件系统FatFs的移植3
下一篇:STM32F103单片机SysTick定时器概述

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved