HAL库——CAN通信的中断接收

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

一:CAN协议基础

CAN:Controller Area Network,控制器局域网络。这方面的参考资料很多,不详细写了。说几个在开发过程的特点:

  • CAN总线上所有连接节点并没有地址的概念,通过发送数据中的标识符ID进行区分,多个单元同时发送消息时也通过标识符的优先级来仲裁优先发送方。
  • CAN总线的信号是通过两根信号线之间的电压差值来确定信号类型,显性电平对应逻辑0,隐形电平对应逻辑1。(这部分都是由硬件电路实现的)
  • CAN协议包括数据帧、遥控帧、错误帧、过载帧、间隔帧。重点关注数据帧,包括:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。
  • CAN通信是一种半双工、异步通信。       
                                                    

CAN的位时序,在手册上看到的解释如下:

“位时序逻辑将监视串行总线,执行采样并调整采样点,在调整采样点时,需要在起始位边沿进行同步并后续的边沿进行再同步” 

然而,CAN通信并不是同步通信,一开始看到同步的时候就有点不理解了。后来想了想,这里的同步说的是在进行信号的采样时,保证在该开始采样的位置启动采样,在结束位置完成采样,不会因为数据量过多,采样时出现相位偏移的问题。

位时序和CAN通信的波特率是相关联的,所以这部分是必须要理解的,主要有一下几个概念:

  • 位速率:发送单元在非同步情况下每秒钟发送的位数
  • <
基于CUBEMXHALcan通信实操代码(非理论) 接收这里有两种不同方式的编写方式,第一种是先存放数据信息,再区分ID存放到相应结构体中去;第二种是先根据ID区分,再存放数据到结构体中。两种方式都可以,我个人更倾向于使用第二种方式获取数据,更符合逻辑些。以上就是can的全部代码,有问题可以评论或者私聊我,找到错误也可以说出来我改正。 阅读详情

相关推荐

STM32Cube学习笔记-CAN通讯调试

今天要讨论的是使用STM32Cube MX配置CAN通讯。既然能见到这篇文章,说明您对CAN通讯已经有了很多的了解,而且目前正在使用这个东西,并且遇到了一些问题,就是不能通讯的问题。在使用STM32Cube调试CAN的时候我也遇到了很多的问题,这些问题都被解决了,今天就来聊一聊如何使用STM32Cube配置CAN通讯。CAN的基本原理自不必说,有不懂得地方可以直接百度。 硬件平台:野火野火STM32F429挑战者开发板,周立功USBCAN调试盒;软件:STM32Cube MX、CAN Te...

qq_25207883的博客 5472

STM32CAN---中断管理浅析

1 前言 bxCAN占用4个专用的中断向量。通过设置CAN中断允许寄存器(CAN_IER),每个中断源都可以单独允许和禁用。 图1 从图1可以看出,最右边共四个中断中断是可以通过CAN_IER来屏蔽或允许的。 2 CAN中断允许寄存器 (CAN_IER) 地址偏移量: 0x14 复位值: 0x0000 0000 图2 位31:18 保留位,硬件强制为0 ...

管子(zero)的杂乱空间 2466

STM32 HALCAN通信:轮询发送与中断接收的实战配置指南

在嵌入式系统开发中,控制器局域网(CAN)总线因其高可靠性和实时性,广泛应用于汽车电子、工业控制等领域的多节点通信。其工作原理基于差分信号和仲裁机制,确保了多主节点下的无冲突数据传输。对于资源受限的微控制器(如STM32),合理利用其硬件外设和中断系统是实现高效、稳定通信的关键技术价值。本文聚焦于STM32 HAL环境下,结合**轮询发送**与**中断接收**的混合模式,详细解析了从CubeMX工程配置、过滤器设置到核心代码实现的完整流程。这种模式平衡了发送的确定性与接收的实时性,适用于数据采集、设备监控

weixin_29172201的博客 241

HAL_CAN_RxFifo0MsgPendingCallback回调函数的理解

