1、STM32自带了基本扩展CAN外设,又称bxCAN,bxCAN的特点如下:

  • 支持CAN协议2.0A和2.0B主动模式

  • 波特率最高达1Mbps

  • 支持时间触发通信

  • 具有3个发送邮箱

  • 具有3级深度的2个接收FIFO

  • 可变的筛选器组(也称过滤器组,最多28个)

2、STM32 CAN控制器简介-模式

①初始化模式(INRQ=1,SLEEP=0)

②正常模式(INRQ=0,SLEEP=0)

③睡眠模式(SLEEP=1)

测试模式

①静默模式( LBKM=0,SILM=1 )

②环回模式( LBKM=1,SILM=0 )

③环回静默模式(LBKM=1,SILM=1)

调试模式

3、STM32 CAN控制器简介-bxCAN框图

CAN控制器框图如下:

CAN的标识符不表示目的地址而是表示发送优先级。接收节点根据标识符的值,来决定是否接收对应消息。

STM32 CAN控制器,提供了28个可配置的筛选器组(F1仅互联型才有28个,其他的只有14个),可降低CPU处理CAN通信的开销。

STM32 CAN控制器每个筛选器组由2个32位寄存器组成(CAN_FxR1和CAN_FxR2,x=0~27)。根据位宽不同,每个筛选器组可提供:

● 1个32位筛选器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位

● 2个16位筛选器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位

筛选器可配置为:屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。而在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟筛选器标识符相同。

通过CAN_FM1R和CAN_FS1R可配置筛选器的位宽和模式:

  • 为了过滤出一组标识符,应该设置筛选器组工作在屏蔽位模式。
  • 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
  • 应用程序不用的筛选器组,应该保持在禁用状态(通过CAN_FA1R设置)。
  • 筛选器组中的每个筛选器,都被编号为(即:筛选器编号)从0开始,到某个最大数值-取决于筛选器组的模式和位宽的设置。
  • 通过CAN_FFA1R的设置,可以将筛选器组关联到FIFO0/FIFO1

例:设置筛选器组0工作在:1个32位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。

3、STM32 CAN控制器简介-发送流程

CAN发送流程:

CAN发送流程为:

程序选择1个空置的邮箱(TME=1)->设置标识符(ID),数据长度和发送数据->设置CAN_TIxR的TXRQ位为1,请求发送->邮箱挂号(等待成为最高优先级)->预定发送(等待总线空闲)->发送->邮箱空置。

CAN接收流程 :

CAN接收流程为:

FIFO空->收到有效报文->挂号_1(存入FIFO的一个邮箱,这个由硬件控制,我们不需要理会)->收到有效报文->挂号_2->收到有效报文->挂号_3->收到有效报文->溢出。

CAN收到的有效报文,存储在3级邮箱深度的FIFO中。FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文。

4、STM32 CAN控制器简介-位时序:

STM32的CAN位时序,如下图所示:

STM32F103,设TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。

STM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。

STM32学习之CAN控制器简介相关推荐

  1. STM32学习笔记——DMA控制器(向原子哥学习)

    一.DMA简介 DMA,全称为:Direct Memory Access,即直接存储器访问,DMA 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输.当 CPU 初始化这个传输动作,传输 ...

  2. STM32 HAL库学习笔记1-HAL库简介

    STM32 HAL库学习笔记1-HAL库简介 HAL库 SPL 库 和 HAL 库两者相互独立,互不兼容.几种库的比较如下 目前几种库对不同芯片的支持情况如下 ST 中文官网上有一篇<关于ST库 ...

  3. STM32 CAN控制器简介-寄存器简介

    1.CAN主控制寄存器(CAN_MCR) 该寄存器的我们仅介绍下INRQ位,该位用来控制初始化请求. 设置INRQ=0,可使CAN从初始化模式进入正常工作模式. 设置INRQ=1,可使CAN从正常工作 ...

  4. STM32学习笔记(四)丨TIM定时器及其应用(定时中断、内外时钟源选择)

    本篇文章包含的内容 一.TIM 定时器 1.1 TIM 定时器简介 1.2 TIM 定时器类型及其工作原理简介 1.2.1 基本定时器工作原理及其结构 1.2.2 通用定时器工作原理及其结构 1.2. ...

  5. STM32学习笔记(六)丨TIM定时器及其应用(输入捕获丨测量PWM波形的频率和占空比)

    本篇文章包含的内容 一.输入捕获 1.1 输入捕获简介 1.2 输入捕获通道的工作原理 1.3 输入捕获的主从触发模式 1.4 输入捕获和PWMI结构 二.频率的测量方法 2.1 测频法 2.2 测周 ...

  6. STM32学习笔记(15)——SPI协议

    STM32学习笔记(15)--SPI协议 一.SPI协议简介 1. 物理层 2. 协议层 (1) 通讯的开始与停止 (2)时钟极性CPOL.时钟相位CPHA 二.STM32的SPI外设 1. 通讯引脚 ...

  7. STM32学习——TFTLCD原理

    STM32学习--TFTLCD原理 一.TFTLCD 简介 TFT-LCD 即薄膜晶体管液晶显示器(Thin Film Transistor-Liquid Crystal Display) TFT-L ...

  8. STM32学习笔记:FLASH读写之二

    因为关于STM32的Flash相关的知识点比较多,所以该内容的学习我们分为以下4个部分 1.RAM和ROM的一些基本概念 -- STM32学习笔记:FLASH读写之一 2.STM32的Flash寄存器 ...

  9. 《STM32学习笔记》2——开发环境的建立

    接上文,文中的图片知识,大多数来自视频的截图(来自洋桃电子). 欢迎大家批评指正! STM32学习笔记-专栏 文章目录 一.接口定义 1 芯片引脚整体简介 2 各部分引脚介绍 二.开发板简介 三.IS ...

最新文章

  1. tomcat与IIS服务器集成
  2. C语言setjmp函数使用
  3. java接收c语言的结构体
  4. 2021年高考成绩查询贵州分数线,2021年贵州省高考分数线
  5. Reversing-x64Elf-100
  6. 微信小程序云开发小项目“研岸日记”日记记录分享,源码分享
  7. JDK1.6官方下载_JDK6官方下载地址:http://www.java.net/download
  8. 【Java基础总结】网络编程
  9. 编写了html怎么测试,如何将测试结果写入HTMLTestRunner生成的报告标题中
  10. 从spring管理的datasource中获取connection
  11. 异常查错java.net.SocketException: Connection reset
  12. canape数据导入matlab,CANape使用介绍
  13. 大学生必学练习题 - C 语言经典50例
  14. 山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
  15. 如何制作一个漂亮的网页
  16. C语⾔:8位、16位、32位数据转换
  17. Python:import与from import的理解
  18. 文献下载神器 Sci-Hub 的最新地址
  19. 地下水除铁锰的原理和方法
  20. Map集合中的Map.Entry的定义:

热门文章

  1. ethereum-etl学习3
  2. java eventbus_Guava学习笔记:EventBus
  3. IIS配置问题:WCF服务打开svc文件报错:请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
  4. 阿里一员工被判刑,涉及金额66亿,获利千万
  5. 结构动力学MATLAB编程例题,华工结构动力学编程 MATLAB
  6. Mathcad求解一元二次方程
  7. UI 设计的整个工作流程是怎样的?
  8. SYN010E型全国产铷原子钟
  9. OPENXML的用法
  10. 如何使用ROS控制真实UR5机器人