USART_GetITStatus()和USART_GetFlagStatus()的区别

  都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。

    ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint32_t USART_IT)

  该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。------串口中断函数中使用。

    

    FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint32_t USART_FLAG)

  该函数只判断标志位。在没有使能相应的中断时,通常使用该函数来判断标志位是否置1。------做串口轮询时使用。

    

 1 FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
 2 {
 3   FlagStatus bitstatus = RESET;
 4   /* Check the parameters */
 5   assert_param(IS_USART_ALL_PERIPH(USARTx));
 6   assert_param(IS_USART_FLAG(USART_FLAG));
 7
 8   /* The CTS flag is not available for UART4 and UART5 */
 9   if (USART_FLAG == USART_FLAG_CTS)
10   {
11     assert_param(IS_USART_1236_PERIPH(USARTx));
12   }
13
14   if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET)
15   {
16     bitstatus = SET;
17   }
18   else
19   {
20     bitstatus = RESET;
21   }
22   return bitstatus;
23 }

 1 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
 2 {
 3   uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
 4   ITStatus bitstatus = RESET;
 5   /* Check the parameters */
 6   assert_param(IS_USART_ALL_PERIPH(USARTx));
 7   assert_param(IS_USART_GET_IT(USART_IT));
 8
 9   /* The CTS interrupt is not available for UART4 and UART5 */
10   if (USART_IT == USART_IT_CTS)
11   {
12     assert_param(IS_USART_1236_PERIPH(USARTx));
13   }
14
15   /* Get the USART register index */
16   usartreg = (((uint8_t)USART_IT) >> 0x05);
17   /* Get the interrupt position */
18   itmask = USART_IT & IT_MASK;
19   itmask = (uint32_t)0x01 << itmask;
20
21   if (usartreg == 0x01) /* The IT  is in CR1 register */
22   {
23     itmask &= USARTx->CR1;
24   }
25   else if (usartreg == 0x02) /* The IT  is in CR2 register */
26   {
27     itmask &= USARTx->CR2;
28   }
29   else /* The IT  is in CR3 register */
30   {
31     itmask &= USARTx->CR3;
32   }
33
34   bitpos = USART_IT >> 0x08;
35   bitpos = (uint32_t)0x01 << bitpos;
36   bitpos &= USARTx->SR;
37   if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
38   {
39     bitstatus = SET;
40   }
41   else
42   {
43     bitstatus = RESET;
44   }
45
46   return bitstatus;
47 }

转载于:https://www.cnblogs.com/leo0621/p/8709944.html

USART_GetITStatus和USART_GetFlagStatus的区别相关推荐

  1. STM32串口中 USART_GetITStatus 与 USART_GetFlagStatus的区别

    一.ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)在判断相应位是否置1(读SR寄存器)前会先判断相应位的中断是 ...

  2. USART_IT与USART_FLAG,USART_GetITStatus与 USART_GetFlagStatus

    ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)  : 不仅会判断标志位是否置1,同时还会判断是否使能了相应的中 ...

  3. STM32的USART_GetFlagStatus和USART_GetITStatus解析

    STM32固件库中提供了串口收发的标志位函数,包括USART_GetFlagStatus(-,-);和USART_GetITStatus(-,-);两者容易混淆 区别就在于:前者返回值是中断标志位状态 ...

  4. windows通信端口初始化失败_STM32实例——USART串口通信实验(二)

    USART 串口通信配置步骤 在上面的介绍中,可能有的朋友很不理解,不过没有关系,下面我们讲解如何使用库函数对 USART 进行配置.这个也是在编写程序中必须要了解的.具体步骤如下:(USART 相关 ...

  5. 关于STM32的USART_GetFlagStatus和USART_GetITStatus解析(异步通信)

    前言 STM32固件库中提供了串口收发的标志位函数,包括USART_GetFlagStatus(-,-);和USART_GetITStatus(-,-);,两者容易混淆,重点区别就在于:前者返回值是中 ...

  6. STM32的USART_GetFlagStatus和USART_GetITStatus

    ITStatus USART_GetIT函数详解 一开始是把USART_IT_RXNE 0x0505 写成2进制,然后只要它的低八位,然后低八位右移5位,然后得到usartreg的值为0b001,然后 ...

  7. USART_ClearITPendingBith和 USART_ClearFlag的区别

    起初 stm32 v3.5 库函数里面,对于串口USART有这样两个函数:                 USART_ClearFlag()和USART_ClearITPendingBit() 查库 ...

  8. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  9. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

最新文章

  1. 漫画讲述人工智能简史
  2. Nginx——location配置
  3. 有三AI不得不看的几十篇技术综述
  4. UE4学习-程序崩溃,如何恢复工程
  5. python中的str方法和repr方法_详解Python中__str__和__repr__方法的区别
  6. 乐思启慧教学系列—Bootstrap布局规则
  7. Oracle逻辑读,物理读
  8. 当Ubuntu安装软件碰到找不到安装包时E: Package ‘unzip‘ has no installation candidate
  9. elasticsearch数据迁移
  10. Idea多次启动同一个服务
  11. 机器学习 - 统计学中的均值、方差、标准差
  12. WIN7下WIFI共享上网教程
  13. ovo svm_反思我在OVO担任远程产品设计实习生的时间
  14. 浅谈脑电中的delta振荡
  15. 基于计数栈的非递归二叉树遍历算法
  16. 重磅开讲 | 图灵奖得主—— Joseph Sifakis
  17. RTX3090 与pytorch版本对应关系
  18. JAVA带你一步一步实现微信公众号开发(一)
  19. 用Animation制作简单的物体动画
  20. Windows下搭建ARM11裸机开发环境(1):工具安装

热门文章

  1. 【Java深入研究】9、HashMap源码解析(jdk 1.8)
  2. hdu4932 Miaomiao#39;s Geometry (BestCoder Round #4 枚举)
  3. OD逆向调试程序的笔记
  4. 8字箴言:尊重、尽责、开放、创新
  5. 26Exchange Server 2010跨站点部署-内外网邮件流测试
  6. [C++] 用Xcode来写C++程序[6] Name visibility
  7. 如何学习Flex Framework
  8. web2.0网站的配色参考方案
  9. Android还在用Toast?你Out啦,该试试Snackbar了
  10. 随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客