在看别人写的代码的时候经常有看到类似“HAL_CAN_RxFifo0MsgPendingCallback”的回调函数,但搞不清其的作用, 其实回调函数作用很简单,是在中断满足了某种条件就会触发的函数 拿上述的函数举例,它是can的回调函数,在中断HAL_CAN_IRQHandler中,当USE_HAL_CAN_REGISTER_CALLBACKS != 1时就会触发的回调函数, 使用回调函数的优势,个人理解:就是使用了面向对象的编程思想,避免代码太乱,不好维护 ...

FancyYao的博客 5585

CAN总线通信应用

CAN总线通讯

qq_41742056的博客 1511

STM32 CAN 函数

CAN函数看似很多,但同时用到的就几个。

17208955的博客 2695

STM32F103ZET6 HAL下的CAN通信回环与中断接收实践

STM32F103ZET6是ST公司推出的一款高性能的ARM Cortex-M3微控制器,广泛应用于各种嵌入式系统中。这款微控制器拥有丰富的外设,例如ADC、DAC、UART、SPI、I2C、CAN等,使其能够处理各种复杂的任务。硬件抽象层(HAL是ST官方为简化开发过程、提高软件可移植性而设计的一套函数。HAL提供了一套简单的编程接口,使得开发者无需深入理解硬件细节,也能高效地进行应用程序的开发。

weixin_42298254的博客 1522

STM32 HAL CAN双机通信接收无法进入中断中断没有反应的解决方法

HALCAN双机通信中断接收失败

QQ1352985665的博客 6400

【补充:CAN通信的下位机-STM32cubeIDE-hal+STMF1xx+数据发送和接收+中断接收方式+基础样例3】

从第一篇F1和F4上采用轮询的方式调试can,【CAN通信的下位机-STM32cubeIDE-hal+STMF1xx和STMF4xx+数据发送和接收+轮询接收方式+基础样例(1)】到第二篇F4上采用中断方式,【CAN通信的下位机-STM32cubeIDE-hal+STMF4xx+数据发送和接收+中断接收方式+基础样例(2)】F1上采用中断方式接收,已经过去两个多月,一直没能解决。这次请到ST原厂大佬,现场帮忙调试,只能说不愧是原厂大佬吧。

qq_22146161的博客 1462

CAN通信的下位机-STM32cubeIDE-hal+STMF4xx+数据发送和接收+中断接收方式+基础样例(2)】

本次实验我们继续上一篇,进行can下位机相关实验,我一直在尝试使用STM32F1xx进行can中断接收,但是一直未能成功,但是在STM32F4xx就成功了,这就很奇怪,多次尝试,一直也没能成功,看起来是hal有问题,具体问题我会在下面说,这里也会说在STM32F4上成功的样例我尽我所能,尝试所有可能,如今也能调通,我虽然失败了,但是这样情况,应该不是自己能力问题,而没想到。不过确实没显得F1竟然调不通,这块后续再说吧,F4毕竟通了。

qq_22146161的博客 1847

STM32F407VET6 CAN通信保姆级教程:CubeMX配置+中断接收+数据收发实战(避坑HAL那些事儿)

本文提供STM32F407VET6 CAN通信的完整解决方案,从CubeMX配置到中断处理的详细步骤。涵盖波特率计算、HAL初始化陷阱、数据收发实现及常见问题排查,特别针对HAL中的关键配置进行深度解析,帮助开发者快速掌握CAN通信技术。

weixin_30681121的博客 518

CAN通信避坑指南:STM32 HAL滤波器配置与中断接收的那些细节

本文深入解析STM32 HALCAN通信的滤波器配置与中断接收细节,针对工业控制、汽车电子等场景中的常见问题提供解决方案。重点探讨CAN滤波器的工作原理、配置陷阱及中断接收的稳健性设计,帮助开发者避免通信故障,提升系统可靠性。

weixin_42524703的博客 144

STM32 基于HALCAN配置

此次测试是基于正点原子STM32精英版,芯片为STM32F103ZET6 基于HAL的配置 预分频后为单位时间。Time for one bit 为时间段1和时间段2再加单位时间。时间段1和时间段2为单位时间的整数倍。在上图中为4+4+1倍,即9倍。图片中配置为2000ns,即波特率为500KHz。 若是想要中断接收数据,还需要打开中断。完成后生成代码即可 CAN过滤器 过滤器是需要自己配置的,而且不配置过滤器CAN不能正常接收和发送。 HAL_StatusTypeDef CAN_Filter_Ini

weixin_45662778的博客 8878

告别轮询:用STM32CubeMXHALSTM32F407的CAN通信加上中断接收

本文详细介绍了如何利用STM32CubeMXHALSTM32F407实现CAN中断接收,从轮询方式升级为事件驱动模式。通过配置中断参数、优化回调函数及错误处理,显著提升系统实时性和CPU利用率,适用于工业控制等高要求场景。

weixin_34088048的博客 264

告别轮询:用STM32CubeMX+HALSTM32F407的CAN通信轻松添加中断接收

本文详细介绍了如何使用STM32CubeMXHALSTM32F407实现CAN通信中断接收,显著提升嵌入式系统的实时性和效率。通过配置CAN中断机制、实现回调函数、优化发送流程及错误处理,开发者可以轻松从轮询方式过渡到高效的事件驱动编程,适用于工业控制等高实时性应用场景。

weixin_31682031的博客 341

STM32F4 CAN中断接收实现指南

STM32F4系列微控制器是STMicroelectronics(意法半导体)推出的高性能ARM Cortex-M4微控制器,具备先进的处理能力和丰富的外设接口,适用于要求高性能和复杂处理的嵌入式应用。本章我们将深入探讨STM32F4的架构、核心特性和开发环境,为后续的CAN总线学习和应用打下坚实的基础。通过本章的学习,读者应该对STM32F4微控制器有了初步的了解,包括它的核心架构、关键特性和开发环境。

weixin_35755562的博客 865

CAN通信的下位机-STM32cubeIDE-hal+STMF1xx和STMF4xx+数据发送和接收+轮询接收方式+基础样例(1)】

我总是喜欢以自己的方式,将所学的东西再说一遍,另外看网上的资料,虽然有给代码的,但是一般都不完整,实验的时候,问题一堆,所以个人写总结的时候,习惯性给出完成工程代码,这样也让我养成了自己先做测试实验,这样成功后,做好了以后自己也有底,要不然不通,你很难找到问题原因,所以参照我做过的实验,都请注意下,实验环境,和一些代码步骤,因为环境不一样,最后效果可能就是不出来。本次实验是用轮询接收的方式,下一篇会讲述中断的方式,另外在F1上使用中断方式的时候,遇到点问题,这点在看中断的时候,请注意~~!。

qq_22146161的博客 1890

【免费下载】 STM32F4 HAL CAN 通信例程:M3508 电机控制

STM32F4 HAL CAN 通信例程:M3508 电机控制 【下载地址】STM32F4HALCAN通信例程M3508电机控制 STM32F4 HAL CAN 通信例程:M3508 电机控制本仓提供了一个基于 STM32F4 平台的 HAL CAN 通信例程,主要用于控制大疆 M3508 电机 ...

gitblog_09730的博客 1495

hal+STM32实现CAN的收发通信

首先使用id 111 122发送数据,都没有收到回复,id改为123发送之后,收到了STM32回复给我的数据,又使用id 345发送也是没有回复,再次使用id 456发送后收到了回复。我使用的STM32F407有两个can can1对应的过滤器有0-13 can对应的是14-27,每个can可以设置最多十四个过滤器。can接收可以设置过滤器来进行筛选,根据参数的不同有不同的作用,需要详细了解可以查看相关的博客,这里只举例一种常用的方式。打开中断,发送中断根据需求可用可不用,接收中断必须使能。

a234abr的博客 1560
上一篇: HAL库——写在学习之前
下一篇: HAL库——UART的DMA接收
jcsm__
博客等级 码龄9年 124粉丝 51原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值