stm32 can通信发送解释

CAN总线发送数据 TransmitMailbox = CAN_Transmit(CAN1, &TxMessage);//发送数据 while((CAN_TransmitStatus(CAN1,TransmitMailbox))!=CANTXOK);//等待数据发送完成 uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessag... 阅读详情
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失败.
}

CAN---通讯实验 一、CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,由德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,它具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐... 阅读详情

相关推荐

深入探究STM32H743 FDCAN的Message RAM

STM32H743 FDCAN的Message RAM研究

gzggyg 2281

STM32之CAN---发送管理分析

1 CAN发送邮箱 STM32共有三个CAN发送邮箱,在检测到总线空闲时交发送,但需要注意的是,有可能会发送失败,有可能因为仲裁失败从而导致失败,也有可能是其它错误,原则上bxCAN将自动重发,但bxCAN也可以配置不自动重发。正因为如此,发送邮箱中有可能同时存在多个需要发送的报文,一旦出现这种情况,那么发送邮箱中的多个报文又将是谁先发送谁后发送呢?有两种模式:ID模式和FIFO模式。ID模式由...

管子(zero)的杂乱空间 4403

STM32CubeMX 配置CAN通信 HAL库

/标识符屏蔽位模式中标识符寄存器,配置ID//标识符屏蔽位模式中屏蔽寄存器//标识符列表模式中为2个标识符寄存器,配置ID例如:屏蔽位寄存器的bit15=1,标识符寄存器的bit15=0,那么接受的Message里面的标识符的bit15必须为0才可能被硬件接受。如果屏蔽位寄存器的bit15=0,Message里面的标识符的bit15无论为什么值,bit15都能匹配通过。32位屏蔽位模式下:1个过滤器。FR2指定需要关心哪些位,FR1指定这些位的标准值。

m0_61973119的博客 6433

STM32的CAN通信的收发库函数解读

当需要使用CAN发送报文时,先定义一个上面发送类型的结构体,然后把报文的内容按成员赋值到该结构体中,最后调用库函数CAN_Transmit把这些内容写入到发送邮箱即可把报文发送出去。

m0_69251699的博客 5815

STM32进阶学习(6)-通信协议之CAN详解

CAN通信是一种基于CAN(Controller Area Network)总线的通信协议。CAN总线是一种高速、可靠的串行总线,主要用于实时控制系统中的数据传输。CAN通信的特点包括:高可靠性:CAN总线采用差分信号传输,具有较强的抗干扰能力,能够在较长距离上进行可靠的数据传输。实时性:CAN总线支持多帧并发传输,数据传输速度快,能够满足实时控制系统的要求。灵活性:CAN总线支持多主机和多节点的连接,能够方便地扩展和改变系统结构。低成本:CAN总线的硬件成本相对较低,易于实现和维护。

qq_53092944的博客 7087

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.

坚韧与专注 2646

CAN通信的用户层设计

在汽车电子和工业领域里,经常会使用CAN总线方式来进行通信,CAN总线速率高,采用差分通信方式,因此抗干扰性强,常规走线可达十米以上。那么 CAN协议底层有阻塞和唤醒模式,且有冗余校验和错误帧识别,因此可靠性极高。不同于modbus总线使用485作为通信方式,CAN总线没有主从机之分,总线上的设备均可不定时广播消息,主控制器只需根据帧ID接受相应的有用帧而舍弃其他帧。 现在越来越多的主控制芯片都会集成1到2个CAN控制器,PLC厂商也会提供CAN拓展模块以支持CAN通信(此处不得不吐槽PLC

shizhibuyi1234的博客 4610

STM32Cube高效开发教程<基础篇>(十六)----CAN总线通信

一、 CAN总线结构和传输协议声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。本专栏博客参考《STM32Cube高效开发教程(基础篇)》,有意向的读者可以购买正版书籍辅助学习,本书籍由王维波老师、鄢志丹老师、王钊老师倾力打造,书籍内容干货满满。一、 CAN总线结构和传输协议CAN是控制器区域网络(Controller Area Network)的缩写。CAN总线是一种适用于工业设备的高性能总线网络。在本博客中,会介绍CAN总线通信协议,CAN的HAL驱动程序。

我的博客 390

tm4c1290ncpdtTI芯片,CAN通信实验

CAN通信相关代码

weixin_58061338的博客 2076

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都满后还接收到数据就会触发中断)

weixin_43564241的博客 2万+

ETL数据集成案例

一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。

runqu的博客 948

stm32f105vct6例程_stm32f105例程 CAN500K USART_LED

/*CAN1USART1CAN波特率、收发器 配置见CAN.hstm32f10x.h中修改了外部晶振值8MHz*//* Includes ------------------------------------------------------------------*/#include "stm32f10x.h"#include "stm32f10x_rcc.h"#include "stm32...

weixin_31476015的博客 1544

微弱电流检测放大器PCB布线布局设计

微弱电流检测放大器PCB布线布局设计的注意事项,保护环的概念和相关设计。

ydgd118的博客 1万+

can总线分析仪与stm32的收发操作

can分析仪与stm32的简单收发操作

zuohaoshi的博客 1032

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 45

Photoscan+Smart3D+CC组合建模实战:如何用三款工具打造高精度实景模型

本文详细介绍了如何整合Photoscan、Smart3D和ContextCapture三款软件,构建高效高精度的实景三维建模工作流。通过利用Photoscan稳健的空三解算、Smart3D精准的刺点优化,以及ContextCapture强大的最终建模能力,该方案能有效应对复杂地形与海量数据,显著提升模型质量与生产效率,适用于测绘、文化遗产数字化等专业领域。

weixin_29230649的博客 104

CAN总线

----------------------------------------------------------------------显性电平比隐形电平优先级要高,下面要用---------------------------------------------它的长度为1tq,tq就相当于一个时间单位,我们可以规定它的大小,一般tq=1us.------------------------因为贫穷,莫得两块板子,所以只能用环回模式了------------------------------

zpx20的博客 974

Sublime Text4代码配色自定义方案

关于Sublime Text对于我的使用体验,只能说内置的代码主题真的都太low了,一点都不好看。所以接下来我分享一下我自定义代码配色。当然,大家也可以通过我给的中文翻译注释来自定义自己喜欢的颜色。废话不多说,直接上代码直接将代码复制粘贴到:Preferences > Customize Color Scheme 即可。},"globals":"foreground": "var(white)", // 前景色。

追求细节,成就完美 6026

【STM】CAN通信

CAN协议特点: 1、多主控制:   所有单元都可以发送消息,两个以上单元同时发消息时,根据标识符(ID)决定优先级。两个以上单元同时发送消息的时候,对各消息的ID逐位比较,胜利的单元继续发送消息,失败的单元停止发送转入接受工作。 2、系统灵活性:   连接总线的单元没有类似地址的信息,在总线上添加新的单元时不需要改变原先的单元 3、速度快距离远: 4、具有错误检测、错误通知、错误恢复...

weixin_30550081的博客 311

QGis二次开发 —— 2、第一个程序 - 加载栅格tif与矢量shp文件(附源码)

QGis二次开发 —— 2、第一个程序 - 加载栅格tif与矢量shp文件(附源码)

1100

C++面试八股文

和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。

qq_46676829的博客 905

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,因为掩码中为零.

sgh69的博客 1万+

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

韦东山嵌入式专栏 5万+

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丢弃)。...

冬瓜的博客 5万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: SAE J1939
下一篇: 浮点数与4个字节的转换
oshan2012
博客等级 码龄15年 300粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oshan2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值