新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2019-11-4
- 在线时间
- 5 小时
|
1金钱
在原子哥的教程中看到了这样一个if语句,if((__HAL_UART_GET_FLAG(&Usartx_handler,UART_FLAG_RXNE)!=RESET)),HAL库中下面这种类型的宏定义#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
这个__HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) 的值取决于(((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) 的值,
但后面表达式的值怎么确定呢?这里的__HANDLE__)->Instance->SR就是对应的串口的SR寄存器,__FLAG__就是UART_FLAG_RXNE,也就是0X0020,那if((__HAL_UART_GET_FLAG(&Usartx_handler,UART_FLAG_RXNE)!=RESET))就可以理解成判断对应串口的SR状态寄存器的第5位,也就是RXNE是否为1,如果为1,说明RDR移位寄存器的内容已传输到USART_DR寄存器,可以读取接收到的数据了,
这么理解对吗?
#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE)
#define USART_SR_RXNE ((uint32_t)0x0020)
感觉要想理解HAL库的代码,必须要结合寄存器来看,
|
|