换HAL库表达 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) { ch = USART_ReceiveData( USART3 );
时间: 2023-12-03 17:45:05 浏览: 306
如果使用HAL库,可以将上述代码改写为:
```c
if (__HAL_UART_GET_FLAG(&huart3, UART_FLAG_RXNE) != RESET) {
ch = HAL_UART_Receive(&huart3, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
}
```
其中,`huart3` 是 USART3 对应的 UART_HandleTypeDef 结构体变量。`HAL_UART_Receive()` 函数会阻塞等待接收到数据,并将接收到的数据存储到 `ch` 变量中。
相关问题
用hal库表示USART_GetITStatus(USART1, USART_IT_RXNE) != RESET
在使用HAL库的情况下,`USART_GetITStatus`通常会被对应的低级硬件抽象层(Low-Level HAL)函数所替代,比如对于USART1的RXNE(接收就绪)中断,你会用`HAL_UART_GetReceiveFlag`(或类似命名的函数)。这个函数会检查指定的USART接收标志是否被设置,而不是直接比较与`RESET`的状态。
例如,在HAL库中,`USART_IT_RXNE`通常对应于`HAL_UART_FLAG_RXNE`,所以你可能会看到这样的表达式:
```c
if (HAL_UART_GET_FLAG(&huart1, HAL_UART_FLAG_RXNE) != RESET) {
// 接收就绪处理...
}
```
这里`&huart1`是你之前已经初始化并配置好的USART1设备句柄,`HAL_UART_FLAG_RXNE`代表RXNE中断标志。这个条件判断等同于原始的标准库函数,但在底层硬件操作层面进行了封装,使得代码更易于维护和移植到其他HAL版本。相关问题:
1. HAL库是如何简化硬件访问的?
2. 如何在HAL库中注册USART1的接收就绪中断?
3. 使用HAL库后,如何避免硬编码中断标志名称?
把下面代码换HAL库:void USART3_IRQHandler( void ) { char ch; if((__HAL_UART_GET_FLAG(&USART3_Handler,UART_FLAG_RXNE)!=RESET)) { ch = HAL_UART_Receive(&USART3_Handler, &ch, 1, HAL_MAX_DELAY); if( strEsp8266_Fram_Record .InfBit .FramLength < ( RX_BUF_MAX_LEN - 1 ) ) //预留1个字节写结束符 { strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ++ ] = ch; } } if ( USART_GetITStatus( USART3, USART_IT_IDLE ) == SET ) //数据帧接收完毕 { strEsp8266_Fram_Record .InfBit .FramFinishFlag = 1; ch = USART_ReceiveData( USART3 ); //由软件序列清除中断标志位(先读USART_SR,然后读USART_DR) } }
void USART3_IRQHandler( void )
{
char ch;
if((__HAL_UART_GET_FLAG(&huart3, UART_FLAG_RXNE)!=RESET))
{
HAL_UART_Receive(&huart3, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
if(strEsp8266_Fram_Record.InfBit.FramLength < (RX_BUF_MAX_LEN - 1))
{
strEsp8266_Fram_Record.Data_RX_BUF[strEsp8266_Fram_Record.InfBit.FramLength++] = ch;
}
}
if(__HAL_UART_GET_FLAG(&huart3, UART_FLAG_IDLE) != RESET)
{
strEsp8266_Fram_Record.InfBit.FramFinishFlag = 1;
ch = huart3.Instance->RDR;
__HAL_UART_CLEAR_IDLEFLAG(&huart3);
}
}
阅读全文