前言
- 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)))
编程约定
- 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)