stm32L152系统时钟无法倍频到32M

2019-10-15 19:49发布

每次都死在同一个地方,代码如下,不倍频没有错误,一倍频就出现错误,麻烦大家帮忙看看啊
void Clock_Init(void)

{
  u8 i;
  RCC_DeInit  ( );                                                        
  RCC_HSEConfig(RCC_HSE_OFF);
  RCC_HSICmd(ENABLE);   
  while(RCC_GetFlagStatus  ( RCC_FLAG_HSIRDY) == RESET )        
  {
   }  
         FLASH_PrefetchBufferCmd(ENABLE);         
         FLASH_SetLatency(FLASH_Latency_1);         
         RCC_PLLConfig (RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2);                         
         RCC_HCLKConfig(RCC_SYSCLK_Div1);                              //AHB =  SYSCLK       32M
         RCC_PCLK2Config(RCC_HCLK_Div1) ;                          
         RCC_PCLK1Config(RCC_HCLK_Div1);                             
         RCC_PLLCmd(ENABLE);
         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)            //PLL
        {
        }
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK) ;                   
       while(RCC_GetSYSCLKSource()!= 0x0C)                        //每次都死在这里
        {

        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
正点原子
1楼-- · 2019-10-15 23:42
死在哪里??
秋扫落叶
2楼-- · 2019-10-16 02:58
 精彩回答 2  元偷偷看……
秋扫落叶
3楼-- · 2019-10-16 07:28
回复【2楼】正点原子:
---------------------------------
整体程序如下
void Clock_Init(void)
{
u8 i;
    RCC_DeInit  ( );                                      
    RCC_HSEConfig(RCC_HSE_OFF); //关闭HSE时钟
    RCC_HSICmd(ENABLE);                                             //时能HSI时钟
    while(RCC_GetFlagStatus  ( RCC_FLAG_HSIRDY) == RESET )          //等待HSI时钟稳定
    {
    }  
    FLASH_PrefetchBufferCmd(ENABLE);                                //开启FLASH预读缓冲功能,加速FLASH的读取
    FLASH_SetLatency(FLASH_Latency_1);                              //FLASH时序延迟1个周期,等待总线同步操作
    RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2);     //HSI作为PLL时钟4倍频,2分频
    RCC_HCLKConfig(RCC_SYSCLK_Div1);                                //AHB =  SYSCLK       16M
    RCC_PCLK2Config(RCC_HCLK_Div1) ;                                //APB2=16M
    RCC_PCLK1Config(RCC_HCLK_Div1);                                 //APB1=16M
    RCC_PLLCmd(ENABLE);                                           //只能PLL时钟
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)            //PLL稳定
    {
     }
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK) ;                    //选用PLL时钟为系统时钟32M
 i=RCC_GetSYSCLKSource();
    while(RCC_GetSYSCLKSource()!= 0x0C)//while(RCC_GetSYSCLKSource()!= 0x0C)//  //等待时钟稳定
    {

    }   
}
秋扫落叶
4楼-- · 2019-10-16 13:13
回复【2楼】正点原子:
---------------------------------
运行到 i=RCC_GetSYSCLKSource();时,点击step over运行,函数死在了里面,停止点击step,程序提示错误如下:
出现 Debuger-Cortex-M Error
Could not stopCortex-M device! laese check the JTAG cable.
秋扫落叶
5楼-- · 2019-10-16 18:57
回复【5楼】秋扫落叶:
---------------------------------
按照 这个方法修改  
使用keil U4,用Jlink对STM32板子在线仿真后,全速运行后死机,停止运行后弹出“Could not stop Cortex-M device!Please check the JTAG cable ”,硬件的情况网上有其他的,我的问题是编译器设置的问题,对Option中的c/c++中进行1级程序优化选择、勾选“Optimize for time”(这个应该和网上谈到晶振设置过大原因类是吧)、勾选“One ELF Section per Function”;勾选Option中ASM的“Thumb Mode”(不是Cortex-M3包含了Thumb指令集的呢?)。解决是这样解决的,反正出问题的时候都是设置了c/c++和asm.

发现i=i=RCC_GetSYSCLKSource();可以运行过去,但是查看变量时,i没有值,运行
while(RCC_GetSYSCLKSource()!= 0x0C)//while(RCC_GetSYSCLKSource()!= 0x0C)//  //等待时钟稳定 
    { 

    }    
提示Cannot access Memory,程序一直也出不去~
三叶草
6楼-- · 2019-10-16 23:31
很明显你这个库函数的值不能是0x0c

一周热门 更多>