STMCU小助手
发布时间:2022-5-27 21:27
|
本篇笔记用来记录HAL_UART_Receive_IT(串口中断接收)和HAL_UART_Transmit(串口发送)共同使用时,出现中断无法再次进入的情况,以及对应的解决过程和方案。 在我预留了一个问题:
那么,这个问题究竟如何解决呢?通过在社区中的求助。得到了一个解决方案。通过运行__HAL_UART_ENABLE_IT方法,来恢复中断的触发。代码比较简单: while(d5list_length()>0) { struct __d5pack * p = d5list_pop(); uint8_t cmd = p->cmd; uint8_t back[128]=""; sprintf((char *)back,"got package %d",cmd); // 拼合字符串 HAL_UART_Transmit(&huart2,back,13,0xffff); // 发送字符串 __HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE); } 如上述代码所示,在一次发送完成之后。通过调用__HAL_UART_ENABLE_IT方法,即可使中断恢复运行,不再出现如笔记五中所述的,发送一次数据后,就无法再次进入中断的问题。 但是进一步测试发现,如果在一次循环中,连续调用两次HAL_UART_Transmit依然会造成串口锁死,无法触发中断。当然,连续两次调用这种写法本身就不够好。应该把要发送的数据合成在一起,统一发送一次。而不是分开发送多次,增加系统消耗。 因此,到目前为止。我们已经实现了可“维持”的数据包接受和发送。当然还不是最终的解决方案。当发包过于频繁的时候,还是会出现锁死的情况。我猜想是对HAL库不够熟悉的原因。作为一个遗留问题暂且保留。下一篇笔记开始,将回到WIFI模块,开始尝试通过无线连接来收发数据。 |
STM32L4R9 QuadSPI Flash通讯速率优化解析 32位总线的DMA传输适配核心方案
【STEVAL-STWINKT1B评测】运行Datalog固件并记录运行时间
【STEVAL-STWINKT1B评测】数字麦/模拟麦对比测试+音频配套上位机软件开发
【板卡评测】STEVAL-STWINKT1B读取 ACC/GYRO/MAG 实时数据
小白也能明白的STM32的低功耗与唤醒机制
【STM32入门学习路径指南】(四步走)
STM32和Arduino对比,谁更耐打?
STM32系统中2种数据掉电保护的方法
STM32 LL为什么比HAL高效?
STM32小白入门指南:从基础到OTA实现方案
微信公众号
手机版