首页 > 其他分享 >STM32——CAN通讯

STM32——CAN通讯

时间:2024-02-28 11:33:27浏览次数:28  
标签:通讯 报文 FIFO STM32 过滤器 邮箱 1bit

STM32-CAN通讯

一、发送和接收流程

can通讯传输的是一种差分信号,关于具体的硬件电路略。

1、发送流程
  • 前置工作:如 时钟的开启、引脚的配置;CAN邮箱和模式等配置参考下面或HAL库选择

  • 选择一个空置的邮箱(判断空置:CAN_TSR的TMEx位);

  • 在这个空置邮箱中按数据帧格式设置ID、数据长度以及要发送的数据;

  • 请求发送(CAN_TIxR 的 TXRQ = 1 );

  • 后面的是硬件来实现的(这个过程可以被软件打断):

    • 邮箱挂号(等优先);
    • 预定(等总线);
    • 发送;
    • 空置。
2、接收流程
  • 前置工作略
  • 配置过滤器:给过滤器绑定一个FIFO,之后以FIFO0为例;
  • 硬件自动处理:收到报文后挂号到FIFO0(绑定的)的空闲邮箱深度;如果邮箱深度,再收到报文会溢出;
    • 这个挂号和溢出都可以触发中断
  • 软件接收:有个邮箱深度里挂过一次号即存一个报文,所以,可以通过挂号的数量来获取到存进来的报文数量。具体参考寄存器的位。

二、数据帧格式

  • 标准帧

    • 仲裁段:
      • SOF : 帧起始,1bit
      • ID : 11bit
      • RTR : 1bit ------------------- 0数据帧;1远程帧
    • 控制段
      • IDE : 1bit -------------------- 0标准格式;1扩展格式
      • R0 : 1bit ---------------------- 保留位
      • DLC : 4bit ---------------------- 数据字节个数 , 虽然有4bit容量,但只能放0-8,也就是最大发送8byte数据
    • 数据段 0-64bit,最大64bit,即8byte数据
    • CRC段
      • CRC : 15bit 校验
      • 界定符 : 1bit 校验结束
    • ACK段
      • ACK : 1bit 确认
      • 界定符 : 1bit 确认结束
    • 帧结束 7bit
  • 扩展帧

    略。比标准帧多了 1bit SRR, 18bit ID, 1bit R1保留位。

三、bit时段

​ 为了实现发收双方数据的同步,将传送每个bit的时间分为n个小的时间单位,这个时间单位就是tq, 可配置每个tq的具体时长。

​ CAN通讯是一种异步传输通讯,通过位时段来确认双方的通讯无误。

  • sync (ss) : 同步段。1tq
  • prop-set (pts) : 传播时间段。一般 1-8tq,补传输时的延时的误差
  • phase1 (pbs1) : 相位缓冲段1。一般 1-8tq,补边沿误差
  • phase2 (pbs2) : 相位缓冲段2。一般2-8tq,补边沿误差

​ 硬同步:接收到起始帧SOF时,调整同步段SS,使得与发送方SOF的SS段一致。

​ 再同步:接收过起始帧以后,发现与发送方不同步,则通过拉或缩相位段进行位同步。

​ 采样点:每个bit的采样位置,采样时发现位不同步则进行调整。

​ 在stm32f103中,prop-seg和phase1合作为了一段。

​ CAN通讯并【不是】通过波特率(每秒传输速率,比如uart中,确定起始位后,可以通过波特率完成)来确保通讯的,但它可以计算出波特率。

​ 1bit花费n个tq

​ tq = ( CAN_BTR的BRP位 + 1 ) * Tcan频率

​ 1bit中所有时段花费的tq = 1bit花费的时间

​ 波特率 = 1s / 1bit花费的时间

四、工作模式和测试模式

1、工作模式

​ 睡眠、正常、初始化。 通过寄存器控制。

2、测试模式

​ 静默模式(LBKM=0, SILM=1):可以自通讯,对外部只收不发;

​ 环回模式(LBKM=1, SILM=0):可以自通讯,对外部只发不收;

​ 环回静默模式(LBKM=1,SILM=1):可以自通讯,对外部不发不收。

五、CAN主体功能

1、CAN1和CAN2

​ 对于非互联产品,如stm32f103系列,只有一个CAN1,有14个过滤器组;

​ 对于互联型产品,如105、107系列,有一个CAN1和一个CAN2,连个CAN共享28个过滤器组。

2、发送邮箱

​ 3个。将要发送的报文放到某个邮箱中,硬件自动发送出去。

3、接收邮箱和FIFO

关于FIFO和接收邮箱,可以说每个FIFO里有三个邮箱,但一般说法是每个FIFO里有三个邮箱深度。

stm32f103系列中,CAN功能有2个FIFO(队列), 每个FIFO有3个邮箱深度, 每个邮箱深度可放一个报文。

当报文通过滤波器过滤之后,就存储到了某个FIFO的某邮箱中,这个需要FIFO和过滤器进行关联配置。

硬件会遍历配置好的FIFO中的邮箱深度以存储报文。

4、接收滤波器 (关于位宽和模式)

​ 上面说到,stm32103系列CAN功能有14个过滤器组;

