推荐阅读:【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号过滤器;

stm32-can简介相关推荐

  1. STM32 IO 简介

    STM32 IO 简介 1.IO介绍 2.仿真与下载 1.IO介绍 STM32 的 IO 口可以由软件配置成如下 8 种模式: 1. 输入浮空 2. 输入上拉 3. 输入下拉 4. 模拟输入 5. 开 ...

  2. 单片机搭建环境烧录方法_万物互联-stm32单片机简介、烧录、编程及其项目环境搭建...

    万物互联-stm32单片机简介.烧录.编程 前言:stm32单片机这里给出简单介绍,给不了解的朋友普及下硬件端的基本知识,叙述的较为简单,想深入研究的朋友可以去一些官方网站.论坛.博客汲取知识.最下端 ...

  3. 1. stm32 mcu简介

    1. stm32 mcu简介 1.1 stm32 mcu结构 1.2 STM32 MCU存储器映像 1.3 STM32 MCU系统时钟树 1.4 Cortex-M3简介 1.1 stm32 mcu结构 ...

  4. STM32——TIM简介与TIM中断

    文章目录 一.TIM简介 二.定时器类型 基本定时器 通用定时器 高级定时器 三.定时中断基本结构 四.时序图 预分频器时序 计数器时序 计数器无预装时序 计数器有预装时序 RCC时钟树 五.定时器定 ...

  5. STM32 - USART简介

    摘要:本章主要介绍STM32 的USART, 及其功能框图 1. USART简介 USART ((Universal Synchronous Asynchronous Receiver and Tra ...

  6. STM32——SDIO简介

    一.什么是SDIO接口? SDIO,全称:Secure Digital Input and Output,即安全数字输入输出接口.它是在SD卡接口的基础上发展而来,它可以兼容之前的SD卡,并且可以连接 ...

  7. STM32——I2S简介硬件连接

    一.I2S简介 1.什么是I2S? I2S(也叫IIS,即:Inter IC Sound)总线,又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而定制的一种总线标准,该线专负责于 ...

  8. STM32——GPIO简介

    1.GPIO即通用输入输出口,可配置为8种输入输出模式 2.引脚电平:0V-3.3V,部分引脚可容忍5V 3.输出模式下可控制端口输出高低电平,用以驱动LED,控制蜂鸣器,模拟通信协议输出时序等 4. ...

  9. STM32 FSMC简介(二)

    以下内容整理自<STM32中文参考手册>.正点原子<STM32F1开发指南--库函数版>.野火<零死角玩转STM32F103霸道V2>,仅为个人学习方便所整理 4. ...

  10. STM32 I2S简介和实验硬件连接

    I2S(也叫IIS,即:Inter IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于 ...

最新文章

  1. Laravel - Auth验证流程以及guard守卫和自定义驱动driver驱动,使用web-token验证
  2. 2018年第九届蓝桥杯 - 省赛 - C/C++大学B组 - F.递增三元组
  3. Jon Wexler and adidas NMD R1 Primeknit Zebra Pack
  4. 程序员没有女朋友的原因,我终于找到了!
  5. rpc 服务器不可用_RPC和微服务
  6. oracle decode和case when,竟然where 后可以跟着decode 那也就是 where后可以跟着case when ????...
  7. 组态王的日历时间控件脚本
  8. 【干货分享】用AI工具设计一款吸引人的字体效果
  9. 社会力模型SFM详解 在人群异常检测上的应用
  10. 文件输出流,文件拷贝,资源释放
  11. 带你从Vue入门到进阶
  12. 云虚拟主机、云服务器、VPS三者有什么区别?
  13. ArcMap基础操作——去除影像背景值
  14. 大数据告诉你:学历真的能改变命运
  15. 千万不要死于无知—几条健康忠告(三)
  16. 德信计算机怎么开音乐,计算机模式识德信别 文献阅读.ppt
  17. C++对C语言的扩展_引用
  18. mapgis10-10.26、27
  19. 浙江省职业技能考试大纲计算机,最新修订浙江省高校招生职业技能考试大纲-计算机类...
  20. gromacs中一些有用的分析命令

热门文章

  1. 一、Nginx是什么?
  2. nginx-工作原理及配置文件详解<一>
  3. linux命令-cat、zcat
  4. Cesium从入门到放弃10:gif图片投影
  5. 【C语言】单向链表排序、合并、逆序、分离(链表的头节点不储存数据)
  6. matlab normc函数,matlab normc函数
  7. “雷军董明珠新赌约”没啥,起底币圈10大赌约,巴菲特也中枪
  8. 外行对程序员的误解到底有多深?来看你有没有中招
  9. 苹果手机能低价买?46人被骗1.5亿元
  10. 安卓、IOS开发常用免费接口