c - STM32:通过USART接收数据

标签 c uart stm32 usart

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

相关文章:

c - 使用 strcpy() 时出现段错误?

c - 尝试执行缓冲区溢出攻击时获取 SIGILL

c编程制作电话簿输入输出和排序

c++ - UART 上的串行数据被损坏

javascript - 尝试使用 Beaglebone Black 上的串行端口时无法打开文件 "/dev/ttyO2"

蓝牙:Uart 还是 SPI?

embedded - 与 stm32 接口(interface)的网络摄像头

c++ - memcpy 命令在复制时交替数据

c - "static"在C中是什么意思?

c - 用 printf() 进行二进制打印可以这样吗?