STM32 CAN发送邮箱和接收FIFO

devtools/2024/9/20 1:24:30/ 标签: stm32, 嵌入式硬件, 单片机

STM32的CAN发送邮箱和接收FIFO

CAN发送邮箱

  • CAN外设一共有3个发送邮箱,即最多可以缓存3个待发送的报文。每个发送邮箱中包含有标识符寄存器CAN_TIxR、数据长度控制寄存器CAN_TDTxR及2个数据寄存器CAN_TDLxR、 CAN_TDHxR,它们的功能如下:
寄存器名功能
标识符寄存器CAN_TIxR存储待发送报文的ID、 扩展ID、 IDE位及RTR位
数据长度控制寄存器CAN_TDTxR存储待发送报文的DLC段
低位数据寄存器CAN_TDLxR存储待发送报文数据段的Data0-Data3这四个字节的内容
高位数据寄存器CAN_TDHxR存储待发送报文数据段的Data4-Data7这四个字节的内容
  • 当要使用CAN外设发送报文时,把报文的各个段分解,按位置写入到这些寄存器中,并对标识符寄存器CAN_TIxR中的发送请求寄存器位TMIDxR_TXRQ置1,即可把数据发送出去。
  • 其中标识符寄存器CAN_TIxR中的STDID寄存器位比较特别。 CAN的标准标识符的总位数为11位,而扩展标识符的总位数为29位的。当报文使用扩展标识符的时候,标识符寄存器CAN_TIxR中的STDID[10:0]等效于EXTID[18:28]位,它与EXTID[17:0]共同组成完整的29位扩展标识符。

CAN接收FIFO

  • CAN外设一共有2个接收FIFO,每个FIFO中有3个邮箱,即最多可以缓存6个接收到的报文。当接收到报文时, FIFO的报文计数器会自增,而STM32内部读取FIFO数据之后,报文计数器会自减,通过状态寄存器可获知报文计数器的值,而通过前面主控制寄存器的RFLM位,可设置锁定模式,锁定模式下FIFO溢出时会丢弃新报文,非锁定模式下FIFO溢出时新报文会覆盖旧报文。
  • 跟发送邮箱类似,每个接收FIFO中包含有标识符寄存器CAN_RIxR、数据长度控制寄存器CAN_RDTxR及2个数据寄存器CAN_RDLxR、 CAN_RDHxR,其功能如下:
寄存器名功能
标识符寄存器CAN_RIxR存储收到报文的ID、 扩展ID、 IDE位及RTR位
数据长度控制寄存器CAN_RDTxR存储收到报文的DLC段
低位数据寄存器CAN_RDLxR存储收到报文数据段的Data0-Data3这四个字节的内容
高位数据寄存器CAN_RDHxR存储收到报文数据段的Data4-Data7这四个字节的内容

http://www.ppmy.cn/devtools/15996.html

相关文章

docker环境搭建

项目环境搭建 1、安装 Linux 虚拟机 (1)下载安装: VM VirtualBox 下载安装:Downloads – Oracle VM VirtualBox,要先开启CPU虚拟化 (2)通过vagrant,在VirtualBox中安装虚拟机 下…

SpringBoot多数据源-DynamicDataSource

SpringBoot多数据源-DynamicDataSource 1.多数据源应用场景2.DynamicDataSource原理3.DynamicDataSource使用3.1 导入依赖3.2 application.yml多数据源配置 4.测试 1.多数据源应用场景 读写分离:数据库主节点压力比较大,需要增加从节点提供读操作&#…

无重复字符的最长子串

. - 力扣(LeetCode) 滑动窗口个人理解:从整体与局部的角度看,如何求包含当前字符的前面无重复字符的最长子串? 1、前面的最长字符串不包含当前字符,则追加1个即可 2、前面的最长字符包含当前字符&#x…

新风口下的必应bing国内广告投放该怎么做?

必应Bing作为全球搜索引擎市场的重要参与者,正逐渐显现出其在国内市场的独特价值和潜力。随着互联网生态的多元化发展,必应Bing凭借其高质量用户群和精准投放能力,成为了企业寻求新增长点的新风口。 一、洞察先机,精准定位市场 …

javaWeb项目-智慧餐厅点餐管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JavaScript Java…

记录如何用php将多个字符替换成同一个字符

