串口接收超时判断问题 方法一: HAL_USART_Receive(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size, uint32_t Timeout) 自带Timeout ,方便好用(设定systick ,每1ms中断 ),处理器每1ms检查寄存器标记及超时。 .... while(__HAL_USART_GET_FLAG(husart, Flag) == RESET) { /* Check for the Timeout */ if(Timeout != HAL_MAX_DELAY) { if((Timeout == 0)||((HAL_GetTick() - tickstart ) > Timeout)) { .... 方法二: HAL_USART_Receive_IT(USART_HandleTypeDef *husart, uint8_t *pRxData, uint16_t Size) 在中断中设定接收完成标记,主循环中检查超时,处理器每1ms检查收完成标记及超时;每次中断接收后,还要重新启动中断。 即使在多任务中,处理器在每1ms检查过程中,可以做其他事情。 采用中断的方式好像没有什么优势?? 大家有什么看法 |
评分
查看全部评分
评分
查看全部评分
HAL_USART_Receive 本身存在通讯不稳定的问题?哥们使用真存在该问题?
HAL_USART_Receive 本身存在通讯不稳定的问题?哥们使用真存在该问题?
HAL_USART_Receive 不存在通讯不稳定的问题,主要是采用中断方式时,可以在系统任务繁忙时能够及时接收USART数据。
评分
查看全部评分
在操作系统中,
方法一 简单好用, 阻塞就阻塞, 单任务阻塞不会影响其他任务运行,
方法2 使用中断 稍微麻烦些,但是 会提升效率, 但是效率提升不会太明显, 因为操作系统本身有任务调度,因此也只能提升少数任务上的效率, 因此串口接收任务效率提升了不见得会对整个系统效率有明显贡献,.
我是提出这种思路,这种思路推广到其他外设,或者多个外设的时候的选择