STM32源码阅读之HAL位操作相关

前言

  1. HAL库结构基础是基于位操作+对地址读写

重要的位操作宏定义

头文件: stm32f1xx.h

#define SET_BIT(REG, BIT)     ((REG) |= (BIT)) /*对某一位置1*/

#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT)) /*对某一位置0*/

#define READ_BIT(REG, BIT)    ((REG) & (BIT)) /*读取某一位*/

#define CLEAR_REG(REG)        ((REG) = (0x0)) /*整体置为0*/

#define WRITE_REG(REG, VAL)   ((REG) = (VAL))/*整体赋值*/

#define READ_REG(REG)         ((REG))/*读取整体值*/
/*多个位的置0和多个位的置1*/
#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))

#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL)))

编程约定

  1. SET_BIT中的BIT是要保证BIT的值只有一位为‘1’,其余均为‘0’

判断位操作

头文件: stm32f1xx_hal_def.h

#define HAL_IS_BIT_SET(REG, BIT)         (((REG) & (BIT)) != 0U)
#define HAL_IS_BIT_CLR(REG, BIT)         (((REG) & (BIT)) == 0U)

你可能感兴趣的:(HAL源码,stm32,嵌入式硬件,单片机)