STM32 CUBE MX生成HAL库的串口中断

GPIO与UART 本文章立足于浅层应用的方法而非深入原理的理解,这两者满足的是不同的需求,但是之后可能会补足原理的学习。 GPIO(General Purpose Input/Output)是通用输入输出端口的简称,GPIO 端口(元器件上的一个引脚)可以输出高低电平或者读取外部输入电平,以此实现与外部的通讯。 (实际上,操作 GPIO 端口的函数修改了 GPIO 的硬件寄存器数据,硬件的状态根据硬件寄存器数据的改变而改变) 通常来说,GPIO 有三种状态:高电平、低电平、高阻态。在 STM32 中,首先需要对特定的引脚设置 阅读详情

今天尝试使用HAL库的串口中断,发现使用HAL库默认的中断服务函数异常的复杂和艰辛,只能进入一次中断而且会发生各种状况。所以尝试不用默认HAL库的中断服务函数编写方式。

  1. 配置好串口,使能中断
  2. 使用以下语句开启接受或发送中断
HAL_UART_Receive_IT(&huart1, Rxdata, 1);//接受数据中断
 HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)//传输数据中断

其中第一个参数是初始化串口时的通过结构体配置的变量地址,可自行修改。第二个参数是接受或发送缓存器,可自定 义数组。第三个参数是接受或发送几个字节而产生中断。

  1. 通过启动文件:starup_stm32f103xe.s找到相应的串口中断函数USART1_IRQHandler,通过寻找定义找到HAL库的中断服务函数并注释掉HAL_UART_IRQHandler(&huart1)。通过函数__HAL_UART_GET_FLAG()来判断相应的标志位是否为1。其中第一个参数为初始化串口时的通过结构体配置的变量地址,第二个参数为相应标志位,具体可查阅库函数里的注释。这里给出接受数据产生中断而挂起的标志位判断if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=0))。之后便可以通过DR寄存器来查看接受的数据:USART1->DR编写中断服务函数。
STM32+cubemx】0004 HAL开发:uart串口的轮询和中断使用 本节我们来学习异步串口uart的使用,包括轮询方式和中断方式。 本节我们使用轮询和中断两种方式,来实现计算机向单片机发送数据,单片机处理之后再将数据返回。 1)cubemx生成代码 首先还是在cubemx生成代码,选择器件、设置SYS(调试接口)、设置RCC(外部晶振时钟源)这几个步骤和前一节一样(也可以复制前面闪灯的工程,在上面修改)。 然后设置串口引脚,这里我们选择uart1,异步串口,选完后,已经使用的串口引脚PA9和PA10会变成绿色;然后选择开启串口全局中断: 之后,和上一节一 阅读详情

相关推荐

STM32CubeMX安装配置与HAL原理详解

硬件抽象层(HAL)是现代嵌入式开发中实现跨平台兼容与快速原型验证的核心范式,其通过面向对象的C语言封装屏蔽寄存器细节,统一外设操作接口。STM32CubeMX作为ST官方图形化配置工具,本质是HAL的声明式‘配置编译器’,将引脚分配、时钟树、外设初始化等硬件依赖逻辑转化为可复用代码。该工具深度耦合Java运行环境、Eclipse插件生态及在线固件仓,支撑从F1到H7全系列芯片的标准化开发流程。典型应用场景包括IoT节点串口调试、工业通信模块开发及RTOS集成项目,在确保代码健壮性的同时显著降低MCU底层

weixin_42594427的博客 436

STM32Cube串口中断只执行一次问题

2-使用中断的时候发现在HAL_UART_RxCpltCallback此函数内使用HAL_UART_Receive_IT重新开启中断,发现还是只能触发一次。重写void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函数。经测试无问题,并没在出现错包丢包问题,用的是定长17,如果是不定长的,需要一位一位接收,然后根据自定协议解包打包。1-使用轮询10ms超时,buf_len定长17,发现偶尔会错包导致丢失一个数据,所以想测试一下中断通信方式。

m0_46175974的博客 3837

STM32CubeIDE 利用自带HAL 串口收发

一、MX的配置 1.选择需要用的串口,模式Asynchronous,修改波特率为115200;其他值默认即可。 2.配置中断:2位抢占优先级,2位优先级;全局中断使能勾上。 另:最好设置一下不同外设单独C文件 二、案例1(以 0x0d 0x0a结尾的开源原子的做法) 2.1 <usart.c> uint8_t aRxBuffer[1]; ui...

zateper的博客 1万+

HAL使用后USART通信只能进入一次中断的问题

