STM32CubeMX CAN收发数据

news2024/9/20 18:41:38

目录

一、CAN总线

1. 差分信号

2. CAN收发器

3. CAN帧结构

4. CAN波特率设置

5. 标识符筛选

二、CubeMX配置

三、Keil代码


一、CAN总线

CAN(Controller Area Network,控制器局域网络)是一种用于车辆、工业自动化等领域的通信协议,由德国BOSCH公司开发。CAN总线通过两条差分信号线(CAN-H和CAN-L)进行数据传输,具有较强的抗干扰能力和高效的通信性能。

1. 差分信号

CAN总线的通信是通过CAN-H和CAN-L两条信号线之间的电位差来实现的。总线电平分为两种逻辑状态:

  • 显性电平:表示逻辑“0”,此时CAN-H电压约为3.5V,CAN-L电压约为1.5V。
  • 隐性电平:表示逻辑“1”,此时CAN-H和CAN-L电压均为约2.5V,差分电压近似为零。
2. CAN收发器

在本实验中,使用了SN65HVD230作为CAN收发器,其主要作用是将微控制器的TTL电平转换为CAN总线电平。CAN收发器的主要引脚包括:

  • D(发送):连接到微控制器的CAN_TX引脚。
  • R(接收):连接到微控制器的CAN_RX引脚。
  • CAN-H 和 CAN-L:连接到CAN总线。
3. CAN帧结构

CAN通信的帧结构主要分为以下几种类型:

  • 数据帧:携带实际数据的帧,由7个域组成,包括帧开始、仲裁域、控制域、数据域、CRC域、ACK域和帧结束。
  • 远程帧:用于请求发送具有相同识别符的数据帧。
  • 错误帧:当检测到总线错误时发送的帧,由错误标志和错误界定组成。
  • 过载帧:用于延迟下一帧的发送,通常在接收器还未准备好时发送。
4. CAN波特率设置

CAN波特率设置涉及到多个参数,包括同步段(SYNC_SEG)、位段1(BS1)、位段2(BS2)和同步跳转宽度(SJW)。波特率的计算公式为:

例如,在系统时钟为72MHz,APB1时钟为36MHz,Prescaler为9,BS1为4,BS2为3,SJW为1的情况下,CAN波特率计算如下:

5. 标识符筛选

在CAN通信中,接收节点根据帧的标识符(ID)来判断是否接收该帧。通过设置过滤器,接收器可以选择性地接收所需的数据帧,而忽略无关的帧。

二、CubeMX配置

确保cubemx最新版本,cubemx无法更新,退出使用管理员权限

打开调试

选择高速时钟

配置时钟树

配置LED引脚PD5

 配置CAN

接收中断配置

打开串口4 和 PD5LED 

生成工程

三、Keil代码

1.can发送数据

main.c

uint8_t TxData[8] = {0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x10};

自定义发送函数 

// 发送 CAN 消息函数
void CAN_SendMessage(uint32_t id, uint8_t *data, uint8_t len) {
    CAN_TxHeaderTypeDef TxHeader;  // 定义 CAN 发送头
    uint32_t TxMailbox;  // 邮箱标识

    TxHeader.DLC = len;                 // 数据长度,最大 8 字节
    TxHeader.StdId = id;                // 标准标识符
    TxHeader.IDE = CAN_ID_STD;          // 使用标准 ID
    TxHeader.RTR = CAN_RTR_DATA;        // 数据帧
    TxHeader.TransmitGlobalTime = DISABLE;  // 关闭全局时间戳

    // 发送 CAN 消息,使用 HAL 库提供的函数
    if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, data, &TxMailbox) != HAL_OK) {
        // 如果发送失败,调用错误处理函数
        Error_Handler();
    }
}

while循环中


		CAN_SendMessage(0x02,TxData,8);
		HAL_Delay(1000);
		CAN_SendMessage(0x01,TxData,8);

can.c中配置过滤器启动CAN外设和中断 并在CAN初始化调用函数

