STM32F107VC 锁相环初始化

发布者:冰雪勇士最新更新时间:2016-03-01 来源: eefocus关键字:STM32F107VC  锁相环  初始化 手机看文章 扫描二维码
随时随地手机看文章
AHB与APB的地位相当于PC中的南北桥,是两道独立的片内总线。

AHB:advanced high-performance bus;APB: advanced peripherals bus。

static void SetSysClockTo72(void)
{
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /*

     SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------

      SYSCLK   由PLL时钟,外部高速时钟,内部高速时钟获得,最大为72MHz

      HCLK       由HCLK经过AHB预分频器得到,最大72MHz,至AHB总线,核心存储器和DMA

      PCLK2     最大72MHz ,至APB2 外设

      PCLK1     最大36MHz,至APB1外设

*/    
  /* 使能高速外部晶振*/    
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /* 等待外部高速时钟稳定*/
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;  
  } while((HSEStatus == 0) && (StartUpCounter != HSEStartUp_TimeOut));

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01;
  }
  else
  {
    HSEStatus = (uint32_t)0x00;
  } 

  if (HSEStatus == (uint32_t)0x01)
  {
    /* FLASH 存取控制寄存器配置  使能预取,两个等待周期(36MHz --72MHz为2个等待周期)*/
    FLASH->ACR |= FLASH_ACR_PRFTBE;

    /* Flash 2 wait state */
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;   

 

    /* 先对HCLK PCLK1 PCLK2初始化

       时钟配置寄存器   上电初始化初值应为为 0 如下配置的结果是:

       8M的高速内部时钟为系统时钟

       HCLK = 8M

       PCLK2 = 8M

       PCLK1 = 4M

      

 */
    /* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    
    /* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

#ifdef STM32F10X_CL
    /* Configure PLLs ------------------------------------------------------*/

    /* 如果定义了STM32F10x_CL 则进行如下 配置 该宏定义在编译选项中定义 */
    /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
    /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz */
    /*

        PLL2 配置: 时钟信号输入源为PREDIV1, 8倍频后5分频 
   */

    /*清零相关控制域*/      

  RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);

   /* 配置CFGR2寄存器*/
    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
  
    /* Enable PLL2 */
    RCC->CR |= RCC_CR_PLL2ON;
    /* Wait till PLL2 is ready */
    while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }
    
   
    /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */ 
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 | 
                            RCC_CFGR_PLLMULL9); 
#else    
    /*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
#endif /* STM32F10X_CL */

 

   /* Enable PLL   使能PLL */
    RCC->CR |= RCC_CR_PLLON;

    /* Wait till PLL is ready */
    while((RCC->CR & RCC_CR_PLLRDY) == 0)
    {
    }
    
    /*

      Select PLL as system clock source

       选择PLL时钟作为系统时钟,并等待稳定 

 */ 
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;   

    /* Wait till PLL is used as system clock source */
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
    {
    }
  }
  else
  { /* If HSE fails to start-up, the application will have wrong clock 
         configuration. User can add here some code to deal with this error */
  }
}

HSE(25MHZ)->PREDIV2(5分频)——5MHZ——>PLL2MUL(8倍频)——40MHZ——>PREDIV1SCR(选择PLL2)——40MHZ——>PREDIV1(5分频)——8MHZ——>PLLSCR(PREDIV1输入)——8MHZ——>PLLMUL(9倍频)——72MHZ——>SW(选择PLL)——SYSCLK(72MHZ).

关键字:STM32F107VC  锁相环  初始化 引用地址:STM32F107VC 锁相环初始化

上一篇:STM32 模拟I2C
下一篇:STM32串口使用偶校验时初始化

推荐阅读最新更新时间:2024-03-16 14:45

