BSRR对比BRR对比ODR
✅ 三种操作方式的本质区别
寄存器 | 功能 | 原子操作 | 特点 |
---|---|---|---|
BSRR | 同时支持置位(1)和复位(0) | ✔️ 是 | 单指令完成任意位操作,无竞争风险 |
ODR | 直接读写输出状态 | ❌ 否 | 需"读-改-写",多线程/中断中需关中断保护 |
BRR | 只能复位(0) | ✔️ 是 | 仅清零功能,无置位能力 |
🛠 具体操作步骤详解
1. 使用 BSRR (推荐)
// 设置PA5输出高电平 GPIOA->BSRR = (1 << 5); // 低16位置位// 设置PA5输出低电平 GPIOA->BSRR = (1 << (5 + 16)); // 高16位复位
优势:
-
单指令原子操作(无需关中断)
-
不影响其他引脚状态
-
同时支持置位/复位
2. 使用 ODR (需注意风险)
// 设置PA5输出高电平 GPIOA->ODR |= (1 << 5); // 读-改-写操作// 设置PA5输出低电平 GPIOA->ODR &= ~(1 << 5); // 读-改-写操作
风险:
-
非原子操作(若中断中修改同一GPIO组会冲突)
-
需额外保护:
__disable_irq(); // 关中断 GPIOA->ODR |= (1 << 5); // 修改 __enable_irq(); // 开中断
3. 使用 BRR (仅支持清零)
// 只能设置低电平! GPIOA->BRR = (1 << 5); // 将PA5复位为0
局限:
-
无置位能力(不能设高电平)
-
需配合BSRR或ODR使用
⚡ 关键对比总结
场景 | 推荐方式 | 原因 |
---|---|---|
单次控制指定引脚 | BSRR | 原子操作,代码简洁 |
同时设置/清除多个引脚 | BSRR | 单指令完成多引脚操作(e.g. GPIOA->BSRR = 0x11000011; ) |
需读当前状态再修改 | ODR+关中断保护 | BSRR无法读取状态 |
仅需快速清零引脚 | BRR | 语义明确(但BSRR高16位可替代) |
高可靠性系统 | BSRR | 避免关中断延迟,确保实时性 |
📝 编程建议
-
首选BSRR:
// 标准安全写法 GPIOx->BSRR = (1 << pin); // 设高 GPIOx->BSRR = (1 << (pin + 16)); // 设低
-
BRR的替代方案:
// 以下两句完全等效: GPIOx->BRR = (1 << 5); // 专用清零寄存器 GPIOx->BSRR = (1 << (5 + 16)); // BSRR高16位清零
-
ODR使用准则:
// 必须添加保护! uint32_t temp = GPIOx->ODR; temp |= (1 << 5); // 修改值 GPIOx->ODR = temp; // 整体写入
💡 重要原理
-
BSRR设计优势:
通过分离置位位(低16位)和复位位(高16位),实现:-
0: 不改变
-
1: 触发动作(置位/复位)
无论其他位值如何,均不影响未操作引脚!
-
-
ODR风险根源:
内核总线需先读取ODR当前值 → 修改指定bit → 写回,若中途被中断修改同一GPIO组,会导致覆盖错误。
相关文章:
BSRR对比BRR对比ODR
✅ 三种操作方式的本质区别 寄存器功能原子操作特点BSRR同时支持置位(1)和复位(0)✔️ 是单指令完成任意位操作,无竞争风险ODR直接读写输出状态❌ 否需"读-改-写",多线程/中断中需关中断保护BRR只能复位(0)✔️ 是仅清零功能,无置…...

ubuntu22.04安装taskfile
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -dsudo mv ./bin/task /usr/local/bin/测试 task --version...
记录被mybatis一级缓存坑的问题
背景 我之前有个方法需要多次调用数据库拿数据,由于每次查询数据比较少,所以我前期都是直接查数据库拿的,准备后面再改缓存 // 查询代码 假设在A方法中 List<LeftOrderType> leftOrderTypes orderTypeMapper.selectList(wrapper); …...

遥感影像建筑物变化检测
文章目录 效果1、环境安装2、项目下载3、数据集下载4、模型训练5、模型推理6、推理结果7、批量推理效果 1、环境安装 参考文章 搭建Pytorch的GPU环境超详细 win10安装3DGS环境(GPU)超详细 测试GPU环境可用 2、项目下载 https://gitcode.com/gh_mirrors/ch/change_detectio…...
【数据库】《DBA实战手记》- 读书笔记
《DBA实战手记》基本介绍 作者:薛晓刚 等出版时间:2024年6月出版社:机械工业出版社ISBN:9787111757665 本书是一本指导DBA进行数据库开发和运维的实用手册,本书共9章,包括漫谈数据库、如何提升数据库性能…...

