stm32 IO口地址映射 位带操作的问题

2019-07-20 23:13发布

原子老师:
sys.h 里的代码如下
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)

疑点:
PAout(0)~PAout(15) ,也就是n的值应该为0~15,但在位带操作
BITBAND(addr, bitnum)中 bitnum的值为0~7,也就是只有8位,8~15位超出了
bitnum的值,这样怎么来进行处理呢?
或我那个地方理解错了?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
zhouzhiqiao223
1楼-- · 2019-07-21 01:35
这样有问题么?
luolingy
2楼-- · 2019-07-21 03:43
zhouzhiqiao223 发表于 2019-6-12 16:40
这样有问题么?

能不能这样理解:
GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C

GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C

GPIOA_ODR_Addr对应的 BITBAND的启始地址为:0x42010980
GPIOB_ODR_Addr对应的 BITBAND的启始地址为:0x42010D80
A到B的地址空间有OxD80-980=1024个存储单元,而n=0~15 ,只需要16×4=64个单元就可以了,也就是还有960个存储单元是空闲的?
warship
3楼-- · 2019-07-21 09:12
 精彩回答 2  元偷偷看……
warship
4楼-- · 2019-07-21 13:48
进一步地,还有此帖http://www.openedv.com/forum.php?mod=viewthread&tid=294788
有问题可以探讨
zhouzhiqiao223
5楼-- · 2019-07-21 13:59
 精彩回答 2  元偷偷看……
zhouzhiqiao223
6楼-- · 2019-07-21 14:55
luolingy 发表于 2019-6-16 11:54
能不能这样理解:
GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C

寄存器里面的地址分配不是按照你自己的理解分配的,具体你可以看寄存器手册,除了ODR寄存器还有IDR寄存器的。你纠结这个意义不大

一周热门 更多>