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

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避免关中断延迟,确保实时性

📝 编程建议

  1. 首选BSRR

    // 标准安全写法
    GPIOx->BSRR = (1 << pin);          // 设高
    GPIOx->BSRR = (1 << (pin + 16));   // 设低
  2. BRR的替代方案

    // 以下两句完全等效:
    GPIOx->BRR  = (1 << 5);    // 专用清零寄存器
    GPIOx->BSRR = (1 << (5 + 16)); // BSRR高16位清零
  3. ODR使用准则

    // 必须添加保护!
    uint32_t temp = GPIOx->ODR; 
    temp |= (1 << 5);          // 修改值
    GPIOx->ODR = temp;         // 整体写入

💡 重要原理

  • BSRR设计优势
    通过分离置位位(低16位)和复位位(高16位),实现:

    • 0: 不改变

    • 1: 触发动作(置位/复位)
      无论其他位值如何,均不影响未操作引脚

  • ODR风险根源
    内核总线需先读取ODR当前值 → 修改指定bit → 写回,若中途被中断修改同一GPIO组,会导致覆盖错误。

相关文章:

  • uboot nfs TTT
  • 基于白鲸优化算法的路径优化研究
  • D2-基于本地Ollama模型的多轮问答系统
  • 云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)
  • MUX-VLAN基本概述
  • 统信 UOS 服务器版离线部署 DeepSeek 攻略
  • Python函数参数详解:从位置参数到灵活调用的艺术
  • RK3568-快速部署codesys runtime
  • MPLS-EVPN笔记详述
  • python可视化:端午假期旅游火爆原因分析
  • WSL2 + RK3568 SDK 编译踩坑笔记
  • 直接插入排序
  • Python-nuitka
  • VMWare安装常见问题
  • 力扣HOT100之多维动态规划:5. 最长回文子串
  • 【AI News | 20250603】每日AI进展
  • 百万级临床试验数据库TrialPanorama发布!AI助力新药研发与临床评价迎来新基石
  • 如何在 DataGrip 中 连接 Databend
  • 迅为RK3588开发板RKLLM-Toolkit 环境搭建安装 Miniconda
  • 关于easyx头文件
  • 英文建站/灰色关键词排名代做
  • 做擦边球网站/青青河边草直播免费观看
  • 做网站文字字号大小/网站广告投放价格表
  • 国内网站建设/信息流优化师简历模板
  • 广东品牌网站建设报价/58同城推广
  • 临汾做网站/恶意点击软件