stm32-can简介

推荐阅读:【stm32f407】CAN总线_Wireless_Link的博客-CSDN博客

1. CAN寄存器

1.1 can波特率寄存器

 根据图中信息,tPCLK = 1/APB1_CLK;所以can波特率的计算公式如下:
CAN_Baudrate = 1/(tq + tBS1 + tBS2) = 1/(tq*(1 + CAN_BS1 + CAN_BS2))
CAN_Baudrate = APB1_CLK / CAN_Prescaler / (1 + CAN_BS1 + CAN_BS2)

参考:STM32中CAN波特率的计算_Nan_Key的博客-CSDN博客_stm32can波特率计算
CAN_BS1和CAN_BS2是设置CiA(采样点)的,而CiA是影响can通信稳定性的。
CiA计算方式:(1+CAN_BS1)/(1+CAN_BS1+CAN_BS2)

CiA推荐值表
CiA波特率
75%>800K
80%>500K
87.5%<=500K

1.2 can过滤器

1.2.1 接收过滤器

  • 互联型产品中有28个位宽可变/可配置的标示符过滤器组;其它f103系列中有14个位宽可变/可配置的标示符过滤器组;
  • 每个过滤器组x由2个32位寄存器, CAN_FxR0和CAN_FxR1组成
  • 可变的位宽
    每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:
    • 1个32位过滤器,包括: STDID[10:0]、 EXTID[17:0]、 IDE和RTR位
    • 2个16位过滤器,包括: STDID[10:0]、 IDE、 RTR和EXTID[17:15]位
  • 此外,过滤器可配置为屏蔽位模式或标志符列表模式
    • 在屏蔽位模式下,由标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。
      例如:屏蔽位寄存器位为0,表示对应标志符寄存器的位不用关心;屏蔽位寄存器为1,表示标志位寄存器的位一定要为1;
    • 在标识符列表模式下,每个Bank可以是过滤2个(29b)或4个ID(14b), 使用的时候可以分别填写不同的值。
      不过需要注意的是, 如果仅需要过滤1个ID(29b)的时候或者仅需要过滤1-3个ID(14b)的时候,应该使用这个ID将该Bank 的其他寄存器填满。

  • 注意
    对于标识符列表模式下的过滤器(非屏蔽方式的过滤器),软件不需要直接跟标识符进行比较。
    对于屏蔽位模式下的过滤器,软件只须对需要的那些屏蔽位(必须匹配的位)进行比较即可。

1.2.2 标示符过滤

1.2.3 过滤器寄存器CAN_FMR

2. can工作模式

2.1 初始化模式

  • 软件对can初始化需要处于初始化模式。CAN_MCR的INRQ位置1请求进入初始化模式,然后等待CAN_MSR的INAK置1就进入了初始化模式。退出则是对CAN_MCR的INRQ位置0。
  • 软件对can的初始化至少包括时间特性(CAN_BTR)和控制(CAN_MCR)两个及寄储器;
  • can的过滤器组(模式、位宽、FIFO关联、激活和过滤器值);对过滤器值可以在非初始化模式下设置,但模式、位宽则必须在初始化模式设置。

2.2 正常模式

  • 正常模式下才能发送和接收报文。软件对CAN_MCR的INRQ位清0请求进入正常模式,然后等待CAN_MSR的INAK置1就进入正常模式。

2.3 睡眠模式

  • 在睡眠模式下,can的时钟停止了,但软件可以访问邮箱寄存器。

3. can测试模式

  • 对CAN_BTR的SILM或LBKM置1,来选择一种测试模式,只能在初始化模式下修改这两位。
  • 选择一种测试模式后通过对CAM_MCR的INRQ清0,来进入测试模式。

3.1 静默模式

  • 对CAN_BTR的SILM置1来设置静默模式。可以接收数据帧和远程帧,但只能发出隐性位,不能发送报文。该模式通常用于分析CAN总线的活动。

3.2 环回模式

  • 对CAN_BTR的LBKM置1来设置环回模式,改模式下can自发自收,当然过滤器也要设置成可接收自己。

3.3 环回静默模式

  • 对CAN_BTR的SILM和LBKM同时置1,该模式用于“热自测试”;

4. MCU处于调试模式时can功能正常运行或处于停止状态

调试模式的can状态依赖于can寄存器CAN_MCR的DBF位和调试配置寄存器DBGMCU_CR中的 DBG_CAN1_STOP 和DBG_CAN2_STOP位。

5. 功能描述

5.1 can发送处理

  • 3个发送邮箱,即最多只能缓存3条待发送数据;当邮箱有数据待发送,就不能再对邮箱操作;
  • 发送成功时,CAN_TSR的RQCP和TXOK置1;
  • 发送失败时,由仲裁引起的就对CAN_TSR的ALST置1;由于发送错误引起的就对TERR置1;

5.2 can接收管理

  • 接收到的报文,先缓存在3级邮箱缓存的FIFO中;所谓3级,其实就是可以缓存3条有效的报文;
  • can总共有28个过滤单元,每个过滤单元只能关联一个FIFO;

    即如果只使用一个过滤单元,则只能使用一个FIFO,最多只能缓冲3条数据帧;

  • 溢出,当接收缓存FIFO中已经有3条报文时,再来一条报文就会溢出;
  • 溢出后的处理方式有两种,1是丢弃新收到的报文,2是丢弃最后收到的一条旧报文插入一条新报文;可配置(CAN_MCR的RFLM位)。

5.3 出错管理

  • 离线恢复
    当TEC大于255时, bxCAN就进入离线状态,同时CAN_ESR寄存器的BOFF位被置’1’。在离线状态下, bxCAN无法接收和发送报文。
    如果ABOM位为’1’, bxCAN进入离线状态后,就自动开启恢复过程。
    如果ABOM位为’0’,软件必须先请求bxCAN进入然后再退出初始化模式,随后恢复过程才被开启。

6. can1和can2区别

  • can1是主,can2是从; 

  • 由图中信息可知,can1作为主can管理着从can(can2)和sram的通信;can2不能单独访问sram

如果单独使用can2需要注意两点:

  • 打开can1时钟,原因看上图;
  • can2只能使用14~27过滤器;但普通单片机只有can1且只有0~13号过滤器,互联型才有can2和14~27号过滤器;

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值