STM32
直播中

李正茂

7年用户 176经验值
私信 关注
[问答]

请问MDK是怎样操作STM32地址的?

以下是关于STM32地址操作的心得,同时还有个问题请教大家
---------------------------------------------------------------------------------------------------------------
记得学51单片机时,如果要对某个特殊功能寄存器操作,在C51中可以用sfr先定义这个寄存器                                             
但是现在STM32中却看不到SFR了,那么它是怎么操作那么多的寄存器的呢? 拿GPIOA举例来说
我顺藤摸瓜找到了它是怎样一步步被定义出来的,见下面的代码
    #define PERIPH_BASE                      ((u32)0x40000000)                        //定义外设基地址   
    #define APB2PERIPH_BASE      (PERIPH_BASE + 0x10000)               //定义APB2外设基地址
    #define GPIOA_BASE             (APB2PERIPH_BASE + 0x1800)         //定义GPIOE的基地址              
    #define GPIOA                                  ((GPIO_TypeDef *) GPIOA_BASE)       //可以推测出这句话定义了一个地址在 GPIOA_BASE 的GPIO_TypeDef 结构体
好了下面可以在我们的程序中操作寄存器了,比如让GPIOA输出全零;
    GPIOA->ODR=0x0000;
-------------------------------------------------------------------------------------------------------------------
问题来了:1、 上面代码中宏定义加括号是什么用法,为什么要加括号,
               2、 第一条语句中的u32又是什么用法,没见过这样用的
               3、 我在谭浩强书上没找到这种用法,求高人详细分析
再问个有趣的问题,要是STM32可以在运行的时候根据CPU的使用率(用ucos可以统计)调节PLL的值来降低STM32的功耗,但是问题是PLL一旦设定好后貌似不能再直接修改了,有没有其他办法

回帖(10)

李凌平

2019-10-11 06:49:07
就是个类型说明,你不要那个u32也可以.
举报

贾佳斌

2019-10-11 07:05:39
加括号是什么用法呢
举报

李桂荣

2019-10-11 07:20:49
自己顶  求原子哥解答一下第二个问题
举报

孔维源

2019-10-11 07:32:48
william hill官网 有个此类问题的帖子,说的很详细,LZ搜索 一下。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分