STM32固件库中提供了串口收发的标志位函数,包括USART_GetFlagStatus(…,…);和USART_GetITStatus(…,…);两者容易混淆
区别就在于:前者返回值是中断标志位状态(读SR寄存器),后者返回值是中断发生与否的判断(读CR寄存器),以下主要对这两个函数进行分析。
一、USART_GETFlagStatus(…,…)
20 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
21 {
22 FlagStatus bitstatus = RESET;
23 /* Check the parameters */
24 assert_param(IS_USART_ALL_PERIPH(USARTx));
25 assert_param(IS_USART_FLAG(USART_FLAG));
26 /* The CTS flag is not available for UART4 and UART5 */
27 if (USART_FLAG == USART_FLAG_CTS)
28 {
29 assert_param(IS_USART_123_PERIPH(USARTx));
30 }
31
32 if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
33 {
34 bitstatus = SET;
35 }
36 else
37 {
38 bitstatus = RESET;
39 }
40 return bitstatus;
41 }
代码解析
该函数用于检测串口中断标志位的状态。
其中,24、25、29三行用于检测所用参数是否符