bxCAN 发送处理

2024-01-25 07:36
文章标签 处理 发送 bxcan

本文主要是介绍bxCAN 发送处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发送处理

为了发送消息,应用程序必须在请求发送前,通过将发送邮箱标识符寄存器<CAN_TIxR---CAN TX mailbox identifier register>中的相应发送邮箱请求位<TXRQ---Transmit mailbox request> 置 1,选择一个空发送邮箱,并设置标识符、数据长度代码 (DLC) 和数据。一旦邮箱退出空状态,软件即不再具有对邮箱寄存器的写访问权限。发送邮箱请求位<TXRQ---Transmit mailbox request>置 1 后,邮箱立即进入挂起状态,等待成为优先级最高的邮箱。请参见发送优先级。一旦邮箱拥有最高优先级,即被安排发送。CAN 总线变为空闲后,被安排好的邮箱中的消息即开始发送(进入发送状态)。邮箱一旦发送成功,即恢复空状态。硬件通过将发送状态寄存器<CAN_TSR---CAN transmit status register> 中的邮箱 x(x=0,1,2) 请求完成标志位<RQCPx---Request completed mailbox x> 和 邮箱 x(x=0,1,2) 发送成功标志位<TXOKx---Transmission OK of mailbox x> 置 1,来表示发送成功。
如果发送失败,失败原因将由发送状态寄存器<CAN_TSR---CAN transmit status register>中的邮箱 x(x=0,1,2) 仲裁丢失标志位<ALSTx---Arbitration lost for mailbox x>  和/或 邮箱 x(x=0,1,2) 发送错误标志位<TERRx---Transmission error of mailbox x>指示。

发送优先级

按标识符

当多个发送邮箱挂起时,发送顺序由邮箱中所存储消息的标识符来确定。根据 CAN 协议的仲裁,标识符值最低的消息具有最高的优先级。如果标识符值相等,则首先安排发送编号较小的邮箱。

按发送请求顺序

可以通过设置主控制寄存器<CAN_MCR---CAN master control register>中的发送 FIFO 优先级位<TXFP---Transmit FIFO priority>置 1,将发送邮箱配置为发送 FIFO(先进先出模式)。在此模式下,优先级顺序按照发送请求顺序(时间顺序)来确定。
发送请求顺序模式对分段发送非常有用。

中止

可以通过将发送状态寄存器<CAN_TSR---CAN transmit status register>中的邮箱 x(x=0,1,2) 中止请求位 <ABRQ---Abort request for mailbox x> 置 1,来中止发送请求。在挂起或已安排状态下,邮箱立即中止。
如果在邮箱处于发送状态时请求中止,则会出现两种结果:
1、如果邮箱发送成功,将变为空状态,同时发送状态寄存器<CAN_TSR---CAN transmit status register>中的发送成功标志位<TXOKx---Transmission OK of mailbox x> 置 1。
2、如果发送失败,邮箱变为已安排状态,发送中止并变为空状态,同时发送状态寄存器<CAN_TSR---CAN transmit status register>中的发送成功标志位<TXOKx---Transmission OK of mailbox x> 清零。
在所有情况下,邮箱至少在当前发送结束时都会恢复空状态。

禁止自动重发送模式

该模式旨在满足 CAN 标准的时间触发通信方案的要求。要将硬件配置为此模式,必须将主控制寄存器<CAN_MCR---CAN master control register>中的禁止自动重发送位<NART---No automatic retransmission>置 1 。
在此模式下,每个发送仅启动一次。如果第一次尝试失败,由于仲裁丢失或错误,硬件将不会自动重新启动消息发送。
第一次发送尝试结束时,硬件将认为请求已完成,并将发送状态寄存器<CAN_TSR---CAN transmit status register>中的请求完成标志位<RQCPx---Request completed mailbox x>位置 1。
发送结果由发送状态寄存器<CAN_TSR---CAN transmit status register>中的发送成功标志位<TXOKx---Transmission OK of mailbox x>、仲裁丢失标志位<ALSTx---Arbitration lost for mailbox x>  和 发送错误标志位<TERRx---Transmission error of mailbox x>来指示。

这篇关于bxCAN 发送处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642542

相关文章

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

Redis如何使用zset处理排行榜和计数问题

《Redis如何使用zset处理排行榜和计数问题》Redis的ZSET数据结构非常适合处理排行榜和计数问题,它可以在高并发的点赞业务中高效地管理点赞的排名,并且由于ZSET的排序特性,可以轻松实现根据... 目录Redis使用zset处理排行榜和计数业务逻辑ZSET 数据结构优化高并发的点赞操作ZSET 结

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