当前位置: 首页 > news >正文

USART_GetITStatus与 USART_GetFlagStatus的区别

文章目录

    • 共同点
    • 不同点
    • USART_GetITStatus函数详解
    • USART_GetFlagStatus函数

共同点

都能访问串口的SR寄存器

不同点

USART_GetFlagStatus(USART_TypeDef USARTx, uint16_t USART_FLAG):*
该函数只判断标志位(访问串口的SR寄存器)。在没有使能相应的中断函数时,通常使用该函数来判断标志位是否置1
USART_GetITStatus(USART_TypeDef USARTx, uint16_t USART_IT) :*
不仅会判断标志位是否置1(访问串口的SR寄存器),同时还会判断是否使能了相应的中断(访问串口的CR1寄存器)。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。USART_GetITStatus判定的是事件标志和使能控制位,这两个位同时为1返回值才为1

USART_GetITStatus函数详解

#define USART_IT_PE                          ((uint16_t)0x0028)
#define USART_IT_TXE                         ((uint16_t)0x0727)
#define USART_IT_TC                          ((uint16_t)0x0626)
#define USART_IT_RXNE                        ((uint16_t)0x0525)
#define USART_IT_ORE_RX                      ((uint16_t)0x0325) /* In case interrupt is generated if the RXNEIE bit is set */
#define USART_IT_IDLE                        ((uint16_t)0x0424)
#define USART_IT_LBD                         ((uint16_t)0x0846)
#define USART_IT_CTS                         ((uint16_t)0x096A)
#define USART_IT_ERR                         ((uint16_t)0x0060)
#define USART_IT_ORE_ER                      ((uint16_t)0x0360) /* In case interrupt is generated if the EIE bit is set */
#define USART_IT_NE                          ((uint16_t)0x0260)
#define USART_IT_FE                          ((uint16_t)0x0160)
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;ITStatus bitstatus = RESET;/* Check the parameters */assert_param(IS_USART_ALL_PERIPH(USARTx));assert_param(IS_USART_GET_IT(USART_IT)); /* The CTS interrupt is not available for UART4 and UART5 */ if (USART_IT == USART_IT_CTS){assert_param(IS_USART_1236_PERIPH(USARTx));} /* Get the USART register index */usartreg = (((uint8_t)USART_IT) >> 0x05);/* Get the interrupt position */itmask = USART_IT & IT_MASK;itmask = (uint32_t)0x01 << itmask;if (usartreg == 0x01) /* The IT  is in CR1 register */{itmask &= USARTx->CR1;}else if (usartreg == 0x02) /* The IT  is in CR2 register */{itmask &= USARTx->CR2;}else /* The IT  is in CR3 register */{itmask &= USARTx->CR3;}bitpos = USART_IT >> 0x08;bitpos = (uint32_t)0x01 << bitpos;bitpos &= USARTx->SR;if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET)){bitstatus = SET;}else{bitstatus = RESET;}return bitstatus;  
}

以RXNE为例:

在这里插入图片描述
在这里插入图片描述

一开始是把USART_IT_RXNE 0x0505写成2进制,然后只要它的低八位,然后低八位右移5位,然后得到usartreg的值为0b001,然后单击鼠标可以找到IT_MASK的值,它与我们的USART_IT相与得到它的值为5,接下来就是IT_MASK等于0x01左移5位,为什么是5位,因为要判定RXNEIE,他就是bit5。我们得到了IT_MASK的第5位为1,然后和CR1寄存器相与,进而判定RXNEIE是不是1itmask &= USARTx->CR1;也就是判断是否打开了中断。接下来就是通过bitpos &= USARTx->SR;判断下面寄存器SR的第五位。

综上所述


USART_GetITStatus判定的是事件标志和使能控制位,这两个位同时为1返回值才为1,
在这里插入图片描述

在这里插入图片描述

USART_GetFlagStatus函数

#define USART_FLAG_CTS                       ((uint16_t)0x0200)
#define USART_FLAG_LBD                       ((uint16_t)0x0100)
#define USART_FLAG_TXE                       ((uint16_t)0x0080)
#define USART_FLAG_TC                        ((uint16_t)0x0040)
#define USART_FLAG_RXNE                      ((uint16_t)0x0020)
#define USART_FLAG_IDLE                      ((uint16_t)0x0010)
#define USART_FLAG_ORE                       ((uint16_t)0x0008)
#define USART_FLAG_NE                        ((uint16_t)0x0004)
#define USART_FLAG_FE                        ((uint16_t)0x0002)
#define USART_FLAG_PE                        ((uint16_t)0x0001)
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{FlagStatus bitstatus = RESET;/* Check the parameters */assert_param(IS_USART_ALL_PERIPH(USARTx));assert_param(IS_USART_FLAG(USART_FLAG));/* The CTS flag is not available for UART4 and UART5 */if (USART_FLAG == USART_FLAG_CTS){assert_param(IS_USART_1236_PERIPH(USARTx));} if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET){bitstatus = SET;}else{bitstatus = RESET;}return bitstatus;
}

假设判定的是RXNE 标志位:

#define USART_FLAG_RXNE ((uint16_t)0x0020) if ((USARTx->SR & USART_FLAG) != (uint16_t)RESET) {
bitstatus = SET; }

这不就是判定的SR寄存器的bit5-RXNE 标志位是不是1
在这里插入图片描述
在这里插入图片描述

转载不声明,谭泥小几及

相关文章:

USART_GetITStatus与 USART_GetFlagStatus的区别

文章目录共同点不同点USART_GetITStatus函数详解USART_GetFlagStatus函数共同点 都能访问串口的SR寄存器 不同点 USART_GetFlagStatus(USART_TypeDef USARTx, uint16_t USART_FLAG)&#xff1a;* 该函数只判断标志位&#xff08;访问串口的SR寄存器&#xff09;。在没有使能…...

Java 系列之 Springboot

系列文章目录 文章目录系列文章目录前言一、Springboot 简介&#xff1f;1.1 什么是启动器&#xff1f;1.2 Springboot 优点1.3 Springboot 核心二、搭建方式2.1 搭建方式一2.2 搭建方式二2.3 搭建方式三三、启动原理3.1 初始化SrpingApplication对象3.2 执行run()方法1. 加载监…...

乐山持点科技:抖客推广准入及准出管理规则

抖音小店平台新增《抖客推广准入及准出管理规则》&#xff0c;本次抖音规则具体如下&#xff1a;第一章 概述1.1 目的及依据为维护精选联盟平台经营秩序&#xff0c;保障精选联盟抖客、商家、消费者等各方的合法权益;根据《巨量百应平台服务协议》、《“精选联盟”服务协议(推广…...

Steam流

Steam流 Stream 流是什么&#xff0c;为什么要用它&#xff1f; Stream是 Java8 新引入的一个包&#xff08; java.util.stream&#xff09;&#xff0c;它让我们能用声明式的方式处理数据&#xff08;集合、数组等&#xff09;。Stream流式处理相较于传统方法简洁高效&#…...

Nuxt实战教程基础-Day01

Nuxt实战教程基础-Day01Nuxt是什么&#xff1f;Nuxt.js框架是如何运作的&#xff1f;Nuxt特性流程图服务端渲染(通过 SSR)单页应用程序 (SPA)静态化 (预渲染)Nuxt优缺点优点缺点安装运行项目总结前言&#xff1a;本教程基于Nuxt2&#xff0c;作为教程的第一天&#xff0c;我们先…...

栈和队列详细讲解+算法动画

栈和队列 栈stack 栈也是一种线性结构相比数组&#xff0c;栈对应的操作数数组的子集只能从一端添加元素&#xff0c;也只能从一端取出元素这一端称为栈顶 栈是一种后进先出的数据结构Last in Firt out(LIFO)在计算机的世界里&#xff0c;栈拥有者不可思议的作用 栈的应用 …...

【Unity3D小技巧】Unity3D中判断Animation以及Animator动画播放结束,以及动画播放结束之后执行函数

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在日常开发中&#xff0c;可能会遇到要判断Animation或者Anima…...

【1】熟悉刷题平台操作

TestBench使用 与quartus中testbench的写法有些许。或者说这是平台特有的特性&#xff01;&#xff01; 1 平台使用谨记 &#xff08;1&#xff09;必须删除&#xff1a;若设计为组合逻辑&#xff0c;需将自动生成的clk删除 若不删除&#xff0c;会提示运行超时错误。 &#…...

计算机网络:RIP协议以及距离向量算法