void CAN_Config(void)
{	
 
	CAN_FilterTypeDef  sFilterConfig;
 
  /*配置CAN过滤器*/
  sFilterConfig.FilterBank = 0;                     //过滤器0
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;              //32位ID
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;          //32位MASK
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;//过滤器0关联到FIFO0
  sFilterConfig.FilterActivation = ENABLE;          //激活滤波器0
  sFilterConfig.SlaveStartFilterBank = 14;
	
	
 if(HAL_CAN_ConfigFilter(&hcan,&sFilterConfig) != HAL_OK)//初始化过滤器
 {
  Error_Handler();
 }
 if(HAL_CAN_Start(&hcan) != HAL_OK)//打开can
 {
  Error_Handler();
 }
 if(HAL_CAN_ActivateNotification(&hcan,CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)//开启接受邮邮箱0挂起中断
 {
  Error_Handler();
 }
 
}

Can分析仪显示数据

 2.中断接收数据函数

void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) {
    CAN_RxHeaderTypeDef RxHeader;  // CAN 接收头
    uint8_t RxData[8];  // 数据缓存,最大 8 字节

    // 获取接收到的消息
    if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK) {
        // 如果接收失败,直接返回(避免执行后续无效操作)
        Error_Handler();
        return;
    }

    // 发送接收到的数据通过 UART
    if (HAL_UART_Transmit(&huart4, RxData, RxHeader.DLC, 0xFFFF) != HAL_OK) {
        // UART 传输失败的错误处理
        Error_Handler();
    }

    // 切换 GPIO 引脚状态,控制 LED 状态改变(指示接收到消息)
    HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_5);
}

发送

接收

 

例程: 

链接: https://pan.baidu.com/s/1s4_dWpP1but54HLcP7herg?pwd=sahk 提取码: sahk 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数分基础(05)中心极限定理、假设检验与AB测试简介

文章目录 1. 中心极限定理1.1 概念1.2 直观理解1.3 重要性 2. 示例2.1 数据集2.2 验证思路(1)获取一个样本均值(2)假设抽取1000次(3)增大样本容量 2.3 实现2.4 结果 2. 假设检验2.1 总体思路2.2 比较两种运…

环信高质量全球网络——70%丢包环境,消息100%送达,抗弱网能力大幅提升!

在当今数字化时代,稳定而高效的即时通讯已成为企业和个人不可或缺的工具。环信即时通讯(IM)云服务一直致力于为用户提供优质的通信体验。如今,环信IM通过自研传输协议,实现了在弱网环境下的卓越表现,确保消…

.NET 一款具备签名用于绕过防护的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

踩坑-pycharm-终端闪退

问题: pycharm打开终端,终端直接闪退,打开其他项目,没事 原因: 之前在其他项目下载了allure,不知道怎么终端的path改了 解决: 此处,终端路径修改为如下即可:

HTML+CSS+Query实现二级菜单

在网页设计中&#xff0c;导航菜单是非常重要的部分之一&#xff0c;尤其是具有二级下拉菜单的导航栏&#xff0c;可以提升用户体验。本文将通过HTML、CSS和jQuery实现一个具有二级菜单标题的导航栏&#xff0c;并详细讲解每一步的实现过程。 <!DOCTYPE html> <html …

[数据集][目标检测]街头摊贩识别检测数据集VOC+YOLO格式758张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;758 标注数量(xml文件个数)&#xff1a;758 标注数量(txt文件个数)&#xff1a;758 标注类别…

信捷 XD PLC 双精度浮点数的初始化及传输

在用信捷XDH PLC进行运动控制时&#xff0c;加减速时间是个64位的双精度的浮点数&#xff0c;那么如果不在人机界面写到PLC&#xff0c;PLC自身也是可以初始化的&#xff0c;比如0.005,怎么办呢。 用FLT指令把 整数出单精度浮点数&#xff0c;然后EDIV指令把两个单精度浮点数相…

2025第五届广州国际新能源汽车产业智能制造技术展览会

2025第五届广州国际新能源汽车产业智能制造技术展览会 展会时间&#xff1a;2025年11月20日-22日 展会地点&#xff1a;广州保利世贸博览馆(PWTC Expo) 主题&#xff1a;能源绿色化&#xff0c;制造低碳化 400多家参展商&#xff1b;20000多名观众&#xff1b;20000平方米展出…

mysql索引,事务,约束