​ 每个过滤器组由2个32位寄存器组成。

  • 位宽:

    可通过CAN_FS1R寄存器的FSCx(0-13)位将这2个32位运用为:

    • 0 ———— 4个单位,每个单位16bit
    • 1 ———— 2个单位,每个单位32bit
  • 过滤器模式:

    可通过CAN_FM1R寄存器的FBMx位控制

    • 1 ———— 标识符模式: 4或2个单位全填ID, 只有填进去的ID才可通过过滤器放到FIFO的邮箱深度中
    • 0 ———— 屏蔽位模式: 4或2个单位 的 其中一半是1/0位,另一半(每个32bit的低16bit)是规则(0验证 1不验证)

六、CAN错误状态

  • 错误主动——————出错次数较少, [0, 127]

  • 错误被动——————出错次数中等, [128, 255]

  • 离线 ——————出错次数较多, [256, ∞)

    从离线模式进入正常模式(错误主动)可以由软件或硬件控制,MCR的ABOM位可配置这个。

标签:通讯,报文,FIFO,STM32,过滤器,邮箱,1bit
From: https://www.cnblogs.com/wangsiyaoa/p/18039805

相关文章

  • Linux使用命令行编译并用st-link烧录STM32
    创建工程在STM32CubeMX中配置,选择Makefile并生成。环境安装编译工程需要用到arm-none-eabi,去官网下载对应系统版本,下载后解压到任意位置。添加环境变量添加环境变量到.bashrc文件:echo'exportPATH="/toolchain/arm-none-eabi/bin:$PATH"'>>~/.bashrc我解压的位置为/too......
  • 基于VsCode platformio的stm32开发环境搭建
    基于VsCodeplatformio的stm32开发环境搭建背景VsCode作为当下流行的编辑器,且不单单是一个编辑器里面集成了很多插件,使用这些插件可以完成很多功能。STM32开发环境除了KEIL与IAR,其实还有很多其他的开方方式,ST官方提供了很多的开发软件,基于Eclipse也可以搭建一套,使用VsCode配合......
  • 基于STM32F407MAC与DP83848实现以太网通讯四(STM32F407MAC数据收发与DMA描述符)
    上一章实现的MAC数据包的基础收发功能,但是只是简单的操作了ETH外设的收发包函数并没有深入了解其中的原理逻辑,本章结合STM32F40x文档与STM32F4x7_ETH_Driver驱动库了解MAC的收发包流程。一、描述符列表 在创建描述符列表之前先了解描述符列表的定义,描述符就软件来说就是一个结......
  • k8s 跨空间通讯(内外部)
    四层代理创建ExternalName类型的Service应用场景:跨名称空间访问需求:default名称空间下的pod想要访问cheng-svc-pod名称空间下的pod服务cheng-svc-pod下有一个svc服务,default想访问就要下完成的名称Service_name.svc_namespace.svc.cluster.local,名称太长不好记,后面......
  • 基于STM32F407MAC与DP83848实现以太网通讯三(STM32F407MAC配置以及数据收发)
    本章实现了基于STM32F407MAC的数据收发功能,通过开发板的RJ45接口连接网线到电脑,电脑使用Wiershark工具抓包验证。参考文档:DP83848IV英文DP83848EP中文STM32F4xx参考手册一、工程模板以及参考源码的获取工程源码我使用的正点原子的探索者开发板STM32F407(V2)参考源码:正点原子......
  • TDC7200+STM32模拟SPI驱动测量脉冲时差
    TDC7200数据手册:https://www.ti.com/cn/lit/ds/symlink/tdc7200.pdf?ts=1708671736079&ref_url=https%253A%252F%252Fso.szlcsc.com%252FTDC7200硬件电路: TDC7200驱动程序,TDC7200有两种模式,使用的是模式2模拟SPI:SPI写数据:voidSPI_Write_Byte(uint8_tdata){   uint8_t......
  • stm32单片机扫码设计方案,ESP32蓝牙无线扫码器设计项目硬件套件的实现,一维码二维码识别
    stm32/ESP32(或ESP32C3,ESP32S3)/ESP8266单片机扫码识别设计方案二维码一维码扫描模块开发项目资料程序,轻松实现蓝牙扫码器WiFi无线串口,二维码识别显示器串口输出条码扫描枪扫码枪开发项目套件设计,很适合DIY无需焊接,到手即可开发调试。ESP32,ESP8266等基于arduino库实现,stm32基于......
  • 03. STM32的时钟系统
    一、STM32F4的时钟树  其中,A部分表示输入时钟源,可分为外部时钟源和内部时钟源;B为锁相环“PLL”;C为系统时钟源选择器,此项决定了MCU的系统主时钟“SYSCLK”的大小;AHB预分频器将SYSCLK分频或不分频后分发给其它外设进行处理,包括到D部分的Cortex-M内核系统的......
  • 基于STM32F407MAC与DP83848实现以太网通讯二(DP83848硬件配置以及寄存器)
    参考内容:DP83848数据表一、PHYDP83848功能模块图                     DP83848的硬件模块主要为:MII/RMII/SNI INTERFACES:用于与MAC数据传输的MII/RMII/SNI接口Transmit BLOCK:数据发送模块,将从外部MAC(例如STM32ETH外设的MAC)接收......
  • 基于STM32F407MAC与DP83848实现以太网通讯一(STM32以太网(ETH)外设)
    STM32F4xx可以通过以太网按照IEEE802.3-2002标准发送和接收数据。支持与外部物理层(PHY)相连的两个工业标准接口:默认情况下使用的介质独立接口(MII)(在IEEE802.3规范中定义)和简化介质独立接口(RMII)。具体的以太网(ETM)特性参考:STM32F4xx中文参考手册这里将重要的地方进......