问题:
最近发现,stm32cubemx最新版本f1系列的hal库(1.85版本)生成的hal库,其中stm32f1xx_hal_uart.c的库文件中,其串口发送接收存在一些问题:
1.没有使用 __HAL_LOCK
和 __HAL_UNLOCK
宏,锁机制。
2.pdata8bits
和 pdata16bits
未初始化为 NULL
,可能会导致未定义行为。
3.在遇到超时错误时,没有恢复 huart->RxState
状态。
这样子会出现什么问题呢?
1.串口中断进不去,主机发送消息,从机无回应
2.轮询模式下,打开串口,其会不断给电脑串口发信息,直到几千几万条后溢出。
(也有可能是我没理解到位,如果知道原因的大佬,可以在评论区给点意见)
解决方法:
我将stm32cubemx的hal库版本进行了修改,改成了1.81版本,进行通信,实验成功。
步骤如下:
1.点击库管理
2.找到自己芯片库
如果你是1.85版本,如果前面框为绿色,选中然后下面点击移除就行。
点击1.81版本,进行安装。下图2框取消勾选,3框选择1.81。
其他配置和上篇文章一致:
STM32-hal库学习(4)--usart/uart通信 (单向通信)(同时显示在oled)-优快云博客
1.轮询模式
什么是轮询模式?
轮询模式利用阻塞模式收发数据
HAL_UART_Transmit():串口发送数据,使用超时管理机制
HAL_UART_Receive(): 串口接收数据,使用超时管理机制
其用于在没有中断机制或DMA机制的情况下,主动等待并处理外设的状态变化。在轮询