我正在研究STM32发现(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/