s284630173 发表于 2015-1-29 14:59

STM32L152的时钟每次都死里面

时钟内部时钟倍频到32Mhz,有个MSI时钟一直没弄个明白怎么设置,希望大神能帮帮我!
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)                        //每次都死在这里
      {

      }
}

s284630173 发表于 2015-1-29 15:00

顶一下!希望用L系列的人大家一起讨论讨论

海盗爱飞鱼 发表于 2015-10-2 14:39

求外部时钟HSE的配置函数void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;                  //定义外部高速晶体启动状态枚举变量
RCC_DeInit();                                    //复位RCC外部设备寄存器到默认值
RCC_HSEConfig(RCC_HSE_ON);                     //打开外部高速晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp();      //等待外部高速时钟准备好
// while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
    if(HSEStartUpStatus == SUCCESS)                  //外部高速时钟已经准别好
{
    FLASH_PrefetchBufferCmd(ENABLE); //开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法.位置:RCC初始化子函数里面,时钟起振之后
    FLASH_SetLatency(FLASH_Latency_1);                  //flash操作的延时
             
    RCC_HCLKConfig(RCC_SYSCLK_Div1);               //配置AHB(HCLK)时钟等于==SYSCLK可能没有使能?问题!!!!!
    RCC_PCLK2Config(RCC_HCLK_Div1);                //配置APB2(PCLK2)钟==AHB时钟
    RCC_PCLK1Config(RCC_HCLK_Div2);                //配置APB1(PCLK1)钟==AHB1/2时钟
         
    RCC_PLLConfig( RCC_PLLSource_HSE,RCC_PLLMul_12, RCC_PLLDiv_3);//配置PLL时钟 == 外部高速晶体时钟 * 4 = 32MHz
    RCC_PLLCmd(ENABLE);                                 //使能PLL时钟
   
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)    //等待PLL时钟就绪
    {
    }
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            //配置系统时钟 = PLL时钟 CFGR->SWPLL
    while(RCC_GetSYSCLKSource() != 0x0C)                  //检查PLL时钟是否作为系统时钟
    {
    }
   
}

海盗爱飞鱼 发表于 2015-10-2 14:39

海盗爱飞鱼 发表于 2015-10-2 14:39
求外部时钟HSE的配置函数void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;                ...

这样配置应该没有问题啊怎么调试的时候不行呢?

lglour1978 发表于 2016-3-2 14:11

我也遇到同样的问题,楼上的二位有解吗?

hzj8300 发表于 2016-3-2 17:32

RCC_WaitForHSEStartUp();这里面的等待时间参数调大点

kongyu11 发表于 2025-6-16 14:53

{:smile:}

duo点 发表于 2025-6-16 16:08

晶振本身损坏或连接不正确?

flycamelaaa 发表于 2025-6-16 16:13

HSE未起振?

elephant00 发表于 2025-6-16 16:17

PLL 配置不当?

海滨消消 发表于 2025-6-16 16:22

在唤醒后重新初始化时钟。

powerantone 发表于 2025-6-16 16:46

晶振电路是否正确连接。

stormwind123 发表于 2025-6-16 19:00

用示波器测量晶振引脚是否有波形输出。

七毛钱 发表于 2025-6-16 19:46

可能晶振引脚虚焊或短路,晶振无法起振,导致时钟源失效。

probedog 发表于 2025-6-16 20:23

检查 RCC_CR 寄存器中 HSERDY 标志位是否置位。

classroom 发表于 2025-6-16 20:23

建议在代码中添加超时机制,避免因 HSE 启动失败导致死机

jcky001 发表于 2025-6-16 21:00

LSE 可能出现故障了。

豌豆爹 发表于 2025-6-16 21:25

RCC_CR 寄存器中 CSSON 位是否置位。

cr315 发表于 2025-6-16 22:00

试试改用 LSI作为 RTC 时钟源。

onlycook 发表于 2025-6-16 22:00

时钟分频器配置错误?
页: [1]
查看完整版本: STM32L152的时钟每次都死里面