今天看认真看了下原子哥F407的system文件夹,发现sys.h中的ODR和IDR地址不对,但程序又能正常工作,求解释

2019-07-20 14:01发布

今天仔细看了下原子哥提供的F4的SYSTEM文件夹,发现sys.h中的IDR和ODR寄存器地址不对,但程序又能正常工作,不知道怎么回事。下图是sys.h位带操作实现原理:
F407位带操作实现原理 F407位带操作实现原理
我们来计算GPIOB_ODR_Addr和GPIOB_IDR_Addr的地址:
GPIOB_ODR_Addr = 0x4000 0000 + 0x0002 0000 + 0x0400 + 0x20 = 0x40020420,
但是查看《STM32Fxx中文参考手册》


第2.3章节 ,GPIOB的地址边界是:0x4002 0400 - 0x4002 07FF;
第7.4.6 章节,GPIO 端口输出数据寄存器 (GPIOx_ODR) 的偏移地址为:0x14;
第7.4.9 章节,GPIO 复用功能低位寄存器 (GPIOx_AFRL) 的偏移地址为:0x20;


那么
GPIOB_ODR的地址为:0x4002 0400 + 0x14 = 0x4002 0414 ;
GPIOB_AFRL的地址为:0x4002 0400 + 0x20 = 0x4002 0420;

那么问题来了:GPIOB_ODR_Addr 的地址 == GPIOB_AFRL的地址,但是代码注释后面的地址又都是正确的,这就这纳闷了,求哪位高手解答一下(新手,金币不多)

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。