正点原子sys.h文档详解

文档主体内容为位带的映射,目的是实现位带操作。

第一部分:位带映射的宏函数

1 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
2 #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
3 #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 

第二部分:STM各GPIO的输入寄存器 (IDR)、输出寄存器寄存器(ODR)映射地址

//x范围:A~G
1
#define GPIOx_ODR_Addr (GPIOx_BASE+12) 2 ..... 3 #define GPIOx_IDR_Addr (GPIOx_BASE+8) 4 .....

第三部分:上述各寄存器的位带区域

1 //x范围:A~G,n范围:[0,15]
2 #define Pxout(n)   BIT_ADDR(GPIOx_ODR_Addr,n)  //输出 
3 #define Pxin(n)    BIT_ADDR(GPIOx_IDR_Addr,n)  //输入 

 

 

使用办法:

实现后,可将Pxout(n)\Pxin(n) 再宏定义,例如

1 #define    DHT11_DQ_OUT PAout(0) //数据端口    PA0出方向 
2 #define    DHT11_DQ_IN  PAin(0)  //数据端口    PA0入方向

其中,

DHT11_DQ_OUT = 1/0, 可以代替:GPIO_SetBits/ResetBits(GPIOB,GPIO_Pin_0)
DHT11_DQ_IN ,可以代替 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)
posted @ 2023-02-23 22:16  FBshark  阅读(522)  评论(0编辑  收藏  举报