我正在研究 STM32 Discovery(F10x 系列),并尝试通过 USART1 发送和接收数据。
int uart_putc(int c, USART_TypeDef* USARTx)
{
assert_param(IS_USART_123_PERIPH(USARTx));
while (USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
USARTx->DR = (c & 0xff);
return 0;
}
int uart_getc (USART_TypeDef* USARTx)
{
assert_param(IS_USART_123_PERIPH(USARTx));
while (USART_GetFlagStatus(USARTx, USART_FLAG_RXNE) == RESET);
return USARTx->DR & 0xff;
}
uart_putc
工作正常,但 uart_getc 卡在 while 循环中,看起来 while 条件永远不为真。
有人知道这段代码有什么问题吗?
最佳答案
USART_FLAG_RXNE 标志代表 RX 缓冲区不为空。如果 RX 缓冲区中有数据,则标志被设置而不是重置。
这就是您的代码卡在 while 循环中的原因。
关于c - STM32:通过USART接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390564/