stm32串口hal库

背景

之前使用的都是标准库,包括国产芯片,都是标准库

现在想使用IAP升级:顺便hal库研究一下串口,顺便做笔记;

思路结构

标准库中,使用DMA加串口空闲中断,可以实现不定长接收;

所以使用如上方式;

hal库应用

无论是空闲中断,还是DMA中断,都会调用如下:

HAL_UARTEx_RxEventCallback

读取空闲标记位、和dma传输完成,都不能正常使用,反倒是不需要正常使用;(标准库必须有)

以为标记,会被库提前清除

正常的配置cubemx

省略.....

初始化的时候增加

cpp 复制代码
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)"test_init", sizeof("test_init"));//测试初始化是否正常
HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)rx_buff, usart_rx_len);

接收回调定义如下

cpp 复制代码
/* USER CODE BEGIN 1 */

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
		if(huart->Instance==USART1)
		{
				//if(__HAL_UART_GET_IT_SOURCE(huart, UART_IT_IDLE)/*||__HAL_DMA_GET_IT_SOURCE(huart->hdmarx, DMA_IT_TC)*/)
				{

						HAL_UARTEx_ReceiveToIdle_DMA(huart, (uint8_t *)rx_buff, usart_rx_len);
						HAL_UART_Transmit_DMA(huart, (uint8_t *)rx_buff, usart_rx_len);
				}
		}
}

/* USER CODE END 1 */

这样就完成了不定长接收的简单用例;

相关推荐
老当益壮梁奶奶5 小时前
51单片机DS18B20温度传感器详解:单总线时序与C51驱动实现
笔记·stm32·单片机·嵌入式硬件·51单片机
Horn Still Sounds5 小时前
ARM嵌入式基础|内核、寄存器、架构、存储、汇编移位全面梳理
arm开发·单片机·嵌入式硬件·硬件架构
星栖与芯5 小时前
LiteOS-M 切换汇编逐行图解(2):指令·异常机制·全景表
stm32·单片机·嵌入式硬件·harmonyos·鸿蒙系统
Brilliantwxx7 小时前
【STM32】 I2C阻塞通信实战与HAL源码(教程篇)
stm32
从零开始的嵌入式之旅7 小时前
day44
arm开发·经验分享·笔记·嵌入式硬件
硬禾科技8 小时前
连接世界的工程哲学
嵌入式硬件·测试工具·自动化·硬件工程
深圳市青牛科技实业有限公司 小芋圆8 小时前
GC1808:高性能、低成本的立体声音频ADC芯片
人工智能·嵌入式硬件·无人机·太阳能逆变器
fhq_fn_jgd8 小时前
51单片机(串口通信)
单片机·嵌入式硬件
深圳市元恩微科技开发有限公司9 小时前
兆讯恒达(北京兆讯)MH2457 系列 国产屏驱 MCU
单片机
沸速存储9 小时前
AI 机器人靠哪些内存与存储驱动整机运行?
服务器·科技·嵌入式硬件·电脑