HAL库实践记录之串口接收不定长数据

串口1接收不定长数据

实验板是原子mini板

一开始使用官方库,只能接受定长数据。把数据长度设置为1时,发送多字节数据时又会丢数。所以自己重写串口中断处理函数。

首先搞一下Cube配置用法:Mode选异步,下边设置好参数。

设置串口中断

然后就配置完了。生成代码

第一步在主函数初始化阶段添加如下代码(HAL F4 串口中断不响应可能就是这里没开)

__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);//开串口1中断

第二步,删除官方库函数,添加自己的中断函数(如果再生成代码的话要再删除一次官方函数的调用)

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
	user_Uart1Handler();
	//stm32Mxcube重新配置生成代码后需要注释掉函数void USART1_IRQHandler(void)中的HAL_UART_IRQHandler(&huart1);就是下面这句
  /* USER CODE END USART1_IRQn 0 */
  //HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */
		
  /* USER CODE END USART1_IRQn 1 */
}

第三步,重写函数,如下

void user_Uart1Handler(void)
{
	//接收寄存器非空
	if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET))  
	{
		USART1_RX_BUF[USART1_RX_BUF_Index]=(uint8_t)(huart1.Instance->DR & (uint8_t)0x00FF);
		USART1_RX_BUF_Index++;

		__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE);
	}
	else
	{
		
	}		
		  
	
}

这样就能就收了。

我也是借鉴了其他帖子,一般都是用DMA或者空闲中断,我都不太了解就没用。我用标准库的时候就是这么写的检查非空,保存数据,然后把非空标志清除。先用着等遇到其他问题的时候再解决。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值