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

#define MODIFY_REG(REG, CLEARMASK, SETMASK)

 #define MODIFY_REG(REG, CLEARMASK, SETMASK)             WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))

这个宏 MODIFY_REG 是在嵌入式编程中,它用于修改一个寄存器的特定位,而不影响其他位。这个宏接受三个参数:

REG:要修改的寄存器的地址。
CLEARMASK:要清除的位掩码(即,设置为0的位)。
SETMASK:要设置的位掩码(即,设置为1的位)。
宏的工作原理如下:
1.READ_REG(REG):首先读取当前寄存器的值。
2.& (~(CLEARMASK)):然后,使用按位非操作(~)来反转CLEARMASK中的所有位,并通过按位与操作(&)来清除REG中由CLEARMASK指定的位。
3.|:接着,使用按位或操作(|)来设置REG中由SETMASK指定的位。
4.WRITE_REG((REG), ...):最后,将修改后的值写回REG寄存器。

这个过程通常称为位域操作或位掩码操作,是底层硬件编程中非常常见的技术。

-------------------------------

这里有一个使用此宏的示例

// 假设我们有一个名为FLASH_CR的寄存器,我们想要修改其中的PG位和SER位。
// PG位是第6位,SER位是第5位。
// 我们想要清除PG位(将其设置为0),并设置SER位(将其设置为1)。\

// 定义位掩码 
#define FLASH_CR_PG_CLEAR_MASK (1 << 6)// 清除PG位(将其设置为0)
#define FLASH_CR_SER_SET_MASK (1 << 5)// 设置SER位(将其设置为1)

// 使用MODIFY_REG宏来修改寄存器
MODIFY_REG(FLASH->CR, FLASH_CR_PG_CLEAR_MASK, FLASH_CR_SER_SET_MASK);

-------------------在STM32程序(keil)中应用截图:

AHB分频寄存器配置:

 // 定义要清除的位掩码7:4设1:   0xF<<4-----11110000

//设置的位掩码 7:4的值

 

相关文章:

  • 记录一则 线上域名证书更新及cdn证书更新
  • 动态文字闪图如何制作?教你一招极速生成gif动图
  • 【开源】JAVA+Vue.js实现学校热点新闻推送系统
  • 2、云原生安全之可视化界面rancher的部署
  • wpf prism DryIoc批量注册服务
  • 在Vue中搭建Three.js环境(超详细、保姆级),创建场景、相机、渲染器《一》
  • Linux常用命令(超详细)
  • 利用Python爬取高德地图全国地铁站点信息
  • Vue 中组件通讯的方式
  • Vue3.2 + vue/cli-service 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案
  • 一周学会Django5 Python Web开发-Django5详细视图DetailView
  • 飞桨(PaddlePaddle)数据预处理教程
  • 全量知识系统问题及SmartChat给出的答复 之9 三套工具之4语法解析器 之2
  • Android 14后台服务永久保活的技术方法
  • selenium爬取空气质量数据
  • 时间复杂度分析经典问题——最大子序列和
  • 【Linux系统编程】快速查找errno错误码信息
  • canvas绘制圆角头像
  • ES2017异步函数现已正式可用
  • Js基础——数据类型之Null和Undefined
  • js继承的实现方法
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Vue 动态创建 component
  • vue的全局变量和全局拦截请求器
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端面试之闭包
  • 如何选择开源的机器学习框架?
  • 一道闭包题引发的思考
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​​​​​​​​​​​​​​Γ函数
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # 数据结构
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #微信小程序(布局、渲染层基础知识)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (二)JAVA使用POI操作excel
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)关于pipe()的详细解析
  • *Django中的Ajax 纯js的书写样式1
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Core 项目指定SDK版本
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [codeforces]Recover the String