STM32内部APB2总线为GPIO提供时钟,其工作频率一般为多少赫兹?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32内部APB2总线为GPIO提供时钟,其工作频率一般为多少赫兹?相关的知识,希望对你有一定的参考价值。

参考技术A 这样的问题没有意义。
首先,STM32分为很多个产品系列,不同产品系列的性能差异很大。例如F10x系列的APB2撑死能到72MHz,而H74x/75x系列就能到240MHz。

其次,APB2到底跑多少也是由用户自己决定的,例如如果SYSCLK只跑8MHz那么APB2当然撑死也只有8MHz。

STM32的GPIO 7个寄存器地址是多少 映射地址怎么设置

以GPIOA为例:

GPIOA 的基地址是怎么算出来的呢?因为 GPIO 都是挂载在 APB2 总线

之上,所以它的基地址是由 APB2 总线的基地址+GPIOA 在 APB2 总线上的偏移地址决定

的。同理依次类推,我们便可以算出 GPIOA 基地址了。这里设计到总线的一些知识,我们

在后面会讲到。下面我们打开 stm32f10x.h 定位到 GPIO_TypeDef 定义处:

typedef struct

__IO uint32_t CRL;

__IO uint32_t CRH;

__IO uint32_t IDR;

__IO uint32_t ODR;

__IO uint32_t BSRR;

__IO uint32_t BRR;

__IO uint32_t LCKR;

GPIO_TypeDef;

然后定位到:

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)

可以看出,GPIOA 是将 GPIOA_BASE 强制转换为 GPIO_TypeDef 指针,这句话的意思是,

GPIOA 指向地址 GPIOA_BASE,GPIOA_BASE 存放的数据类型为 GPIO_TypeDef。然后双

击“GPIOA_BASE”选中之后右键选中“Go to definition of ” ,便可一查看 GPIOA_BASE

的宏定义:

#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)

依次类推,可以找到最顶层:

#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)

#define PERIPH_BASE ((uint32_t)0x40000000)

所以我们便可以算出 GPIOA 的基地址位:

GPIOA_BASE= 0x40000000+0x10000+0x0800=0x40010800


这些都可以在《STM32开发指南-库函数版本_V1.3》(P.123)4.6节 【MDK  中寄存器地址名称映射分析】中找到,《STM32 中文参考手册 V10》中的寄存器地址映射表(P159)介绍的更详细,我想你应该有这两个手册吧?没有的话就下载吧,我已经上传了,费用。。。就不收了。


不过话说回来啊,楼上的 08274061 说的其实没错,不看手册想学好32真的很难,我也在学32,刚好看到这一节,刚好碰见你的问题,就顺便解答了~~好好学吧同学~~


参考技术A 看手册,学习stm32一定要养成看手册的习惯,最好看英文版的,因为翻译过来的毕竟有一些不符合原作者的意图,要靠自己。想查询这么基础的设置问题,直接ctrl+F查找关键字就能找到你想要答案,其实很简单,不用给分了。 参考技术B 看手册。
也可以通过库文件中的宏定义看到。

以上是关于STM32内部APB2总线为GPIO提供时钟,其工作频率一般为多少赫兹?的主要内容,如果未能解决你的问题,请参考以下文章

STM32定时器的两个小难点

STM32 ADC详解

STM32定时器输出PWM频率和步进电机控制速度计算

STM32定时器输出PWM频率和步进电机控制速度计算

STM32F10X-定时器/计数器

STM32F103 AFIO时钟疑问