PBout()求助

2019-07-21 05:00发布

PBout(0)
在STM32F4芯片下,这个宏定义应该怎么改。。。


//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)) 


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
聚东风
1楼-- · 2019-07-21 08:11
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *(( U32  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
//IO映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+0x14)
#define GPIOB_ODR_Addr    (GPIOB_BASE+0x14) 
#define GPIOC_ODR_Addr    (GPIOC_BASE+0x14)
#define GPIOD_ODR_Addr    (GPIOD_BASE+0x14)
#define GPIOE_ODR_Addr    (GPIOE_BASE+0x14)
#define GPIOF_ODR_Addr    (GPIOF_BASE+0x14)
#define GPIOG_ODR_Addr    (GPIOG_BASE+0x14)
#define GPIOH_ODR_Addr    (GPIOH_BASE+0x14)
#define GPIOI_ODR_Addr    (GPIOI_BASE+0x14)

#define GPIOA_IDR_Addr    (GPIOA_BASE+0x10) 
#define GPIOB_IDR_Addr    (GPIOB_BASE+0x10) 
#define GPIOC_IDR_Addr    (GPIOC_BASE+0x10)
#define GPIOD_IDR_Addr    (GPIOD_BASE+0x10)
#define GPIOE_IDR_Addr    (GPIOE_BASE+0x10)
#define GPIOF_IDR_Addr    (GPIOF_BASE+0x10)
#define GPIOG_IDR_Addr    (GPIOG_BASE+0x10)
#define GPIOH_IDR_Addr    (GPIOH_BASE+0x10)
#define GPIOI_IDR_Addr    (GPIOI_BASE+0x10)

#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)  //输入

#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)  //输入
taizonglai
2楼-- · 2019-07-21 12:09
这几句不要改,但是各个IO口的地址映射要改,主要是括号里的20和16.一下只是GPIOA的,其他的一样
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) //0x40020014

#define GPIOA_IDR_Addr    (GPIOA_BASE+16) //0x40020010
wsnfly
3楼-- · 2019-07-21 12:47
回复【2楼】zuozhongkai:
---------------------------------
把+12改成+20?
taizonglai
4楼-- · 2019-07-21 17:02
 精彩回答 2  元偷偷看……

一周热门 更多>