STM32HAL轮询模式串口接收函数超时等待问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32HAL轮询模式串口接收函数超时等待问题?相关的知识,希望对你有一定的参考价值。

while(1)

if(HAL_UART_Receive(&huart1,RecBuf,1,100)== HAL_OK)
……
HAL_GPIO_WritePin(Beep_GPIO_Port,Beep_Pin,GPIO_PIN_RESET)

在判断这个条件是否成立时,超时等待时间我设置成100ms,同时把蜂鸣器打开。我想问在判断时,这100ms超时等待时间内是不是单片机其他工作就停下不做了?因为原先设想是蜂鸣器一直响,然后用轮询方式检测串口是否接收到数据,但现在蜂鸣器响声有明显间隔(即100ms),当我把超时等待时间设置成无限等待,蜂鸣器干脆就不响了,这时候单片机内部啥也不做就等着串口接收数据吗?

参考技术A 是的,HAL里面这个HAL_UART_Receive()函数已经明明白白地写了,它是阻塞式查询工作方式,只要标志不置位或者超时不结束,就干等到天荒地老。
如果你不需要阻塞式查询工作方式,就应当选用中断工作方式,改用 HAL_UART_Receive_IT()函数并配置对应的NVIC模块、调用对应的中断服务函数并且钩上对应的回调。

以上是关于STM32HAL轮询模式串口接收函数超时等待问题?的主要内容,如果未能解决你的问题,请参考以下文章

STM32怎么接收不定长串口数据

stm32HAL库中串口部分各个传输和接收函数分析

细究STM32 HAL库的中断式串口接收

串口通讯(DMA模式)

STM32串口接收小结

STM32+RS485+Modbus-RTU(主机模式+从机模式)-标准库/HAL库开发