STM32
直播中

王银喜

7年用户 2419经验值
私信 关注
[问答]

STM32F4初始化USART中调用HAL_USART_Receive_IT开启接收中断,HAL库中为什么要专门发0XFF?

初始化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。


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

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

回帖(1)

李兵

2024-4-18 16:00:56
用法错误。
想USART1当普通调试口用,结果用的HAL_USART相关的APIs,其实应该用HAL_UART的APIs。看了下USART和UART内部HAL库的实现,确实USART内部会多发个时钟同步信号(FF)。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分