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”就是设备密码
我使用的是 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”就是设备密码