RIP协议 RIP是一种分布式的基于适量向量的路由选择协议&#xff0c;最大优点是简单。要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的唯一最佳&#xff08;最短&#xff09;距离记录&#xff0c;最多包含15个路由器&#xff0c;距离为16就表示网络不可达&…...

[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)

1. 简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 数据 数据是客观事物的符号表示&#xff0c;是所有能输人到计算机中并被计算机程序处理的符号的总称。数据是信息的载体&#xff0c;能够被计算机识别、存储和加工 数据元素…...

JS_countup.js 的简单使用,数字滚动效果

countup.js countup.js 是一个轻量级&#xff0c;无依赖的JavaScript类&#xff0c;通过简单的设置就可以达到数字滚动的效果 官网&#xff1a;https://inorganik.github.io/countUp.js/ 源码 var CountUpfunction(target,startVal,endVal,decimals,duration,options){var …...

【C++知识点】STL 容器总结

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;C/C知识点 &#x1f4e3;专栏定位&#xff1a;整理一下 C 相关的知识点&#xff0c;供大家学习参考~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;…...

C++---背包模型---装箱问题(每日一道算法2023.3.9)

注意事项&#xff1a; 本题是"动态规划—01背包"的扩展题&#xff0c;dp和优化思路不多赘述。 题目&#xff1a; 有一个箱子容量为 V&#xff0c;同时有 n 个物品&#xff0c;每个物品有一个体积&#xff08;正整数&#xff09;。 要求 n 个物品中&#xff0c;任取若…...

if-else if与switch的练习1:输入两个数,输出两个数的加减乘除的值

1.if-else if的练习 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…...

【教程】你现在还不知道微软的New Bing?你out了,快点进来看

哈喽啊&#xff0c;大家好&#xff0c;好久不见&#xff0c;我是木易巷&#xff01; 不禁感叹&#xff0c;AI人工智能时代真的已经来临&#xff01; 目前&#xff0c;谷歌和微软就各自面向大众的产品发布了重大公告。谷歌推出了一款名为Bard实验性对话式 AI 服务&#xff0c;而…...

https流程

ssl加密协议包含以下4个步骤 1、服务器去第三方机构注册生成证书&#xff0c;第三方机构非对称加密生成公钥私钥&#xff0c;给服务器一个私钥&#xff0c;证书包含了公钥。 2、客户端向服务器索要证书 3、客户端向第三方机构验证证书 4、客户端对称加密生成密钥&#xff0c;在…...

python魔法方法

Python中的魔法方法&#xff08;也称为特殊方法或双下划线方法&#xff09;是在类定义中使用的一些特殊的函数,可以使用dir方法查询。它们以双下划线开头和结尾&#xff0c;例如__init__和__str__。这些方法被Python解释器用于执行特定的操作&#xff0c;例如实例化对象、字符串…...

软件测试员如何进行产品测试?

一般来讲&#xff0c;当软件成为一个成功的产品后&#xff0c;产品测试工作就会复杂很多。比如拥有的用户量大&#xff0c;迭代频繁&#xff0c;测试的周期短&#xff0c;重复性强。面对紧张复杂的产品测试工作&#xff0c;软件测试员应怎样完成这一系列的测试工作呢&#xff1…...

计算机网络基础知识点【1】

文章目录计算机网络第一章 计算机网络参考模型1.计算机网络为什么需要分层&#xff1f;1.1 分层思想1.2 分层好处2.OSI七层模型2.1 OSI七层模型总结2.2 OSI七层工作原理2.3 数据封装与解封装2.4 计算机网络常用协议3.TCP/IP参考模型3.1 什么是TCP/IP协议3.2 TCP/IP协议族的组成…...

c++ 中标准库类型 string 详解

&#x1f441;‍&#x1f5e8;&#x1f441;‍&#x1f5e8; 前言 标准库类型string 表示可变长的字符序列&#xff0c;使用string 类型必须首先包含string 头文件。string 定义在命名空间std 中。 定义和初始化 string 对象 首先说明如何初始化对象是由类本身决定的&#xff0…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

Python第七周作业

Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt&#xff0c;并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径&#xff0c;并创建logs目录&#xff08;若不存在&#xff09; 3.递归遍历目录data&#xff0c;输出所有.csv文件的路径…...