zoukankan      html  css  js  c++  java
  • 认识STM32的系统时钟

    STM32共有五个时钟源,分别是:

    • HSI是高速内部时钟、RC振荡器,频率为8MHz;
    • HSE是高速外部时钟,频率范围为4~6MHz; (可接石英/陶瓷谐振器或者接外部时钟源)
    • LSI是低速内部时钟,频率40kHz; (独立看门狗时钟源、可作RTC时钟源)
    • LSE是低速外部时钟,频率为32.768kHz石英晶体; (主要RTC时钟源)
    • PLL是锁相环倍频输出,频率可选择为HSI/2、HSE或者HSE/2、倍频可选择2~16倍,但其输出频率最大不超过72MHz;

          此处重点介绍系统时钟,一般其他所有的外设时钟的来源都是SYSCLK,SYSCLK通过AHB分频器分频之后送给各个模块使用。这些模块中包括APB1和APB2分频器。

    • 送给APB1分频器,输出一路供APB1外设使用(最大频率为36MHz),另一路送给定时器(Timer)2、3、4倍频器使用;
    • 送给APB2分频器,输出一路供APB2外设使用(最大频率为72MHz),另一路送个定时器(Timer)1倍频使用;

          具体如下表:

    APB外设内容表
    名称 类型     外设内容
    APB1 低速外设

    电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3等

    APB2 高速外设 UART1、SPI1、Timer1、ADC1、ADC2、普通IO口(PA~PE)、第二功能IO口等

          以上的时钟输出中很多都是带使能控制的,例如:

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);

    是对PD和PG口进行时钟使能。

          STM32时钟系统配置初始化有函数Sys-temInit()之外,其它的配置在stm32f10x-rcc.h文件之中。

          对于系统时钟默认的情况下在SystemInit函数的SetSysClock()函数中判断的,具体如下:

          static void SetSysClock(void)
           {
             #ifdef SYSCLK_FREQ_HSE
             SetSysClockToHSE();
             #elif defined SYSCLK_FREQ_24MHz
             SetSysClockTo24();
             #elif defined SYSCLK_FREQ_36MHz
             SetSysClockTo36();
             #elif defined SYSCLK_FREQ_48MHz
             SetSysClockTo48();
             #elif defined SYSCLK_FREQ_56MHz
             SetSysClockTo56();
             #elif defined SYSCLK_FREQ_72MHz
             SetSysClockTo72();
             #endif
           }

    这段代码是判定系统宏定义的时钟是多少,然后设置相应的值,系统默认为72MHz:

                                       #define SYSCLK_FREQ_72MHz  72000000

    如果需要设置其他频率的时钟,只需要在stm32f10x-rcc.c文件的第115行注释掉上面代码,加入将需要的频率代码即可。

          在SystemInit()函数中设置的系统时钟的大小如下:

                    • SYSCLK(系统时钟)=72MHz;
                    • AHB总线时钟(使用系统时钟)=72MHz;
                    • APB1总线时钟(PCLK1)=36MHz;
                    • APB2总线时钟(PCLK2)=72MHz;
  • 相关阅读:
    在sql中日期转化
    SQL Server标准版企业版个人版区别
    Oracle 9i默认用户
    SQL Server和Oracle的常用函数对比
    Delphi6函数大全
    Oracle 不支持 TOP 关键字
    c#连接数据库
    VC6安装及打开工程文件问题的解决
    error C4430: 缺少类型说明符 假定为 int。注意: C++ 不支持默认 int
    VC++ dll导出类
  • 原文地址:https://www.cnblogs.com/lwangj/p/5071565.html
Copyright © 2011-2022 走看看