F407位带操作

2019-07-20 06:20发布

   F407为什么不能用F103一样的位带操作了,就是在主函数里面用LED1=0;之类的,谁能给我发一个F407原子哥的标准程序模型啊! 就是觉得以前在原子这买的F103的好用啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
augustedward
2019-07-20 11:01
回复【4楼】正点原子:
---------------------------------
#include "stm32f4xx.h"

//IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 
//IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) //0x40020014 
#define GPIOB_ODR_Addr    (GPIOB_BASE+20) //0x40020414 
#define GPIOC_ODR_Addr    (GPIOC_BASE+20) //0x40020814 
#define GPIOD_ODR_Addr    (GPIOD_BASE+20) //0x40020C14 
#define GPIOE_ODR_Addr    (GPIOE_BASE+20) //0x40021014 
#define GPIOF_ODR_Addr    (GPIOF_BASE+20) //0x40021414    
#define GPIOG_ODR_Addr    (GPIOG_BASE+20) //0x40021814   

#define GPIOA_IDR_Addr    (GPIOA_BASE+16) //0x40020010 
#define GPIOB_IDR_Addr    (GPIOB_BASE+16) //0x40020410 
#define GPIOC_IDR_Addr    (GPIOC_BASE+16) //0x40020810 
#define GPIOD_IDR_Addr    (GPIOD_BASE+16) //0x40020C10 
#define GPIOE_IDR_Addr    (GPIOE_BASE+16) //0x40021010 
#define GPIOF_IDR_Addr    (GPIOF_BASE+16) //0x40021410 
#define GPIOG_IDR_Addr    (GPIOG_BASE+16) //0x40021810 
 
//IO口操作,只对单一的IO口!
//确保n的值小于16!
#define Aout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出 
#define Ain(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 

#define Bout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出 
#define Bin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 

#define Cout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出 
#define Cin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入 

#define Dout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出 
#define Din(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入 

#define Eout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出 
#define Ein(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)  //输入

一周热门 更多>