多模态大语言模型arxiv论文略读(103)
Are Bigger Encoders Always Better in Vision Large Models? ➡️ 论文标题:Are Bigger Encoders Always Better in Vision Large Models? ➡️ 论文作者:Bozhou Li, Hao Liang, Zimo Meng, Wentao Zhang ➡️ 研究机构: 北京大学 ➡️ 问题背景&…...

汇编语言基础: 搭建实验环境
环境配置 1.Visual Studio 创建空项目 创建成功 2.平台框架改为为WIN32 右键点击项目 点击属性 点击配置管理器 平台改为Win32(本文使用32位的汇编) 3.生成采用MASM 在项目属性里点击"生成依赖项"的"生成自定义" 勾选 masm 4.创建第一个汇编程序 右…...
SIFT 算法原理详解
SIFT 算法原理详解 SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)是一种经典的局部特征检测和描述算法,它能够在不同的尺度、旋转和光照变化下稳定地检测图像特征。SIFT 主要包括以下几个步骤:尺度空间极…...

基于springboot的益智游戏系统的设计与实现
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...
短剧系统开发文案:打造沉浸式互动娱乐新体验
一、项目背景 随着短视频与碎片化娱乐的兴起,短剧市场呈现爆发式增长。用户对剧情紧凑、节奏明快、互动性强的内容需求激增,传统影视平台已难以满足个性化与参与感需求。「XX短剧系统」应运而生,致力于打造集内容创作、分发、互动于一体的短…...

第十二节:第四部分:集合框架:List系列集合:LinkedList集合的底层原理、特有方法、栈、队列
LinkedList集合的底层原理 LinkedList集合的应用场景之一 代码:掌握LinkedList集合的使用 package com.itheima.day19_Collection_List;import java.util.LinkedList; import java.util.List;//掌握LinkedList集合的使用。 public class ListTest3 {public static …...

多模态大语言模型arxiv论文略读(104)
Talk Less, Interact Better: Evaluating In-context Conversational Adaptation in Multimodal LLMs ➡️ 论文标题:Talk Less, Interact Better: Evaluating In-context Conversational Adaptation in Multimodal LLMs ➡️ 论文作者:Yilun Hua, Yoav…...

【C++高级主题】多重继承下的类作用域
目录 一、类作用域与名字查找规则:理解二义性的根源 1.1 类作用域的基本概念 1.2 单继承的名字查找流程 1.3 多重继承的名字查找特殊性 1.4 关键规则:“最近” 作用域优先,但多重继承无 “最近” 二、多重继承二义性的典型类型与代码示…...

基于Android的一周穿搭APP的设计与实现 _springboot+vue
开发语言:Java框架:springboot AndroidJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7数据库工具:Navicat12开发软件:eclipse/myeclipse/ideaMaven包:Maven3.6 系统展示 APP登录 A…...

机器学习——使用多个决策树
使用单一决策树的弱点之一是决策树对数据中的微小变化非常敏感,一个使算法不那么敏感或更健壮的解决方案,不是建立一个决策树,而是要建立大量的决策树,我们称之为树合奏。 在这个例子中,我们一直在使用最好的特性来分…...

C# 中的对话框与导航:构建流畅用户交互的完整指南
在现代应用程序开发中,良好的用户交互体验是成功的关键因素之一。作为.NET开发者,熟练掌握C#中的对话框与导航技术,能够显著提升应用程序的易用性和专业性。本文将全面探讨Windows Forms、WPF、ASP.NET Core和MAUI等平台下的对话框与导航实现…...

DeepSeek - 尝试一下GitHub Models中的DeepSeek
1.简单介绍 当前DeepSeek使用的人很多,各大AI平台中也快速引入了DeekSeek,比如Azure AI Foundary(以前名字是Azure AI Studio)中的Model Catalog, HuggingFace, GitHub Models等。同时也出现了一些支持DeepSeek的.NET类库。微软的Semantic Kernel也支持…...

