STM32 HAL库串口不定字长接收(滚动数组接收)

本文详细介绍了如何使用STM32的HAL库来处理串口接收不定字长的数据。通过滚动数组的方法,有效地解决了串口接收数据长度不固定的问题,确保了数据的完整性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//Cube串口中断自动生成代码部分不粘贴了。

//博主使用串口2.

//自定义一个结构体:

#define  CmdLength  1024
static USART2_Rxbuffer USART2_Rx = {0};
static uint8_t Head_flag = FALSE;

typedef struct __USART2_Rxbuffer
{
	uint32_t Head;
	uint32_t Last_head;
	uint32_t Tail;
	uint8_t huart2_Rxbuffer[CmdLength]; 
	uint8_t huart2_Rxflag;
    uint8_t Rx_Firstflag;
    uint32_t RxCounter;

} USART2_Rxbuffer;

HAL_StatusTypeDef  Usart2Recieve(uint8_t *pData)
{ 
	uint8_t i = 0;

	/* first in , hang the interrupt. */
	if (!USART2_Rx.Rx_Firstflag) 
	{
		if (HAL_UART_Receive_IT(&huart2, &USART2_Rx.huart2_Rxbuffer[USART2_Rx.RxCounter++], 1) == HAL_OK)
		{
			USART2_Rx.Head = USART2_Rx.RxCounter - 1;
			USART2_Rx.Rx_Firstflag = TRUE;
			printf("USART2_Rx interrupt Open\r\n");
		}
	}

	if (USART2_Rx.huart2_Rxflag == TRUE)
	{
		HAL_Delay(1);
		USART2_Rx.huart2_Rxflag = FALSE;
		Head_flag = TRUE;
		
		if (USART2_Rx.RxCounter == 1)
		{
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值