当前位置: 首页 > news >正文

2.1、STM32 CAN外设简介

目录

1、简介

2、CAN网拓扑结构

3、CAN收发电路

4、CAN基本结构

5、发送过程

6、接收过程

1、简介

bxCAN中bx表示支持扩展格式

STM32波特率最高达1Mbps,可使用高速CAN

FIFO:(First Input First Output)先进先出寄存器

2、CAN网拓扑结构

使用F103c8t6将CAN收发器的RX和TX引脚接在PA11和PA12时,USB和CAN无法同时使用

可以映射到PB8和PB9

3、CAN收发电路

4、CAN基本结构

(1)GPIO:CAN_Tx配置为复用推挽输出,CAN_Rx配置为上拉输入。

(2)发送和接收控制器:只需把想发的报文告诉他,他就自动给你发出去,当他接收到一个报文后,就自动与你配置的过滤器进行比对,符合过滤器的报文自动存入FIFO的队列中,CPU直接读取FIFO即可。

(3)邮箱:将想发送的报文存入邮箱,控制器自动广播,为避免长时间等不到总线空闲,导致报文在邮箱滞留很久造成的CPU等待,因此设置了3个发送邮箱,提供缓冲区,CPU可以不用等待,向其他邮箱写入报文。

发送哪个邮箱的报文可根据先来后到(TXFP=0),也可按照ID号优先级处理(TXFP=1)。可由TXFP进行配置

(4)接收过滤器:可根据ID号对报文进行过滤,不是想要的报文会被直接丢弃。一共14个过滤器,在程序中可对任意一个过滤器进行配置,把想要接收的报文ID规则写入过滤器中,我们想要的报文会通过过滤器进入后续的FIFO中,进而被CPU读取。

如果只需要几种类型的报文ID,使用一两个过滤器即可满足要求,不被配置的过滤器默认处于失能状态。

硬件设计的过滤器可节省软件对报文ID比对的工作

(5)接收FIFO:FIFO0和FIFO1,每个FIFO有3个邮箱,可容纳3个报文排队。过滤器可指定进那个FIFO队伍。

处理报文排满问题:若同一个FIFO因没有被CPU及时读取而满了,STM32可配置FIFO的锁定状态,来处理FIFO满之后新的报文该怎么存:若配置FIFO锁定(RFLM=1),新的报文会被直接丢弃;若配置FIFO不锁定(RFLM=0),FIFO满之后,新的报文会把邮箱2的数据踢出去,自己占据邮箱2的位置。

若邮箱0报文被读取,邮箱1的数据就会存入邮箱0,邮箱2存入邮箱1。

5、发送过程

RQCP=x 表示任意值

TME=1 ,表示当前邮箱是空置状态

TXRQ=1,表示产生这个发送请求,邮箱进入挂号状态

CAN总线 = IDLE(空闲)

发送失败 = NART

NART = 0 表示使用自动重传,发送失败的报文会回到预定状态,下次总线空闲会再次发送;

NART = 1 表示禁止自动重传,发送失败后直接回到空置状态,TXOK=0

ABRQ = 1,可终止挂号状态和预定状态的发送,终止发送后状态和发送失败是一样的

6、接收过程

FIFO存满后,FOVR=1,FULL置1

溢出状态和挂号3状态其实是一个状态,溢出状态释放一个邮箱后会进入挂号2状态

相关文章:

  • Vue3 中 Axios 深度整合指南:从基础到高级实践引言总结
  • MR30分布式IO:产线改造省时 70%
  • 22. 括号生成
  • AI编程工具深度对比:腾讯云代码助手CodeBuddy、Cursor与通义灵码
  • ubuntu20.04如何给appImage创建快捷方式
  • EXILIUM×亚矩云手机:重构Web3虚拟生存法则,开启多端跨链元宇宙自由征途
  • 【JeecgBoot AIGC】打造智能AI应用
  • 51c~嵌入式~PLC~三菱~合集1
  • 记dwz(JUI)前端框架使用之--服务端响应提示框
  • 如何在x86_64 Linux上部署Android Cuttlefish模拟器运行环境
  • Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护
  • python + opencv实现简单的文字水印
  • 【CSS 行高陷阱:如何避免文本被截断问题】
  • 【RESTful接口设计规范全解析】URL路径设计 + 动词名词区分 + 状态码 + 返回值结构 + 最佳实践 + 新手常见误区汇总
  • Day43 复习日 图像数据集——CNN
  • 数据结构进阶 - 第一章 绪论
  • linux cp与mv那个更可靠
  • 2-深度学习挖短线股-2-训练数据计算
  • Elasticsearch 中的精确搜索与模糊搜索
  • 从手机随拍到标准扫描件:AI如何智能校正证件照片(Python+OpenCV)