【判断酒酒花数】2022-3-31
缘由对超长正整数的处理? - C语言论坛 - 编程论坛 void 判断酒酒花数(_int64 n) {//缘由https://bbs.bccn.net/thread-508634-1-1.html_int64 t n; int h 0, j 0;//while (j < 3)h t % 10, t / 10, j;//整数的个位十位百位之和是其前缀while (t > 0)h t…...
对称加密-非对称加密
目录 非对称加密算法的优缺点是什么? 一、非对称加密的核心特点 二、非对称加密的显著优点 1. 解决密钥分发难题 2. 支持数字签名 3. 前向安全性 4. 访问控制灵活性 三、非对称加密的局限性 1. 性能瓶颈 2. 密钥长度要…...

【OCCT+ImGUI系列】011-Poly-Poly_Triangle三角形面片
Poly_Triangle 是什么? Poly_Triangle 是一个非常轻量的类,用于表示一个三角网格中的单个三角形面片。它是构成 Poly_Triangulation(三角网格对象)的基本单位之一。之后会写关于碰撞检测的相关文章,三角面片是非常重要…...

【机器学习基础】机器学习入门核心算法:Mini-Batch K-Means算法
机器学习入门核心算法:Mini-Batch K-Means算法 一、算法逻辑工作流程与传统K-Means对比 二、算法原理与数学推导1. 目标函数2. Mini-Batch更新规则3. 学习率衰减机制4. 伪代码 三、模型评估1. 内部评估指标2. 收敛性判断3. 超参数调优 四、应用案例1. 图像处理 - 颜…...

机器学习实战36-基于遗传算法的水泵调度优化项目研究与代码实现
大家好,我是微学AI,今天给大家介绍一下机器学习实战36-基于遗传算法的水泵调度优化项目研究与代码实现。 文章目录 一、项目介绍二、项目背景三、数学原理与算法分析动态规划模型遗传算法设计编码方案适应度函数约束处理算法参数能量消耗模型一泵房能耗二泵房能耗效率计算模…...
计算机视觉与深度学习 | 基于Matlab的门禁指纹识别与人脸识别双系统实现
系统架构 #mermaid-svg-d8CEMhB3dNDpJu8M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-d8CEMhB3dNDpJu8M .error-icon{fill:#552222;}#mermaid-svg-d8CEMhB3dNDpJu8M .error-text{fill:#552222;stroke:#552222;}#…...
TypeScript 定义同步方法
在TypeScript中定义同步方法是一个常见的需求,尤其是在处理不涉及异步操作的情况下。本文将详细介绍如何在TypeScript中定义和使用同步方法,包括代码示例和详细解释。 一、定义同步方法 在TypeScript中,定义同步方法与JavaScript类似&#…...
debian12.9或ubuntu,vagrant离线安装插件vagrant-libvirt,20250601
系统盘: https://mirror.lzu.edu.cn/debian-cd/12.9.0/amd64/iso-dvd/debian-12.9.0-amd64-DVD-1.iso 需要的依赖包,无需安装ruby( sudo apt install -y ruby-full ruby-dev rubygems,后来发现不安装会有编译警告,还是安装吧 ) ,无需安装 zlib1g-dev liblzma-dev libxml2-de…...

【仿muduo库实现并发服务器】使用正则表达式提取HTTP元素
使用正则表达式提取HTTP元素 1.正则表达式2.正则库的使用3.使用正则表达式提取HTTP请求行 1.正则表达式 正则表达式它其实是描述了一种字符串匹配的模式,它可以用来在一个字符串中检测一个特定格式的字串,以及可以将符合特定规则的字串进行替换或者提取…...

核心机制:流量控制
搭配滑动窗口使用的 窗口大小 窗口越大,传输速度就越快,但是也不能无限大,太大了,对于可靠性会有影响 比如发生方以非常快的速度,发送,接收方的处理速度跟不上,也就会导致有效数据被接受方丢弃(又得重传) 流量控制,就是根据接收方的处理能力(如何衡量?),干预到发送方的发送…...
Java中并发修改异常如何处理
在 Java 中,ConcurrentModificationException(并发修改异常) 是遍历集合时最常见的错误之一。它发生在迭代过程中直接修改集合结构(添加/删除元素)时,与是否多线程无关。以下是详细的处理方案: …...

极智项目 | 基于PyQT实现的YOLOv12行人目标检测软件设计
基于YOLOv12的专业级行人目标检测软件应用 开发者: 极智视界 软件下载:链接 🌟 项目特色 专业检测: 基于最新YOLOv12模型,专门针对行人检测优化现代界面: 采用PyQt5构建的美观、直观的图形用户界面高性能: 支持GPU加速,检测速…...
JavaScript 对象展开语法
文章目录 JavaScript 对象展开语法1、对象展开(Spread)操作:2、组件注册3、示例应用总结 JavaScript 对象展开语法 示例代码: export default {...student,components: {ConponentA: ConponentA,ConponentB: ConponentB},这段代…...