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 */

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

相关推荐
爱喝纯牛奶的柠檬2 小时前
【已验证】STM32F103的MPU6050应用一(驱动篇)
stm32·单片机·嵌入式硬件
是翔仔呐2 小时前
第10章 串口通信USART全解:轮询/中断/DMA三种收发模式与上位机通信实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
17(无规则自律)2 小时前
深度剖析Linux Input子系统(1):宏观架构与核心原理
linux·嵌入式硬件
lingzhilab3 小时前
零知IDE——STM32驱动ICM20948九轴姿态角解算(上位机演示+数据导出)
stm32·单片机·嵌入式硬件
SUNNYSPY00111 小时前
65R135 -ASEMI超结MOS管TO-220封装
单片机
jacklood12 小时前
基于STM32的车载振动曲线摆件创意设计
stm32·单片机·嵌入式硬件
jomoly12 小时前
星闪NL002开发板测评+匆匆
单片机·嵌入式硬件
17(无规则自律)14 小时前
【Linux驱动实战】:标准的按键控制LED驱动写法
linux·驱动开发·嵌入式硬件
森利威尔电子-15 小时前
森利威尔SL3180替换LM5013 100V降压3.3V 5V 12V恒压芯片
单片机·嵌入式硬件·集成电路·芯片·电源芯片