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

STM32F1学习——CAN外设(上)

一、STM32中的CAN外设

        STM32内置bxCAN外设(basic extended CAN),支持CAN2.0A和2.0B,可以自动发送CAN报文和按照过滤器自动接收指定CAN报文,程序只需处理报文数据而无需关注总线的电平细节。

        CAN波特率最高可达1M bits / s 。

        3个可配置优先级的发送邮箱。

        2个3级深度的接收FIFO(first in first out)。

        14个过滤器组(互联型28个)。

        时间触发通信、自动离线恢复、自动唤醒、禁止自动重传、接收FIFO溢出处理方式可配置、发送优先级可配置、双CAN模式。

二、STM32中的CAN框图

        这是双CAN模式的框图,在平时我们仅使用上半部分CAN1。

        简单来说我们需要通过左边的控制/状态/配置来控制CAN的发送和接收模式,CAN总线发送只需往3个发送邮箱里面写数据即可,他们可以配置为先到先发或按照ID号小的来发。接收数据通过接受滤波器后才能选择进入两个FIFO中。

三、发送过程

        发送邮箱默认的状态是左上角的空置状态,其中RQCP(Request Completed)表示请求完成;TXOK(Transmission OK)表示发送成功;TME(Transmit Mailbox Empty)发送邮箱空;

        从默认状态接收到TXRQ(Transmit Request)发送请求,将会进入挂号状态,如果此时该邮箱相比其他邮箱是最高优先级将进入预定状态,在预定状态如果此时又来了一个更高优先级的邮件,且发送的模式是根据ID号优先级来的,则会退回挂号模式。他两状态在接收到ABRQ(Abort Request)中止请求的时候都会到中间的空置状态(发送失败状态)。

        若一切正常,预定状态会在CAN总线 空闲的时候(IDLE) 进入发送状态,如果发送成功将进入左下角的空置状态。如果发送失败,NART若配置1则表示不用自动重传,则进入发送失败状态。否则回到预定状态进行重传。

四、接收过程

        接收FIFO默认的状态是左上角的空状态,其中FMP(FIFO Message Pending)表示FIFO中挂起的消息数,FOVR(FIFO Overrun)表示FIFO溢出。

        当接收到有效报文的时候进入挂号_1状态,若继续接到报文则继续转直到挂号_3,同时这里还会产生一个FULL = 1的标志位图上未画出,如果仍然接到有效报文则进入溢出状态。每当CPU拿走了FIFO中的数据,RFOM(Release FIFO Output Mailbox)表示释放FIFO输出邮箱 = 1,则向上倒退。

五、发送和接收配置位

NART:置1,关闭自动重传,CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失);置0,自动重传,CAN硬件在发送报文失败时会一直自动重传直到发送成功。

TXFP:置1,优先级由发送请求的顺序来决定,先请求的先发送;置0,优先级由报文标识符来决定,标识符最小的先发送(标识符值相等时,邮箱号小的报文先发送)。

RFLM:置1,接收FIFO锁定,FIFO溢出时,新收到的报文会被丢弃;置0,禁用FIFO锁定,FIFO溢出时,FIFO中最后收到的报文被新报文覆盖。

参考

[2-1] STM32 CAN外设(上)_哔哩哔哩_bilibili

http://www.dtcms.com/a/422464.html

相关文章:

  • Docker Desktop实战、问题记录
  • 《 Linux 点滴漫谈: 二 》全面掌握 Linux 系统安装与环境准备,迈出学习第一步
  • 从0死磕全栈之Next.js 中的 CSS 方案全解析:Global CSS、CSS Modules、Tailwind CSS 怎么选?
  • 先域名 还是先做网站蜘蛛搜索引擎
  • 《C++进阶之C++11》【可变参数模板 + emplace接口 + 新的类功能】
  • 什么网站可以做兼职怎么做提卡网站
  • 【Linux基础知识系列:第一百四十四篇】使用find命令查找和处理文件
  • cocos 武器攻击敌人后 将碰撞node传给角色脚本 有角色脚本传递计算伤害 调用敌人脚本 敌人自己计算血量 如果超过最大血量 自己删除
  • PySide6 主窗口(QMainWindow)菜单(QMenu)实现打开并读取文本文件
  • Steam秋季特卖倒计时!用UU远程国庆随时购史低游戏!
  • Linux系统C++开发环境搭建工具(一)—— gflags/gtest/spdlog 使用指南
  • MySQL逻辑备份工具mysqldump:原理剖析与实操指南
  • Java-Spring入门指南(十一)代理模式与Spring AOP实战
  • 实名认证接口-识破虚假身份:科技为信任筑起第一道防线
  • 柘林网站建设wordpress改背景图片
  • RokcetMQ事务消息详解
  • Athena + S3 数据分析实战(深度版):从数据湖到可视化 BI
  • IP纯净度检测工具
  • 第四部分:VTK常用类详解(第114章 vtkStreamTracer流线追踪类)
  • MATLAB的CFAR(恒虚警率)图像目标检测
  • 2025三掌柜赠书活动第三十五期 AI辅助React Web应用开发实践:基于React 19和GitHub Copilot
  • HRPC在Polaris存储系统中的应用
  • 网站在百度无法验证码怎么办网站开发技术有包括
  • 【AI时代速通QT】第八节:Visual Studio与Qt-从项目迁移到多版本管理
  • Spring线程池:ThreadPoolExecutor与ThreadPoolTaskExecutor终极对比
  • IDEA创建SpringBoot项目使用JDK1.8
  • 深入分析JAR和WAR包的区别 (指南七)
  • 详解 OpenCV 中的仿射变换:原理与实战案例
  • 计算机视觉(opencv)——基于 dlib 和 CNN卷积神经网络 的人脸检测
  • 黑色背景的网站开发工具微信商城收费吗