tag 标签: hsi

相关博文
  • 热度 24
    2013-7-30 12:17
    10599 次阅读|
    4 个评论
    首先,必须屏弊掉库函数部分,因为此部分在启动文件中,先于main函数启动。 void SystemInit (void) { #if 0   /*! RCC system reset(for debug purpose) */   /*! Set HSION bit 复位值是83H   内部8M*/       RCC-CR |= (uint32_t)0x00000001;     /*! Reset SW , HPRE , PPRE1 , PPRE2 , ADCPRE and MCO bits */   RCC-CFGR = (uint32_t)0xF8FF0000;    /*! Reset HSEON, CSSON and PLLON bits */   RCC-CR = (uint32_t)0xFEF6FFFF;   /*! Reset HSEBYP bit */   RCC-CR = (uint32_t)0xFFFBFFFF;   /*! Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE bits */   RCC-CFGR = (uint32_t)0xFF80FFFF;   /*! Disable all interrupts */   RCC-CIR = 0x00000000;       /*! Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */   /*! Configure the Flash Latency cycles and enable prefetch buffer */   SetSysClock(); #endif }   屏蔽上面函数后,配置时钟源: void RCC_Configuration(void) {   RCC_DeInit();     RCC_HSICmd(ENABLE);     while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)   {     }      if(1)   {     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);       FLASH_SetLatency(FLASH_Latency_2);       RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB时钟为系统时钟SYSCLK       RCC_PCLK2Config(RCC_HCLK_Div1);  //APB1时钟为HCLK/2,其中HCLK为AHB时钟       RCC_PCLK1Config(RCC_HCLK_Div2);  //APB2时钟为HCLK       //设置 PLL 时钟源及倍频系数       RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);       //使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE       RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能       //等待指定的 RCC 标志位设置成功 等待PLL初始化成功       while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)    {       }    //设置系统时钟(SYSCLK) 设置PLL为系统时钟源      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);    //等待PLL成功用作于系统时钟的时钟源          // 0x00:HSI 作为系统时钟       // 0x04:HSE作为系统时钟       // 0x08:PLL作为系统时钟       while(RCC_GetSYSCLKSource() != 0x08)    {       }       }    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |         RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);    //   RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 | RCC_APB1Periph_I2C2, ENABLE);    //   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); } 然后在主函数调用就OK了。
  • 热度 16
    2013-4-7 17:31
    12193 次阅读|
    1 个评论
    现在新做了块STM32的板子,有点儿悲摧,晶振还没有,但程序还是要调试的,所以考虑使用内部时钟HSI。 首先在主程序中注释掉SystemInit() 然后使用下面的函数做为系统时钟的初始化函数 void RCC_Configuration(void) {   RCC_DeInit();//将外设 RCC寄存器重设为缺省值     RCC_HSICmd(ENABLE);//使能HSI     while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)//等待HSI使能成功   {   }     if(1)   {     //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);     //FLASH_SetLatency(FLASH_Latency_2);         RCC_HCLKConfig(RCC_SYSCLK_Div1);        RCC_PCLK1Config(RCC_HCLK_Div2);     RCC_PCLK2Config(RCC_HCLK_Div1);          //设置 PLL 时钟源及倍频系数     RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);                     //使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE     RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能     //等待指定的 RCC 标志位设置成功 等待PLL初始化成功     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)     {     }       //设置系统时钟(SYSCLK) 设置PLL为系统时钟源     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);       //等待PLL成功用作于系统时钟的时钟源     //  0x00:HSI 作为系统时钟      //  0x04:HSE作为系统时钟      //  0x08:PLL作为系统时钟       while(RCC_GetSYSCLKSource() != 0x08)     {     }   } }   当然这段程序是从网上找来的,做了适当的修改。背景设为绿色的部分已经注释掉的代码,可能跟库版本有关,先注释掉了,要不无法通过编译。 现在把程序的流程理一下 中间配置时钟的: RCC_HCLKConfig(RCC_SYSCLK_Div1);    RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); 分别对应下图①②③标注的部分。RCC_HCLKConfig(RCC_SYSCLK_Div1)——表示AHB时钟为系统时钟SYSCLK; RCC_PCLK1Config(RCC_HCLK_Div2)——表示APB1时钟为HCLK/2,其中HCLK为AHB时钟;RCC_PCLK2Config (RCC_HCLK_Div1)——表示APB2时钟为HCLK.   设置PLL,对应图中红圈儿部分,设置PLL时钟源和倍频系统。 设置系统时钟,对应图中蓝圈部分。 要了解系统时钟的,可以参考 http://bbs.ednchina.com/BLOG_ARTICLE_3008928.HTM   参考文献: 1.http://blog.21ic.com/user1/5864/archives/2009/64565.html 2. http://bbs.ednchina.com/BLOG_ARTICLE_3008928.HTM
相关资源