OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2313|回复: 6

STM32时钟初始化出现问题,总是陷入死循环

[复制链接]

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-4-12
在线时间
30 小时
发表于 2019-5-29 13:49:51 | 显示全部楼层 |阅读模式
50金钱
小白一枚,目前在配置时钟时出现问题,DEBUG之后发现执行时一直停在一个死循环中,请大佬帮帮忙指教一下。看了很多例程大家好像都是这么配置的,不知道哪里出现了问题。

void SystemClock_Config_HSE(void)
{
    RCC_ClkInitTypeDef RCC_ClkInitStruct;
    RCC_OscInitTypeDef RCC_OscInitStruct;
          RCC_PeriphCLKInitTypeDef PeriphClkInit;
        TIM图片20190529134902.jpg
       
                __HAL_RCC_PWR_CLK_ENABLE(); //xdf使能PWR时钟

    /* MSI is enabled after System reset, activate PLL with MSI as source */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;//RCC_OSCILLATORTYPE_MSI;//外部晶振
    RCC_OscInitStruct.HSEState =RCC_HSE_BYPASS;//RCC_HSE_ON; //RCC_HSE_BYPASS;//RCC_HSE_ON外部采用了有源晶振
    //RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
    //RCC_OscInitStruct.MSICalibrationValue = 16;//RCC_MSICALIBRATION_DEFAULT;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;//RCC_PLLSOURCE_MSI;
    RCC_OscInitStruct.PLL.PLLM = 1;//主PLL和音频PLL分频系数(PLL之前的分频),取值范围:2~63.
    RCC_OscInitStruct.PLL.PLLN = 10;//40; //主PLL倍频系数(PLL倍频),取值范围:64~432.
    RCC_OscInitStruct.PLL.PLLR = 3;
    RCC_OscInitStruct.PLL.PLLP = 7;//系统时钟的主PLL分频系数(PLL之后的分频),取值范围:2,4,6,8.(仅限这4个值!)
    RCC_OscInitStruct.PLL.PLLQ = 3;//4;//USB/SDIO/随机数产生器等的主PLL分频系数(PLL之后的分频),取值范围:2~15.
                if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
        /* Initialization Error */
        while(1);
    }

    /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
       clocks dividers */
    RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
    {
        /* Initialization Error */
        while(1);
    }
               
                PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART2;
    PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
    if( HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) != HAL_OK )
    {
         while(1);//Error_Handler( );
    }

                /**Configure the main internal regulator output voltage
    */
    if( HAL_PWREx_ControlVoltageScaling( PWR_REGULATOR_VOLTAGE_SCALE1 ) != HAL_OK )
    {
       while(1); //Error_Handler( );
    }
               
                 /**Configure the Systick interrupt time    */
    HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );
    /**Configure the Systick     */
    HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );
    /* SysTick_IRQn interrupt configuration */
    HAL_NVIC_SetPriority( SysTick_IRQn, 0, 0 );               
               
}


TIM图片20190529134910.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-4-12
在线时间
30 小时
 楼主| 发表于 2019-5-29 13:53:58 | 显示全部楼层
使用的为外部有源晶振,频率为24M
回复

使用道具 举报

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-4-12
在线时间
30 小时
 楼主| 发表于 2019-5-29 14:58:44 | 显示全部楼层
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-5-29 15:44:13 | 显示全部楼层
晶振不起振
回复

使用道具 举报

1

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2019-4-12
在线时间
30 小时
 楼主| 发表于 2019-5-29 15:49:52 | 显示全部楼层

应该是不会的,我用了两块板子debug都是死在这个初始化了。。。但是配置HSI的时候就没哟问题。。。
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-5-29 16:40:46 | 显示全部楼层
KissMango 发表于 2019-5-29 15:49
应该是不会的,我用了两块板子debug都是死在这个初始化了。。。但是配置HSI的时候就没哟问题。。。

不信的话, 你可以用cubeMx建一项目,只把时钟设为HSE, 其它都不设置, 看看能不能不卡
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2019-5-29 16:52:26 | 显示全部楼层
   RCC_OscInitStruct.PLL.PLLM = 1;//主PLL和音频PLL分频系数(PLL之前的分频),取值范围:2~63. 取值范围都为2-63,为啥还赋值1
感觉你这串你都是随机赋值,并没有遵循规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 16:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表