OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10663|回复: 4

PBout()求助

[复制链接]

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
发表于 2014-6-22 18:22:41 | 显示全部楼层 |阅读模式
5金钱
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)) 


最佳答案

查看完整内容[请看2#楼]

#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&n ...
为了雅典娜?为了爱与正义
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3337
金钱
3337
注册时间
2013-5-28
在线时间
467 小时
发表于 2014-6-22 18:22:42 | 显示全部楼层
#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)  //输入
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-6-22 18:33:09 | 显示全部楼层
这几句不要改,但是各个IO口的地址映射要改,主要是括号里的20和16.一下只是GPIOA的,其他的一样
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) //0x40020014

#define GPIOA_IDR_Addr    (GPIOA_BASE+16) //0x40020010
开往春天的手扶拖拉机
回复

使用道具 举报

181

主题

311

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1055
金钱
1055
注册时间
2012-8-26
在线时间
52 小时
 楼主| 发表于 2014-6-22 19:19:29 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
把+12改成+20?
为了雅典娜?为了爱与正义
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-6-22 23:53:35 | 显示全部楼层
嗯,是的,好像还有那个+16
开往春天的手扶拖拉机
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表