我正在研究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/

10-12 19:04