STM32的CAN总线使用指南_第1页
STM32的CAN总线使用指南_第2页
STM32的CAN总线使用指南_第3页
STM32的CAN总线使用指南_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CAN基本知识:CAN协议的特点:1、多主机控制。在总线空闲时,所有单元都可以发送消息,若两个以上同时开始发送消息,根据标识符来决定优先级。优先级高的先发送。2、系统的若软性。与总线相连的单元没有类似地址的信息。因此在总线上增加单元时,应用层程序基本不需要改变。3、通信速度快,通信距离远。最高1Mbps(距离小于40M),最远可达10Km(速率低于5Kbps)。4、具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误,检测出错误的单元会立即同时通知其他所有单元,正在发送消息的单元一旦检测出错误,会强制结束当前的发送。前置结束发送的单元会不断反复地重新发送该消息直到发送成功。5、故障封闭

2、功能。CAN可以判断出错误的类型是总线上的数据错误还是持续的数据错误。由此功能,当总线上发生持续数据错误时,可以将引起此故障的单元从总线上隔离出去。6、连接节点多。CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。单实际上受到时间延迟和电气负载的限制。降低通信速度,可连接单元增加。反之,反之。STM32的CAN时间特性(有关波特率):与CAN2.0B的协议内容相比,STM32的CAN时间特性稍微有些区别。STM32把传播时间段和相位缓冲段1合并了,因此STM32的CAN一个位只有3段:同步段(SYNC_SEG)、时间段1(BS1)和时间段2(BS2)。STM的BS1段可

3、以设置为1-16个时间单元,刚好等于传播时间段和相位缓冲段1之和。波特率=1/正常的位时间正常的位时间=1Xtq+tbs1+tbs2其中:tbps1=tqX(TS13:0+1)tbps2=tqX(TS23:0+1)tq=(BRP9:0+1)Xtpclktq是一个时间单元tpclk是APB时钟的时间周期因此,我们只需要知道BS1和BS2的设置,以及APB1的时钟频率(一般为36MHz),就可以方便的计算出波特率。比如设置TS1=6,TS2=7和BRP=4,在APB1频率为36MHz的条件下,即可得到CAN通信的波特率=36000/(7+8+1)*5=450Kbps。要用到的寄存器:主控制寄存器C

4、AN_MCR:控制进退初始化,发送FIFO优先级。时序寄存器CAN_BTR:用来设置分频、Tbps、Tbs2以及Tsjw等非常重要的参数,直接决定了CAN的波特率。另外还可以设置工作模式(静默模式、环回模式)等。发送邮箱标识符寄存器CAN_TIxR:该寄存器用来设置标识符(包括扩展标识符),另外还可以设置帧类型。发送邮箱数据长度和时间戳寄存器CAN_TDTxR:用来设置数据长度。发送邮箱低字节数据寄存器CAN_TDLxR:用来存储将要发送的数据,只能存储低4个字节。发送邮箱高字节数据寄存器CAN_TDHxR:用来存储将要发送的高4个字节。接收FIFO邮箱标识符寄存器CAN_RIxR:该寄存器用

5、来保存接收到的报文标识符等信息,通过读该寄存器获取相关信息。接收FIFO邮箱数据长度和时间戳寄存器CAN_RDTxR;接收FIFO邮箱低字节数据寄存器CAN_RDLxR;接收FIFO邮箱高字节数据寄存器CAN_RDHxR,同发送。过滤器模式寄存器CAN_FM1R:设置各滤波器组的工作模式,对28个滤波器组的工作模式,都可以通过该寄存器设置,不过该寄存器必须在滤波器处于初始化模式下才可以设置。过滤器位宽寄存器CAN_FS1R:用于设置各滤波器组的位宽。其他同上。上述两个寄存器用来设置过滤器。如FSCx=1,FBMx=0:那么其中第x个寄存器组就被设置为1个32位过滤器-标识符屏蔽,此时本滤波器组

6、可以设置成1个过滤器。(见参考手册P432)如FSCx=1,FBMx=1:那么其中第x个寄存器组就被设置为2个32位过滤器-标识符列表,此时本滤波器组可以设置成2个过滤器。如FSCx=0,FBMx=1:那么其中第x个寄存器组就被设置为2个16位过滤器-标识符屏蔽,此时本滤波器组可以设置成2个过滤器。如FSCx=0,FBMx=0:那么其中第x个寄存器组就被设置为4个16位过滤器-标识符列表,此时本滤波器组可以设置成4个过滤器。28个过滤器组可以被设置为远大于28个过滤器数目。每个FIFO各自对其关联的过滤器进行编号。过滤器组关联设置通过寄存器CAN_FFA1R即过滤器FIFO关联寄存器来设置。过

7、滤器激活寄存器CAN_FA1R:该寄存器来控制过滤器的激活与否。1开启0关闭。过滤器组i的寄存器xCAN_FiRx:用来存放过滤参数。STM32CAN总线初始化步骤:1、配置相关引脚的复用功能,使能CAN时钟。使能CAN时钟,通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,设置为上拉输入(CAN_RX),设置为复用输出(CAN_TX),并使能PA口的时钟。2、设置CAN工作模式及波特率等。先设置CAN_MCR寄存器的INRQ位,让CAN进入初始化模式,然后设置CAN_MCR的其他相关控制位,再通过CAN_BTR设置波特率和工作模式(正常模式/环回模式)等信息。最后设置

8、INRQ为0,退出初始化模式。3、设置滤波器。设置CAN_FMR的FINIT位,让过滤器组工作在初始化模式下,然后设置滤波器组0的工作模式以及标识符ID和屏蔽为。最后激活滤波器。并退出滤波器初始化模式。如果用到中断,还要配置中断模式。具体的:如何初始化CAN:1、使能相关时钟(PORTA时钟,CAN时钟),初始化引脚RX和TX。2、设置CAN_MCR,退出睡眠模式,同时设置参数。基本是所有位清零。关于睡眠模式,CAN在复位后都是进入睡眠模式,当然也可以设置自动唤醒模式等。3、请求CAN进入初始化模式,对CAN_MSR的位0置1。等待进入初始化,检验MCR位0INAK的值,当真正变为1的时候,在

9、进行下一步。因为这个过程可能不是瞬间完成的,如果当前有CAN活动,就会等到本次活动结束后再进入初始化模式,硬件对INAK位置1。4、设置CAN_MCR的各位,位2-位7。设置位时序寄存器CAN_盯R的各位,在这里可以设置静默模式、环回模式、波特率。5、请求CAN退出初始化模式。设置MCR的位0.等待完全退出初始化模式,通过检验MSR的位。6、初始化过滤器(初始化寄存器不是在CAN初始化模式下进行的,而是过滤器组工作到初始化模式)。设置过滤器主控寄存器CAN_FMR的位0,使过滤器组工作在初始化模式。7、设置过滤器激活寄存器CAN_FA1R来禁用相应的过滤器,因为只有对相应位清零或者对CAN_F

10、ME的FINIT位设置位1,才能修改相应的过滤器寄存器CAN_FiRx。8、设置过滤器模式CAN_FM1R(标识符屏蔽模式or标识符列表模式);设置过滤器位宽寄存器CAN_FS1R(1个32位的过滤器or2个16位的过滤器);设置过滤器FIFO关联寄存器CAN_FFA1R(过滤器关联到FIFO0还是FIF01当中)。9、填写过滤器标识和屏蔽。通过设置寄存器CAN_FiR1和CAN_FiR2来设置标识(ID)和屏蔽(MASK)。10、激活过滤器,CAN_FA1R位0设置为1。11、过滤器进入正常工作模式,CAN_FMR位0清零如何发送一个报文:1、判断三个邮箱中哪个为空(CAN_TSR的位26位

11、27位28),哪个为空用哪个?如果没有空邮箱,则退出本次发送过程。2、清除发送邮箱标识符寄存器(因为要填写新的标识符)。3、设置发送邮箱的标识符寄存器CAN_TIxR。4、设置发送邮箱的数据长度和时间戳寄存器CAN_TDTxR。5、填写要发送的数据,即设置发送邮箱高低字节数据寄存器CAN_TDHxR和CAN_TDLxR。6、对标识符寄存器CAN_TIxR的位0即TXRQ位置1,来请求发送邮箱的数据。当数据发送完成后,硬件对其清零。7、查询发送状态,通过查询发送状态寄存器CAN_TSR。基本查询三个状态参数。位0RQCP1邮箱0(不一定是0,看使用的是哪个邮箱了)请求完成;位1TXOK0邮箱0发

12、送成功;位26发送邮箱0位为空,没有等待发送的报文。当这三项都成功后,返回发送成功。如何接收一个报文:1、查询FIFO里面是否存在有效报文,查询接收FIFO0寄存器CAN_RF0R的位1:0当前接收FIFO中存放的报文数目。如果有数据,下一步将数据读出。2、判断标识符类型,接收来的报文是采用标准标识符还是扩展标识符。CAN_RIxR的位2IDE。3、根据不同类型的标识符来做不同的操作。具体可查看CAN_RIxR的位31:3。扩展标识符低字节存在位20:3。扩展标识符或标准标识符存在位31:21。扩展标识符39位,标准标识符11位。4、查询CAN_RIxR的位1来判定是数据帧还是远程帧。5、查询CAN_RDTxR位3:0获取数据帧的数据长度。6、读取接收FIFO邮箱高低字节数据寄存器CAN_RDLxR和CAN_RDHxR。7、释放FIFO邮箱。CAN_RF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论