CubeMx生成的关于USART使用接收中断,接收数据后只能进入中断函数的一次的问题,是因为在CubeMx生成的代码中,当进入中断后就自动关闭USART的定时中断,如果想多次进入中断建议就使用DMA,或者在进入中断后重新开启接收中断。注意:该接收中断不能在中断回调函数里面开启(不知道是CubeMx的问题,反正就不能跟正点原子或者野火一样直接在中断回调函数:HAL_USRT_RxCpltCallback()里面重新开启。if(g_usart_rx_sta==1) //接收到了一个字节。

2401_83128918的博客 1278

两个单片机串口通信HAL代码&&为何HAL_UART_Receive_IT函数只能触发一次接收中断及对应解决办法

1、主机MCU:STM32F103RCT6;从机MCU:STM32F103ZET62、两个MCU分贝打开串口1和串口2。串口1打印调试信息,串口2用来跨平台通信。

weixin_48830688的博客 3136

STM32CubeMXHAL中断方式UART串口通信

  HAL下,利用STM32CubeMX生成源代码,确实比较简单,比用标准简单很多。 现在总结自己学习的过程: 硬件平台:正点原子探索者(STM32F407ZET6) 1、配置STM32CubeMX (1)打开STM32CubeMX,选择相应的芯片型号,并配置调试信息为:Serial Wire   (2)配置RCC主频,选择外部高速晶振(HSE):Crystal/Cerami...

qq_41799583的博客 2776

STM32 LD3320语音识别模块SPI驱动 (STM32CUBE MX HAL

LD3320语音识别模块驱动: 一、硬件连接 主控芯片:STM32F103VCT6 PB12-----------LD3320_IRQ PB13-----------LD3320_WR PB15-----------LD3320_RST PA4-------------LD3320_CS PA5-------------LD3320_SCK PA6-------------LD3320_MISO PA7-------------LD3320_MOSI 二、使用STM32CUBEMX创建工程 引脚配置: SP

weixin_56565733的博客 8005

STM32H7——HAL的DMA双缓冲配置使用

基于STM32H7 USART_DMA双缓冲配置

weixin_45565013的博客 6916

STM32 HAL详解

STM32 HAL整体总结 STM32 之二 HAL详解 及 手动移植 本篇博客是对以上参考资源的一个二次总结与整理。 1. HAL文件结构 对于开发人员而言,首先要清楚 HAL 的文件结构。 根据文件类型可认为以下两大类: 文件: stm32f2xx_hal_ppp.c/.h // 主要的外设或者模块的驱动源文件,包含了该外设的通用API stm32f2xx_hal_ppp...

la_fe_的博客 2万+

STM32HAL 总线舵机驱动的编写

本次所用的舵机为串行总线舵机,采用异步串行总线通讯方式,理论多至 253 个机器人舵机可以通过总线组 成链型,一条总线上允许挂载多个舵机,且每个舵机均有一个唯一ID(0~253),通过 UART 异步串行接口统一控制。原理图如上图所示,舵机用程序代码对UART(本次示例中使用USART3)异步串口进行时序控制,实现半双工异步串行总线通讯,即半双工的主从问答式通信,通信波特率为115200bps。串口1模式配置为同步通讯,波特率改为115200bps,数据宽度8位,检验None,停止位1位。

weixin_43002939的博客 5140

STM32CubeMX串口空闲中断+DMA接收

一、实验说明 实验平台:STM32F103C8T6 实验内容:使用串口一空闲中断结合DMA 完成不定长数据接收 STM32串口接收数据的方式 1、轮询接收   所谓轮询,就是在主函数中判断接收完成的标志位。举个不太恰当例子,就比如,此时你正在考试作弊,手机藏在兜里,你的队友再给你发答案,但是你的手机静音,所以你不得不写一会题看一会手机,有的时候答案已经发来了但是你此时在假装写,没有看,导致你没能...

FlyDremever 1万+

STM32CubeIDE(CUBE-MX hal)----串口通信

本文讲述了利用HAL进行串口数据的发送和接收提示:以下是本篇文章正文内容,下面案例可供参考。

xddwg521125的博客 5129

STM32CubeMX-HAL-UART串口接收中断回调函数只能收发一次原因及解决方案

STM32CubeMX-HAL-UART串口接收中断回调函数

weixin_51489957的博客 6089

STM32 HAL 串口接收中断(不开DMA)

网上很多的STM32 HAL 中断都需要开DMA,这里提供只开中断的方案

cusichidouren的博客 4469

解决STM32G071之HAL:UASRT使用DMA方式只进入中断一次

这里我使能的是串口空闲中断。使用CubeMX配置USART时,需要注意。这两处需要设置DISABLE.

qq_25727979的博客 1186

HAL(STM32CubeMX)——USART串口配置学习(中断接收/STM32G431RBT6)

UART与USART介绍: USART(universal synchronous asynchronous receiver and transmitte): 通用同步异步收发器 USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。 UART(universal asynchronous receiver and transmitter): 通用异步收发器 异步串行通信口(UART)就是我们在嵌入式中常说的串口,它还是一种通用的数据通信议。 区别: USART是指单片机

贾saisai的博客 1万+

STM32串口中断接收HAL超详解析

HAL实现将接收逻辑全写在中断服务函数里面而不重定义回调函数,并且不会不进中断

m0_58644391的博客 1万+

详解STM32CubeIDE 中 HAL串口中断接收函数 HAL_UART_Receive_IT

MX串口配置方法见:CubeIDE 利用自带HAL 串口收发 一、代码自动生成以后的项目及代码结构: main.c中,调用了串口初始化 串口初始化函数赋值了串口的参数 相当于底层的初始化,配置引脚、并开启中断。 至此串口1配置完毕 二、文件stm32f1xx_hal_uart.c内的秘密 2.1初始化 1.usart.c中,MX_USART1_U...

zateper的博客 6万+
上一篇: STM32通过UART使用printf打印数据
下一篇: STM32的串口通讯协议
Mapleaaaa
博客等级 码龄7年 1粉丝 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值