STM32F4的USART串口HAL库调用接收中断问题

刚用上HAL库,做了个USART中断接收并回发的测试。

初始化USART中调用HAL_USART_Receive_IT(&USART1_Handle, rxBufIT, 1)开启接收中断,然后程序一运行到这个函数后,就会在串口助手接收到个0xFF。后面进入这个函数发现有一句:

/* Send dummy byte in order to generate the clock for the slave to send data */

husart->Instance->DR = (DUMMY_DATA & (uint16_t)0x01FFU); //#define DUMMY_DATA  0xFFFFU

是的,这个0xFF果然是HAL库发出来的。

如果调用HAL_USART_Receive_IT(&USART1_Handle, rxBufIT, 10),那么中断中也会通过USART_Receive_IT()同样发出10个0xFF。

1.jpg

然后在HAL_USART_RxCpltCallback()中会接收到0x7F(不知从何而来),调用HAL_USART_Transmit()发送,函数返回HAL_OK,但是串口助手收不到任何数据。


请问HAL库中为什么要专门发0XFF?是BUG吗?又不走同步模式,产生时钟干什么?


已邀请:

BG4RFF

赞同来自:

工程能打包来看一下吗

就这样我的确看不出来

admin

赞同来自: 如果.

串口如此简单, 感觉你想的台复杂了, 首先不应该怀疑库bug,而是应该检查自己的写法和硬件电路

jye777

赞同来自:

问题原因:用法错误。

我是想USART1当普通调试口用,结果用的HAL_USART相关的APIs,其实应该用HAL_UART的APIs。看了下USART和UART内部HAL库的实现,确实USART内部会多发个时钟同步信号(FF)。


要回复问题请先登录注册