uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage)
{
uint8_t transmit_mailbox = 0;
/* Check the parameters */
assert_param(IS_CAN_ALL_PERIPH(CANx));
assert_param(IS_CAN_IDTYPE(TxMessage->IDE));
assert_param(IS_CAN_RTR(TxMessage->RTR));
assert_param(IS_CAN_DLC(TxMessage->DLC));
/* Select one empty transmit mailbox */ 选择一个空邮箱
if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
{
transmit_mailbox = 0;
}
else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
{
transmit_mailbox = 1;
}
else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
{
transmit_mailbox = 2;
}
else
{
transmit_mailbox = CAN_TxStatus_NoMailBox;//没有邮箱,这个值是4
}
if (transmit_mailbox != CAN_TxStatus_NoMailBox)//主要是配置邮箱的4个寄存器
{
/* Set up the Id */
CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ;
if (TxMessage->IDE == CAN_Id_Standard)//如果是标准侦
{
assert_param(IS_CAN_STDID(TxMessage->StdId)); //CAN_TIxR(寄存器)(0~2)
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \
TxMessage->RTR);
}
else//扩展侦
{
assert_param(IS_CAN_EXTID(TxMessage->ExtId));//CAN_TIxR(寄存器)(0~2)
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \
TxMessage->IDE | \
TxMessage->RTR);
}
/* Set up the DLC */
TxMessage->DLC &= (uint8_t)0x0000000F;//邮箱数据长度和时间戳寄存器CAN_TDTxR
CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0;
CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC;//数据长度
/* Set up the data field */设置数据寄存器有高4字节和低4字节
CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) |
((uint32_t)TxMessage->Data[2] << 16) |
((uint32_t)TxMessage->Data[1] << 8) |
((uint32_t)TxMessage->Data[0]));
CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) |
((uint32_t)TxMessage->Data[6] << 16) |
((uint32_t)TxMessage->Data[5] << 8) |
((uint32_t)TxMessage->Data[4]));
/* Request transmission */
CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ;//请求发送
}
return transmit_mailbox;//返回0~2就成功,4失败.
}
相关推荐
深入探究STM32H743 FDCAN的Message RAM
STM32H743 FDCAN的Message RAM研究
STM32之CAN---发送管理分析
1 CAN发送邮箱 STM32共有三个CAN发送邮箱,在检测到总线空闲时交发送,但需要注意的是,有可能会发送失败,有可能因为仲裁失败从而导致失败,也有可能是其它错误,原则上bxCAN将自动重发,但bxCAN也可以配置不自动重发。正因为如此,发送邮箱中有可能同时存在多个需要发送的报文,一旦出现这种情况,那么发送邮箱中的多个报文又将是谁先发送谁后发送呢?有两种模式:ID模式和FIFO模式。ID模式由...
STM32CubeMX 配置CAN通信 HAL库
/标识符屏蔽位模式中标识符寄存器,配置ID//标识符屏蔽位模式中屏蔽寄存器//标识符列表模式中为2个标识符寄存器,配置ID例如:屏蔽位寄存器的bit15=1,标识符寄存器的bit15=0,那么接受的Message里面的标识符的bit15必须为0才可能被硬件接受。如果屏蔽位寄存器的bit15=0,Message里面的标识符的bit15无论为什么值,bit15都能匹配通过。32位屏蔽位模式下:1个过滤器。FR2指定需要关心哪些位,FR1指定这些位的标准值。
STM32的CAN通信的收发库函数解读
当需要使用CAN发送报文时,先定义一个上面发送类型的结构体,然后把报文的内容按成员赋值到该结构体中,最后调用库函数CAN_Transmit把这些内容写入到发送邮箱即可把报文发送出去。
STM32进阶学习(6)-通信协议之CAN详解
CAN通信是一种基于CAN(Controller Area Network)总线的通信协议。CAN总线是一种高速、可靠的串行总线,主要用于实时控制系统中的数据传输。CAN通信的特点包括:高可靠性:CAN总线采用差分信号传输,具有较强的抗干扰能力,能够在较长距离上进行可靠的数据传输。实时性:CAN总线支持多帧并发传输,数据传输速度快,能够满足实时控制系统的要求。灵活性:CAN总线支持多主机和多节点的连接,能够方便地扩展和改变系统结构。低成本:CAN总线的硬件成本相对较低,易于实现和维护。
RT-Thread 入门学习笔记 - 熟悉邮箱rt_mailbox的使用
简介 邮箱是用来传输邮件的,如果没人取件,会暂存下来。 RT-Thread的邮箱,传递的是一个4字节(32位)值,可以传值,可以传指针(32位MCU,指针为32位)。 邮箱使用比消息队列更精简,简单的命令的传输,可以使用邮箱,资源占用可以更小。 相关API 在rt-thread内核代码:rtthread.h中,可以找到邮箱的各个API 邮箱API的实现,在:ipc.c,可以认为邮箱属于线程间通信的一种。 邮箱:mailbox相关API如下 rt_mb_init \ rt_mb_det.
CAN通信的用户层设计
在汽车电子和工业领域里,经常会使用CAN总线方式来进行通信,CAN总线速率高,采用差分通信方式,因此抗干扰性强,常规走线可达十米以上。那么 CAN协议底层有阻塞和唤醒模式,且有冗余校验和错误帧识别,因此可靠性极高。不同于modbus总线使用485作为通信方式,CAN总线没有主从机之分,总线上的设备均可不定时广播消息,主控制器只需根据帧ID接受相应的有用帧而舍弃其他帧。 现在越来越多的主控制芯片都会集成1到2个CAN控制器,PLC厂商也会提供CAN拓展模块以支持CAN通信(此处不得不吐槽PLC
STM32Cube高效开发教程<基础篇>(十六)----CAN总线通信
一、 CAN总线结构和传输协议声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 CAN总线结构和传输协议CAN是控制器区域网络(Controller Area Network)的缩写。CAN总线是一种适用于工业设备的高性能总线网络。在本博客中,会介绍CAN总线通信协议,CAN的HAL驱动程序。
tm4c1290ncpdtTI芯片,CAN通信实验
CAN通信相关代码
STM32开发(五)STM32F103 通信 —— CAN通信编程详解
USE_HAL_CAN_REGISTER_CALLBACKS宏定义为0,则调用HAL_CAN_RxFifo0MsgPendingCallback回调函数(这个函数是弱化函数,重构该函数之后就会调用重构函数)(2)在HAL_CAN_IRQHandler函数中判断中断标志位为CAN_IT_RX_FIFO0_MSG_PENDING(挂起中断,在初始化中使能挂起中断)CAN接收中断包括:挂起中断(只要有信息就触发中断)、满中断(FIFO都满了触发中断)、溢出中断(只有FIFO都满后还接收到数据就会触发中断)
ETL数据集成案例
一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。
stm32f105vct6例程_stm32f105例程 CAN500K USART_LED
/*CAN1USART1CAN波特率、收发器 配置见CAN.hstm32f10x.h中修改了外部晶振值8MHz*//* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"#include "stm32f10x_rcc.h"#include "stm32...
微弱电流检测放大器PCB布线布局设计
微弱电流检测放大器PCB布线布局设计的注意事项,保护环的概念和相关设计。
can总线分析仪与stm32的收发操作
can分析仪与stm32的简单收发操作
YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理
本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。
Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型
本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。
CAN总线
----------------------------------------------------------------------显性电平比隐形电平优先级要高,下面要用---------------------------------------------它的长度为1tq,tq就相当于一个时间单位,我们可以规定它的大小,一般tq=1us.------------------------因为贫穷,莫得两块板子,所以只能用环回模式了------------------------------
Sublime Text4代码配色自定义方案
关于Sublime Text对于我的使用体验,只能说内置的代码主题真的都太low了,一点都不好看。所以接下来我分享一下我自定义代码配色。当然,大家也可以通过我给的中文翻译注释来自定义自己喜欢的颜色。废话不多说,直接上代码直接将代码复制粘贴到:Preferences > Customize Color Scheme 即可。},"globals":"foreground": "var(white)", // 前景色。
【STM】CAN通信
CAN协议特点: 1、多主控制: 所有单元都可以发送消息,两个以上单元同时发消息时,根据标识符(ID)决定优先级。两个以上单元同时发送消息的时候,对各消息的ID逐位比较,胜利的单元继续发送消息,失败的单元停止发送转入接受工作。 2、系统灵活性: 连接总线的单元没有类似地址的信息,在总线上添加新的单元时不需要改变原先的单元 3、速度快距离远: 4、具有错误检测、错误通知、错误恢复...
QGis二次开发 —— 2、第一个程序 - 加载栅格tif与矢量shp文件(附源码)
QGis二次开发 —— 2、第一个程序 - 加载栅格tif与矢量shp文件(附源码)
C++面试八股文
和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。
STM32 CAN通信详解
转:https://blog.youkuaiyun.com/优快云_Yoa/article/details/81384924 并结合自己项目上CAN的配置觉得该文章很好希望帮助想了解CAN的网友。首先是自己工程中自己的东西分享给大家,后面内筒是转载他人的优秀文档。 由于STM32中我使用的扩展标识符(ID)是29位(28~0),STM32的过滤器和掩码是32位分别映射到10~0、28~0、IDE、RTR、0,上;那么我们就可以根据这些内容建立自己的过滤和掩码。其中不建议使用CAN接收中的EXtID,因为掩码中为零.
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
STM32之CAN通信
23.1关于 CAN 23.1.1 CAN 电气特性与协议 控制器局域网(Controller Area Network,CAN),是由德国BOSCH(博世)公司开发,是目前国际上应用最为广泛的现场总线之一。其特点是可拓展性好,可承受大量数据的高速通信,高度稳定可靠,因此常应用于汽车电子领域、工业自动化、医疗设备等高要求环境。 CAN总线有两个ISO国际标准:ISO11519 和ISO11898。 ISO11519定义了通信速率为10~125Kbps的低速CAN通信标准,属于开环总线,传输速率为40Kbp
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
CAN通信知识梳理及在Stm32上的应用(HAL库)
CAN是控制器局域网络(Controller Area Network, CAN)的简称,1986年被德国研发和生产汽车电子产品著称的BOSCH公司所开发。CAN是国际标准化的串行通信协议,采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(处理or丢弃)。...
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
2281



被折叠的 条评论
为什么被折叠?



