当前位置: 首页 > 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状态

http://www.lqws.cn/news/537193.html

相关文章:

  • 使用 ReAct 框架在 Ollama 中实现本地代理(Agent)
  • CNN不是一个模型?
  • uniapp uni.chooseMedia 判断是拍摄还是相册 弹出权限说明
  • Rust与Go:GAN实战对决
  • 【stm32】HAL库开发——CubeMX配置外部中断和配置PWM
  • 大模型解码基础知识笔记
  • [自动驾驶-深度学习] PPliteSeg—基础部署(TensorRT)
  • GraphGen:训练数据合成实践
  • 营业额统计-02.代码开发及功能测试
  • CAD图纸转换为PDF
  • Vue-15-前端框架Vue之应用基础编程式路由导航
  • Vue.js 过滤器详解
  • Spring Boot 文件上传大小配置错误解决方案
  • 在Visual Studio使用Qt的插件机制进行开发
  • Python文件操作完全指南:从入门到精通
  • 基于SpringBoot的智慧旅游系统
  • 从零到一训练一个 0.6B 的 MoE 大语言模型
  • Java——Spring 非注解开发:IoC/DI 与 Bean 管理实战(含第三方组件整合)
  • python的银行柜台管理系统
  • easyExcel导入多sheet的Excel,存在合并单元格、列不固定的情况
  • # RK3588 Linux SDK 完整问题解决记录-编译内核头文件
  • 【Pandas】pandas DataFrame first_valid_index
  • 跨越十年的C++演进:C++14新特性全解析
  • 手机控车远程启动一键启动
  • C++智能指针概念及std::unique_ptr使用介绍
  • 使用docker搭建redis主从架构,一主2从
  • day48-硬件学习之GPT定时器、UART及I2C
  • 日语学习-日语知识点小记-进阶-JLPT-真题训练-N2阶段(4):2022年12月2023年12月
  • 机器学习18-强化学习RLHF
  • python基于协同过滤的动漫推荐系统