STM32CubeMX CAN收发数据

目录

一、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;          // 使用标准 IDTxHeader.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;                     //过滤器0sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;sFilterConfig.FilterIdHigh = 0x0000;              //32位IDsFilterConfig.FilterIdLow = 0x0000;sFilterConfig.FilterMaskIdHigh = 0x0000;          //32位MASKsFilterConfig.FilterMaskIdLow = 0x0000;sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;//过滤器0关联到FIFO0sFilterConfig.FilterActivation = ENABLE;          //激活滤波器0sFilterConfig.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;}// 发送接收到的数据通过 UARTif (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.xdnf.cn/news/1522962.html

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

相关文章

springboot博客系统

基于springbootvue实现的博客系统 (源码L文ppt)4-031 4 系统设计 博客系统的整体结构设计主要分为两大部分:管理员和博主。他们的权限不同,于是操作功能也有所不同。整体结构设计如图4-2所示。 图4-2 系统结构图 4.3 数据库设…

Unity(2022.3.41LTS) - 角色控制器和3D刚体

目录 一. 角色控制 二. 3D刚体 一. 角色控制 名称:功能:坡度限制将碰撞器限制为仅爬升比指示值更陡峭(以度为单位)的斜坡。步长偏移只有当楼梯离地面比指示值更近时,角色才会爬上楼梯。此值不应大于 Character Contr…

《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

摘要 本论文考虑了通用视觉对象计数问题,目标是开发一个计算模型,用于计算任意语义类别的对象数量,使用任意数量的“样本”(即可能为零样本或少样本计数)。作者提出了一个新颖的基于Transformer的架构,称为…

shell 学习笔记:变量、字符串、注释

目录 1. 变量 1.1 定义使用变量 1.2 变量命名规则 1.3 只读变量 1.4 删除变量 1.5 变量类型 1.5.1 字符串变量 1.5.2 整数变量 1.5.3 数组变量 1.5.3.1 整数索引数组 1.5.3.2 关联数组 1.4 环境变量 1.5 特殊变量 2. 字符串 2.1 单引号字符串 2.2 双引…

【32项目】基于stm32f103c8t6WIFI远程监控智慧农业大棚(含完整代码)

目录 前言 设计背景 设计原理 所需材料 JW01二氧化碳传感器介绍 YL-69土壤湿度传感器介绍 PCB及原理图 部分代码(完整代码见文章末尾) 前言 随着农业现代化的发展,智慧农业的概念越来越受到重视。智慧农业利用物联网、大数据、人工智…

计算机网络 数据链路层2

ALOHA:想发就发 CSMA 载波监听多路访问协议 CS:载波监听,在发送数据之前检测总线上是否有其他计算机在发送数据 1-坚持CSMA:主机想发送消息,需要监听信道; 信道空闲则直接传输信息; 信道忙碌则一直监听,直…

【JavaWeb】JDBCDruidTomcat入门使用

本章使用技术版本: Tomcatv10.1.25 关于javaweb相关的其他技术,比如tomcat和maven,在我的主页记录了笔记,ajax我用的是本地笔记以后再考虑上传,前端三板斧我用的菜鸟教程文档 JDBC 初识 JDBC概念 JDBC 就是使用Jav…

【深度学习 transformer】使用pytorch 训练transformer 模型,hugginface 来啦

Hugging Face是一个致力于开源自然语言处理(NLP)和机器学习项目的社区。它由几个关键组件组成: Transformers:这是一个基于PyTorch的库,提供了各种预训练的NLP模型,如BERT、GPT、RoBERTa、DistilBERT等。它…

SEO之网站结构优化(十四-内部链接及权重分配3)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客:阿幸SEO~探索搜索排名之道 7、锚文字分布及变化 前面…

WebGIS与WebGL是什么,两者之间的关系?

WebGL和 WebGlS 都是 web 技术领域的重要内容,特别是这几年webgis开发领域,和webgl打交道是必然的,常见的WebGL开发的基础上,比如二维的Leaflet、三维的Cesium也都是热门。 WebGL是一种基于 HTML5 Canvas 元素的 JavaScriptAPI&a…

RLHF(带有人类反馈的强化学习)初探

我的目标是,在决策游戏上学习某人风格,可以让人对战“带有某人风格”的AI,比如你可以在这里对战“sky风格的AI”,这样的效果。 我最开始受到的启发来源于xbox的广告《爸爸的幽灵车》,已故人在游戏中留下的速度记录的固定轨迹。 …

IOS17.0安装巨魔:TrollRestore巨魔发布

👻 TrollRestore 17.0 巨魔发布 15.0 - 16.7 RC(20H18)和17.0。 官网:https://trollrestore.com/ 下载:https://pan.metanetdisk.com/IOS/%E5%B7%A8%E9%AD%94%E7%8E%A9%E5%AE%B6/TrollRestore.com 使用:ht…

【数字人】Facevid2vid:用于视频会议的一次性自由视图说话头合成

论文:https://arxiv.org/pdf/2011.15126 github:GitHub - zhanglonghao1992/One-Shot_Free-View_Neural_Talking_Head_Synthesis: Pytorch implementation of paper "One-Shot Free-View Neural Talking-Head Synthesis for Video Conferencing" 一种新颖…

缓存分布式一致性问题

缓存一致性问题发生的原因,是在更新数据时数据库和缓存数据的不一致。我们要做到保证缓存的最终一致性。如果数据需要强一致性建议直接查询数据库。 双写模式 双写模式为先写数据库,在写缓存。 进来两个请求,先执行“请求1”的操作写入数据…

装WebVideoCreator记录

背景,需要在docker容器内配置WebVideoCreator环境,配置npm、node.js https://github.com/Vinlic/WebVideoCreatorWebVideoCreator地址:https://github.com/Vinlic/WebVideoCreator 配置环境,使用这个教程: linux下安…

Spring Boot-自定义banner

在 Spring Boot 应用中,你可以自定义启动时显示的 banner。这些 banner 可以包括图形、文字或者其他形式的标识。如图所示: 1. 使用 banner.txt 文件 默认情况下,Spring Boot 使用项目的 banner.txt 文件中的内容作为启动时的 banner。你可以…

文献阅读:对区域间皮层投射神经元命运多样性的时间控制

文献介绍 文献题目: 对区域间皮层投射神经元命运多样性的时间控制 研究团队: Denis Jabaudon(瑞士日内瓦大学) 发表时间: 2021-11-09 发表期刊: Nature 影响因子: 49.9(2021年&am…

关于电力系统的几个疑问

非电力专业人员对于电力中的某些知识不能够形成系统的认识,接下有空也有补充下这方面知识,吹水时候才有水可以吹,嘻嘻!这里舍不得删掉下边chatgpt这几张图片,暂时先保留着。因为一直有个因为在电网里边用发电端和用电端…

EmguCV学习笔记 C# 9.3 移动检测类

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

爬取图片保存为pdf

本文章想借着爬虫给大家介绍一下图片转pdf,有需要的友友们可以看看参考参考,有帮助到友友的可以收藏+关注。下面以爬取初中7年级数学上册为例给大家演示一下。网址是这个 https://mp.weixin.qq.com/s?__bizMzAxOTE4NjI1Mw&mid2650214000&idx…