精美图片做网站上哪儿去找图,做地方网站要办什么证,建筑工程网架,手机如何制作代码#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) (~(CLEARMASK))) | (SETMASK))) 这个宏 MODIFY_REG 是在嵌入式编程中#xff0c;它用于修改一个寄存器的特定位#xff0c;而不影响其他位。这个宏接受三个参数#xff… #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: 0xF4-----11110000 //设置的位掩码 7:4的值