学习原子哥STM32M4(2):可以简化我们操作的位带操作

类似于51的sbit一样,位带操作可以简化我们的操作。

在原子哥的sys.h头文件中有以下定义:

#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n) 

#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)   

#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n) 
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  

#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  

#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  

#define PHout(n)   BIT_ADDR(GPIOH_ODR_Addr,n) 
#define PHin(n)    BIT_ADDR(GPIOH_IDR_Addr,n)  

#define PIout(n)   BIT_ADDR(GPIOI_ODR_Addr,n)  
#define PIin(n)    BIT_ADDR(GPIOI_IDR_Addr,n)  

out为输出,in为输入

我们可以看到,比如PEout(2)就是指向E2的输出地址(可能有误,希望各位大虾纠正)

更深入的还有ReadInputDataBit函数

但本人比较懒惰觉得直接PEout(n)就可以很方便了,所以没有深入了解。。。不过待我完成了暑假任务后一定回来认真学习的

比如我们要用LED1连在PE2口上实现IO口的输出控制LED1闪烁

我们可以在led.h里宏定义一个

#define LED1 PEout(11)

这个意思是我们用LED1来替代PEout(11),这样程序更清晰明了我们在做什么
这样我们通过写LED1=1,LED1=0,就可以实现对IO口的输出控制了
这里 的LED1=1是让PE口输出1

你可能感兴趣的:(STM32)