UART_RX returns 是什么意思

What does UART_RX returns

我使用的是 efm32lg230f256 微控制器,在它的代码中有一行使用 USART_Rx 并且它 returns:

1 2 3 4

但是当我查看它的内部时,我看不到它是如何重新调整的 1 2 3 4。我试图查看 data sheet 但没有这样的名称。

这个函数的逻辑是什么?为什么要这样做?

c = USART_Rx(uart);
uint8_t USART_Rx(USART_TypeDef *usart)
{
    while (!(usart->STATUS & USART_STATUS_RXDATAV))
        ;

    return (uint8_t)usart->RXDATA;
}

这是一个 HAL(硬件抽象层)。

大概是这样定义的:

typedef struct {
    //other uart registers
    uint8_t STATUS
    //other uart registers
    uint8_t RXDATA
} USART_TypeDef;

#define USART_STATUS_RXDATAV 0b00001000 // or equivalent hex value

这个结构是一种与映射到 USART 外设的内存连接的方式。因此 USART_TypeDef *usart 指针指向一块内存,它是 USART 的位置。当它读取usart->STATUS时,读取usart指向的位置的数据,也就是usartSTATUS寄存器。

USART_STATUS_RXDATAV 是位掩码,用于仅提取 RXDATAV 的值,代表 RX DATa AVailable。因此,仅当位置 USART_STATUS_RXDATAV 的位为 1 时,操作 usart->STATUS & USART_STATUS_RXDATAV 才会 return 为真值。否则这是错误的。 (True和false在C中一般是1和0。)

(uint8_t)usart->RXDATA

正在读取那个uart的RXDATA寄存器中的数据。因此它读取当前收到的值。

为了确保 RXDATA 包含有用的新数据,

while (!(usart->STATUS & USART_STATUS_RXDATAV))
    ;

被执行。这会等待 UART 接收到可用数据。

数据表通常非常有用,但如果需要更详细的信息,那么 reference manual is the next step. Page 447 is the one about the USART. Page 474 显示了 USART 外设的内存布局。

“1 2 3 4”就是设备密码