STM32—— AHB、APB详解

2018-06-07 20:54:36来源: eefocus 关键字:STM32  AHB  APB

STM32—— AHBAPB详解2016-07-14 20:35 590人阅读 评论(0) 收藏 举报本文章已收录于:

版权声明:本文为博主原创文章,未经博主允许不得转载。

一、概括
首先,说点不靠谱的,APB和AHB总线,我个人感觉这个类似于个人PC系统里的北桥和南桥总线。
南桥总线上挂接的都是鼠标、键盘这些慢速的设备,北桥上挂接显卡等高速设备。南桥频率低,北桥频率高。另外,南桥最后也要接到北桥上。
这些感觉都类似于APB和AHB。


AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种“系统总线”。

AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。APB,是Advanced
Peripheral Bus的缩写,这是一种外围总线。

APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像  AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。再往下,APB2负责AD,I/O,高级TIM,串口1;APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。

这两者都是总线,符合AMBA规范。


二、准备知识


    片上总线标准种类繁多,而由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。AMBA规范主要包括了AHB(Advanced
High performance Bus)系统总线和APB(Advanced Peripheral Bus)外围总线。二者分别适用于高速与相对低速设备的连接。

由于时钟是一个由内而外的东西,具体设置要从寄存器开始。



RCC 寄存器结构,RCC_TypeDeff,在文件“stm
32f10x_map.h”中定义如下: 

typedef struct

{

vu32 CR;

vu32 CFGR;

vu32 CIR;

vu32 APB2RSTR;

vu32 APB1RSTR;

vu32 AHBENR;

vu32 APB2ENR;

vu32 APB1ENR;

vu32 BDCR;

vu32 CSR;

} RCC_TypeDef;



    这些寄存器的具体定义和使用方式参见芯片手册,因为C语言的开发可以不和他们直接打交道,当然如果能够加以理解和记忆,无疑是百利而无一害。



    如果外接晶振为8Mhz,最高工作频率为72Mhz,显然需要用PLL倍频9倍,这些设置都需要在初始化阶段完成。为了方便说明,以例程的RCC设置函数,并用中文注释的形式加以说明:





static void RCC_Config(void)

{



    RCC_DeInit();  



    RCC_HSEConfig(RCC_HSE_ON);



    HSEStartUpStatus = RCC_WaitForHSEStartUp();



    if (HSEStartUpStatus == SUCCESS)

    {

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  



        FLASH_SetLatency(FLASH_Latency_2);



        RCC_HCLKConfig(RCC_SYSCLK_Div1);



        RCC_PCLK2Config(RCC_HCLK_Div1);



        RCC_PCLK1Config(RCC_HCLK_Div2);



        RCC_ADCCLKConfig(RCC_PCLK2_Div6);



        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);



        RCC_PLLCmd(ENABLE);



        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

        {}



        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);



        while (RCC_GetSYSCLKSource() != 0x08)

        {}

    }

    

    //使能外围接口总线时钟,注意各外设的隶属情况,不同芯片的分配不同,到时候查手册就可以

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);



    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE |

                           RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG |

                           RCC_APB2Periph_AFIO, ENABLE);

}

    由上述程序可以看出系统时钟的设定是比较复杂的,外设越多,需要考虑的因素就越多。同时这种设定也是有规律可循的,设定参数也是有顺序规范的,这是应用中应当注意的,例如PLL的设定需要在使能之前,一旦PLL使能后参数不可更改。



    经过此番设置后,对于外置8Mhz晶振的情况下,系统时钟为72Mhz,高速总线和低速总线2都为72Mhz,低速总线1为36Mhz,ADC时钟为12Mhz,USB时钟经过1.5分频设置就可以实现48Mhz的数据传输。



    一般性的时钟设置需要先考虑系统时钟的来源,是内部RC还是外部晶振还是外部的振荡器,是否需要PLL。然后考虑内部总线和外部总线,最后考虑外设的时钟信号。遵从先倍频作为CPU时钟,然后在由内向外分频,下级迁就上级的原则。 


三、时钟&&预分频



如果使用内部RC振荡器而不使用外部晶振,请按照如下方法处理:

1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。
2)对于少于100脚的产品,有2种接法:
   i)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能。
   ii)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面i)节省2个外部电阻。



STM32时钟系统结构图

    时钟是STM32单片机的脉搏,是单片机的驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。

STM32单片机的时钟可以由以下3个时钟源提供:

1、HSI:高速内部时钟信号STM32单片机内带的时钟 (8M频率), 精度较差

2、HSE:高速外部时钟信号,精度高。

       来源:i. HSE外部晶体/陶瓷谐振器(晶振);

            ii.HSE用户外部时钟         

3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源 一般作为RTC时钟使用

    STM32单片机的将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。

    上图为STM32整个时钟架构。

    为了便于更好了解STM32单片机的时钟,下面以HSE时钟的使用为例。

    设置时钟流程:

    1、将RCC寄存器重新设置为默认值      RCC_DeInit

    2、打开外部高速时钟晶振HSE          RCC_HSEConfig(RCC_HSE_ON);

    3、等待外部高速时钟晶振工作         HSEStartUpStatus = RCC_WaitForHSEStartUp();

    4、设置AHB时钟                     RCC_HCLKConfig;

    5、设置高速AHB时钟                 RCC_PCLK2Config;

    6、设置低速速AHB时钟               RCC_PCLK1Config

    7、设置PLL                        RCC_PLLConfig

    8、打开PLL                        RCC_PLLCmd(ENABLE);

    9、等待PLL工作            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)  

    10、设置系统时钟          RCC_SYSCLKConfig

    11、判断是否PLL是系统时钟      while(RCC_GetSYSCLKSource() != 0x08)

    12、打开要使用的外设时钟       RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

 

    在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。

    HSI是高速内部时钟,RC振荡器,频率为8MHz。

    HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

    LSI是低速内部时钟,RC振荡器,频率为40kHz。

    LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

    PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

其中40kHz的LSI供独立看门狗IWDG使用,另外它还

[1] [2]

关键字:STM32  AHB  APB

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018060739646.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F407 flash内存
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

网友正在学习IC视频

推荐阅读
全部
STM32
AHB
APB

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved