初级会员

- 积分
- 50
- 金钱
- 50
- 注册时间
- 2013-5-21
- 在线时间
- 0 小时
|
已经玩单片机一年多了,现在还是大二,学的专业是电子,电机类的。所以对于单片机一直抱着态度就是会用就行,但是纠结了很久还是想搞清楚...那个GPIO地址在编程中是怎么起作用的的,看了原子哥的程序,自己也想接触接触,不知道从哪里入手...还请高手指点一二。
这里有个问题是那个偏移量 例:010h看不懂,以为是16位的但是H是怎么说(刚看懂了,H为16位。),还有看了原子哥的程序:
#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+12) //0x4001080C
其中的IO口映射为什么还要+12,还有就是+(addr &0xFFFFF)<<5)左移有点看不清楚,还在摸索中,求指点。。
*((volatile unsigned long *)(0X40010800+0X00C))=0X80; 用这段语句对GPIO的ODR的PA7输出高,之前有设置IO口为推挽输出,但是结果却PA6,PA5等一堆都输出高电平。。。
按照STM32的说明书我做了如下的改动
*((volatile unsigned long *)(0X40000000+0X1080C<<5+7<<2))=1;
还是不行= =、。、求解
|
|