MySQL事务 1.什么事务 用于保证数据的一致性,它是由一组相关的dml语句组成,该租的dml语句要么全部成功要么全部失败. 2.事务和锁 当执行事务操作时(dml),MySQL会在表上加锁,防止其它用户改表的数据,这对用户来说很重要 mysql 数据库控制台事务的几个重要操作(基本操作 tra…

鸿蒙开发—黑马云音乐之播放页面(下)

目录 1.用户随意控制播放进度 2.歌曲暂停和播放控制和歌曲上一首、下一首播放控制 3.歌曲列表 4.歌曲列表数据动态化和背景雾化 5.唱针效果 6.结语 1.用户随意控制播放进度 src/main/ets/services/AvPlayerManager.ets&#xff1a; // 让播放对象从某个时间点开始播放 …

本地大语言模型部署及应用

01 模型 2024-07-24&#xff0c;Meta 正式发布新一代开源大模型 Llama 3.1 系列&#xff0c;该模型共有三个版本&#xff1a; 8B70B405B meta评估了超过 150 个语言覆盖范围广的基准数据集。比较了 Llama 3.1 与竞争性模型在真实世界场景下的表现。实验评估表明&#xff0c;L…

动态住宅IP代理的搭建指南:实现高效网络访问

在互联网的复杂环境中&#xff0c;动态住宅IP代理逐渐成为提升网络隐私和绕过IP限制的热门选择。相比于数据中心代理IP&#xff0c;动态住宅IP代理具有更高的隐蔽性和真实性&#xff0c;能够有效模拟真实用户的网络行为。本文将详细介绍动态住宅IP代理的搭建方法&#xff0c;帮…

iPhone、微信二选一?苹果、腾讯官方回应

KlipC报道&#xff1a;9月2日&#xff0c;有消息称&#xff0c;腾讯和苹果正在就APPStore的抽成问题在不断交涉&#xff0c;如若谈崩有可能导致微信下架&#xff0c;iPhone一旦升级到 iOS 18.2 系统可能将无法使用微信。 对此&#xff0c;苹果中国区技术顾问表示&#xff0c;“…

Vue 2 与 Vue 3 中 keep-alive 组件的深入解析

更多内容前往个人网站&#xff1a;孔乙己大叔 在 Vue.js 的开发中&#xff0c;keep-alive 是一个非常重要的内置组件&#xff0c;它允许我们将组件状态或实例保持在内存中&#xff0c;避免重新渲染和重新创建组件&#xff0c;这对于需要频繁切换但内容较为复杂的组件场景非常有…

如何在银河麒麟中快速查询网卡固件及驱动信息

如何在银河麒麟中快速查询网卡固件及驱动信息 1、第一步&#xff1a;找到网卡名称2、第二步&#xff1a;查询固件和驱动信息3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在银河麒麟服务器操作系统中&#xff0c;如何查询网卡固件…

统一NLP和目标检测的DETR(一)——self attention、encoder、decoder

主流目标检测算法劣势 YOLO系列&#xff0c;它基于anchor来做&#xff0c;少不了要用MNS&#xff0c;导致速度相对较慢。 但今天介绍一款DETR&#xff0c;基于VIT的目标检测算法。 那么我们需要先深入过一遍VIT。 Vision transform 1、传统RNN网络的问题 单向&#xff1a;只…

vue3集成sql语句编辑器

使用的是codemirror 安装 pnpm add codemirror vue-codemirror --savepnpm add codemirror/lang-sqlpnpm add codemirror/theme-one-dark使用 <template><codemirror v-model"configSql" placeholder"Code goes here..." ref"codemirrorR…

热力图科普:数据可视化的利器

hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01; 日常闲扯 哎呀&#xff0c;第一天上完课&#xff0c;给俺的感觉是&#xff08;热和惊喜&#xff09;&#xff0c;热是真热&#xff0c;从出租屋走到教学楼给我整的汗流浃背…

十七、网络编程

文章目录 一、网络相关的概念二、InetAddresss类三、Socket3.1 基本介绍 四、TCP网络通信编程4.1 应用案例1(使用字节流)4.2 应用案例2(使用字节流)4.3 应用案例3(使用字符流)4.4 应用案例4&#xff08;TCPFileCopy&#xff09;4.5 netstat 指令4.6 TCP网络通讯不为人知的秘密 …

为啥一定要考HCIE安全?这4个理由你不得不看

大家都知道&#xff0c;网络安全越来越成为企业和个人关注的焦点。 随着网络攻击的日益复杂和频繁&#xff0c;对于具备高级网络安全技能的专业人才的需求也在不断增长。HCIE-Security认证&#xff0c;作为华为推出的顶级信息安全认证&#xff0c;正是满足这一需求的黄金标准。…