在PHP中,如果你想要将多个不同的字符替换成同一个字符,可以使用str_replace()函数。这个函数可以接收一个包含需要被替换的字符的数组,以及一个表示替换目标的字符串。 以下是使用str_replace()进行多字符替换的基本示例: $text…

【Java--数据结构】链表经典OJ题详解(上)

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 谈谈头插、头删、尾插、头插的时间复杂度 反转一个单链表 链表的中间结点 返回倒数第k个结点 合并两个链表 谈谈头插、头删、尾插、头插的时间复杂度 头插和头删的时…

LocalAi,Ollama+AnythingLLM搭建部署本地大模型AI知识库,汉化版本

AnythingLLM 是一个全栈应用程序,您可以使用商业现成的 LLM 或流行的开源 LLM 和 vectorDB 解决方案来构建私有 ChatGPT,无需任何妥协,您可以在本地运行,也可以远程托管并能够智能聊天以及您提供的任何文件。 AnythingLLM 将您的文…

SpringBoot 配置 jedis 来连接redis

Maven依赖 首先配置 maven依赖,这个依赖,要结合自己的springboot 的版本去选, 如果想要看自己的springboot 版本 在 启动类中去 加入,这两行代码 String version SpringBootVersion.getVersion(); log.info("***SpringBo…

离散型制造行业智能工厂解决方案,助力国家新智产业升级

离散型制造行业智能工厂标准解决方案 离散型制造行业的智能工厂解决方案是推动国家智能制造产业升级的关键。 1. 集中优势资源:实施攻关计划,瞄准关键核心技术和重点产业进行定向突破,特别是在集成电路(IC)、AI、生物医药等领域。2. 国家创…

Docker 网络与资源控制

一 Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根 据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默 认网关。因为在同…

【11-Ⅰ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础,通过阅读Java廖雪峰网站,简单速成了java,但对其中一些入门概念有所疏漏,阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

3ds Max2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 3ds Max是一款基于PC系统的强大3D建模、渲染和制作软件,广泛应用于游戏开发、影视后期制作、建筑设计、工业设计等多个领域。其拥有丰富的建模工具,可轻松创建逼真的三维场景和模型;同时&#…

大数据开发详解

点击下载《大数据开发详解》 1. 前言 随着信息化时代的快速发展,大数据已经成为了企业和组织不可或缺的重要资源。大数据开发则是指通过一系列技术手段,对海量数据进行收集、存储、处理、分析和挖掘,以实现数据的价值化利用。大数据开发涉及…

第十五届蓝桥杯省赛第二场C/C++B组G题【最强小队】题解

20pts 枚举所有可能的左端点、右端点,时间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于每个区间进行遍历检测,时间复杂度 O ( n 3 ) O(n^3) O(n3)。 100pts 由于数据范围为 1 0 5 10^5 105,所以肯定只能进行一次枚举。 我们尝试枚举右端点&…

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程,包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步:需求分析和系统设计。演示:ym.fzapp.top 第一步:需求分析 确…

设计模式学习

设计模式学习 设计模式学习策略模式策略模式适用于以下场景: 设计模式学习 策略模式 策略模式适用于以下场景: 对象有多种行为或算法,需要根据不同情况选择不同的算法。系统中有多个类实现相同的接口或继承相同的抽象类,但具体…

《LeetCode力扣练习》代码随想录——回溯算法(递增子序列---Java)

《LeetCode力扣练习》代码随想录——回溯算法&#xff08;递增子序列—Java&#xff09; 刷题思路来源于 代码随想录 491. 非递减子序列 回溯 class Solution {private List<Integer> path new ArrayList<>();private List<List<Integer>> result ne…

C#中=> “Lambda运算符”

在C#中&#xff0c;> 符号被称为“Lambda运算符”或“Lambda箭头”。它用于连接Lambda表达式中的参数列表和表达式主体&#xff0c;表示函数的输入和输出关系。因此&#xff0c;Lambda运算符充当了将参数映射到表达式的箭头。 Lambda运算符的左侧是参数列表&#xff0c;它们…

前端模块化整理汇总

AMD 异步加载&#xff0c;依赖前置&#xff0c;前置依赖建议写在前引用&#xff0c;在所有模块加载完成后立即执行回调函数&#xff0c;用户体验好&#xff0c;不容易造成卡顿 需要引用require.js //math.js define([], function () {function add(a, b) {return a b;}retur…