基于MC145152-2芯片的频率合成器的设计
1 引 言      频率合成技术是现代通信的重要组成部分,它是将一个高稳定度和高准确度的基准频率经过四则运算,产生同样稳定度和准确度的任意频率。随着大规模集成电路的发展,利用锁相环频率合成技术研制出了很多频率合成集成电路。其中,以摩托罗拉公司的MC14515x-2系列较为先进,本文将介绍一种基于MC145152-2芯片的频率合成器。这种锁相环频率合成器的稳定度和准确度与基准频率相当,不产生额外的误差。它在移动通信等领域有着广泛的应用。 2 MC145152-2芯片的特点及功能      MC145152-2芯片是摩托罗拉公司生产的锁相环频率合成器专用芯片。它是MC145152-1芯片的改进型。MC145152-2芯片具有
[网络通信]
快速学Arm(16)--PLL(锁相环2)
通过前一篇介绍,我们知道在Arm的电路在启动或者掉电的时候,是没有使用PLL,因为在掉电的时候PLL是没法工作的.既然知道这一点,在掉电的时候应该断开PLL,而是用晶振直接给电路提供必要的晶振,例如RTC等. PLL主要有下面这四个寄存器来控制和读取状态: 0xE01FC080 PLLCON 0xE01FC084 PLLCFG 0xE01FC088 PLLSTAT 0xE01FC08C PLLFEED 其中: PLLCON寄存器:包涵使能连接PLL的位,也就是控制PLL是否进行连接.这个连接需要在向PLLFEED发送正确的信息(馈送序列)的时候才生效,否则及时将使能位置位,PLL也不会连接到电路中.
[单片机]
基于PI控制的全数字锁相环设计
    锁相环在通信、无线电电子学和自动控制等领域得到了极为广泛的应用,它已成为各类电子系统中一个十分重要的部件。由于全数字锁相环(ADPLL)消除了模拟锁相环中压控振荡器(VCO)的非线性,鉴相器不精确,部件易饱和以及高阶环不稳定等特点,而其本身又具有参数稳定、可靠性高、易于集成的特点,因此,ADPLL得到了越来越多的应用。传统的数字锁相环系统是希望通过采用具有低通特性的环路滤波器,获得稳定的振荡控制数据。对于数字滤波器采用基于DSP的运算电路的全数字锁相环,当环路带宽很窄时,环路滤波器的实现将需要很大的电路量,这给专用集成电路的应用和片上系统SoC(System on Chip)的设计带来一定困难。另一种类型的全数字锁相环是采用
[嵌入式]
STM32笔记---RTC的初始化
RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊 入门的知识请大家看手册,我来总结: 总之,RTC只是个能靠电池维持运行的32位定时器over! 所以,使用时要注意以下问题: 1.上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示: 往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。 上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它 如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了 这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以
[单片机]
STM8S003F3 内部时钟初始化以及定时器做延时的使用
STM8S003F3 内部晶振初始化代码如下: CLK_DeInit(); CLK_LSICmd(ENABLE); CLK_HSICmd(ENABLE); while(SET != CLK_GetFlagStatus(CLK_FLAG_HSIRDY)); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (1分频) 这里我使用timer4来做例子,代码如下: //延时10us (2分频=8M 计数80个脉冲) TIM4_TimeBaseInit(TIM4
[单片机]
可检测差分GPS校正信号的窄频移数字鉴别器电路
通过低频(285~325kHz)发射台给GPS信号(DGPS)发送差分校正信号,发送数据率为100bps或200bps。此调制为最小频移键控(MSK),会产生载波偏移为位速率的一半的伪频移键控(FSK)。对于100bps信号,载波偏移只有±25Hz。对于1kHz的接收器IF频率,IF信号偏移在975~1025 Hz之间。两组数据对应时间分别为1026μs和976μs。检测调制信号的最初工作都集中在锁相环和模拟鉴别器上,但如何针对每种速率进行优化或调节呢? 美国海岸警卫队(U.S. Coast Guard)通过低频(285~325kHz)发射台给GPS信号(DGPS)发送差分校正信号。发送数据率为100bps或200bps
[模拟电子]
STM32F103_ADC单通道电压采集中断读取初始化配置步骤
1. 初始化ADC所用的GPIO。 2. 利用ADC_InitTypeDef 配置ADC相关参数,并初始化。 3. 配置ADC时钟,选择合适的分频因数。 4. 设置ADC通道转换顺序与采样时间。 5. 配置中断向量表,在ADC中断函数中读取采样数据。 6. 使能ADC. 7. 使能软件触发ADC转换。
[单片机]
解决stm8s003中timer2配置初始化中引起中断更新
概述 本文简要记述关于stm8s003中初始化timer2立即进入中断的解决方法: 在调试stm8 tim2作为100ms定时器的时候发现,在enable timer2后,不久远远小于100ms大概800us左右就会立即进入中断(更新事件触发),无论是怎样设置先后顺序,以及在enable中断之前清除中断状态位都无法解决进入中断的问题。此处澄清真的不是st的bug,不过这种设计不是我等小白能够领悟到的,哈哈! 搜索 在度娘中搜索到的结果一般解决方法都是等待第一次触发后清除事件再打开中断。出于对知(领)识(导)的好(压)奇(迫),便寻找解决方法,最终找到了问题的根源(google大法好:https://community.st.c
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved