stm32开发板CAN模块学习

stm32精英板模块介绍

stm32精英板有一个can控制器。其控制框图如下所示:
![[Pasted image 20201215101717.png|500]]
图中是双控制器,实际精英板就一个主控制器。

过滤器组

精英板有14个过滤器组,每个过滤器组由2个32位寄存器组成,CAN_FxR1和CAN_FxR2。每个过滤器组提供:
![[Pasted image 20201215102246.png|500]]
过滤器可配置为:屏蔽位模式和标识符模式。为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。

  1. 标识符屏蔽模式
    标识符寄存器和屏蔽位寄存器一起,指定报文的任何一位,按照”必须匹配“和“不用关系”处理。
  2. 标识符列表模式
    屏蔽位寄存器当作标识符寄存器使用,接收报文每一位都必须和标识符寄存器相同。
    使用示例:
    ![[Pasted image 20201215103426.png|400]] ^e86344

CAN收发流程

邮箱发送流程如下:
![[Pasted image 20201215103637.png|500]]
这里涉及到的寄存器:

  • CAN_TIxR:
    流程:TXRQ位置‘1’,请求发送并挂号等待,此时软件无法写位。寄存器图:
    ![[Pasted image 20201215111736.png|400]]
  • CAN_TSR
    流程:RQCP和TXOK位置‘1’,表示一次成功发送。若发送失败,有两种情况。若仲裁失败,ALST位置‘1’;若发送错误,TERR位置‘1’。寄存器位示意图:
    ![[Pasted image 20201215111655.png|400]]

邮箱接收流程如下:
![[Pasted image 20201215112016.png|500]]

CAN接收到的有效报文存储于3级FIFO中,完全由硬件管理,软件只需要读取寄存器中的信息。
涉及的寄存器:

  • CAN_FFA1R
    ![[Pasted image 20201215112540.png|400]]
    FFAx : 过滤器位宽设置 (Filter FIFO assignment for filter x) 位13:0 报文在通过了某过滤器的过滤后,将被存放到其关联的FIFO中。
    0:过滤器被关联到FIFO0;
    1:过滤器被关联到FIFO1。
  • CAN_RFxR
    ![[Pasted image 20201215112840.png|400]]
    ![[Pasted image 20201215113024.png|400]]

通过读取FMP的值来判断FIFO中是否存在报文。

波特率计算

STM32 的 CAN 一个位只有 3 段:同步段(SYNC_SEG)、时间段 1(BS1)和时间段2(BS2)。BS1为传播时间段和相位缓冲段1之和。STM32位时序的计算如下:
![[Pasted image 20201215113630.png|500]]

示例:。比如设置 TS1=6、TS2=7 和 BRP=4,在 APB1 频率为 36Mhz 的条件下,即可得到 CAN 通信的波特率=36000/[(7+8+1)*5]=450Kbps。

其他一些重要的寄存器

  • CAN_MCR主控制寄存器
    在这里插入图片描述
    INRQ位:控制CAN初始化,对该位清0,使CAN从初始化进入正常模式。置‘1’则进入初始化模式。

  • CAN_MSR主状态寄存器
    在这里插入图片描述
    INAK位:CAN 达到同步后,并为接收和发送数据作好准备了。为此,硬件相应地对 CAN_MSR 寄存器的 INAK 位清’0’。初始化时,CAN_MSR寄存器的INAK置‘1’。

  • CAN_BTR位时序寄存器
    在这里插入图片描述
    该寄存器用于设置分频、Tbs1、Tbs2
    以及 Tsjw 等参数决定 CAN 的波特率。

  • CAN_TDTxR 发送邮箱数据长度和时间戳寄存器
    在这里插入图片描述

  • CAN_TDLxR发送邮箱低字节数据寄存器
    ![[Pasted image 20201215120102.png|400]]
    该寄存器用来存储将要发送的数据,这里只能存储低 4 个字节,另外还有一个寄存器CAN_TDHxR,该寄存器用来存储高 4 个字节。

  • CAN_FM1R过滤器模式寄存器
    ![[Pasted image 20201215120329.png|400]]

对 STM32F103ZET6 来说,只有[13:0]这 14 个位有效。

  • CAN_FS1R 过滤器位宽寄存器
    ![[Pasted image 20201215120435.png|400]]

对 STM32F103ZET6 来说,同样只有[13:0]这 14 个位有效。

  • CAN_FiRx过滤器组 i 的寄存器 x
    ![[Pasted image 20201215120548.png|400]]

具体参照上面的过滤器使用说明

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值