[STM32L1] STM32L152的时钟每次都死里面

[复制链接]
2498|11
 楼主| s284630173 发表于 2015-1-29 14:59 | 显示全部楼层 |阅读模式
时钟内部时钟倍频到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->SW  PLL
    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 | 显示全部楼层
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 | 显示全部楼层
时钟分频器配置错误?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

23

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部