你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32CubeMX MCU执行到SystemClock_Config时钟初始化死锁

[复制链接]
做一条有梦想的咸鱼 提问时间:2018-8-22 18:18 /
本帖最后由 少言寡语 于 2018-8-22 18:19 编辑

型号为STM32F103C8T6  
调试的时候 每次执行到该处
MI{~]L@~~`Y(MYRY@CO2L0C.png
点击调试进去进入到下面程序处的时候 会在SYSTICK那个中断函数和这个函数
来回跳很久
3WK@KC2A`}6IZNGLDD2IRXO.png
最后进入这个while(1)里面

Cube MX 版本用的4.25
KEIL  版本5.25

以下为部分出错代码
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Initializes the CPU, AHB and APB busses clocks
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }




HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
{
   uint32_t tickstart = 0U;

  /* Check the parameters */
  assert_param(RCC_OscInitStruct != NULL);
  assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));

  /*------------------------------- HSE Configuration ------------------------*/
  if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
  {
    /* Check the parameters */
    assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));

    /* When the HSE is used as system clock or clock source for PLL in these cases it is not allowed to be disabled */
    if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
       || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE)))
    {
      if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
      {
        return HAL_ERROR;
      }
    }
    else
    {
      /* Set the new HSE configuration ---------------------------------------*/
      __HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);


       /* Check the HSE State */
      if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
      {
        /* Get Start Tick */
        tickstart = HAL_GetTick();

        /* Wait till HSE is ready */
        while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
        {
          if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
          {
            return HAL_TIMEOUT;
          }
        }
      }


收藏 评论4 发布时间:2018-8-22 18:18

举报

4个回答
wenyangzeng 回答时间:2018-8-22 19:16:18
检查一下外部晶振HSE的硬件。应该是晶振没有起振。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

feixiang20 回答时间:2018-8-22 23:53:13
可能是初始化配置的问题,定时器的初始化,晶振等
RCC_ClkInitTypeDef RCC_ClkInitStruct;   //结构体初始化
RCC_OscInitTypeDef RCC_OscInitStruct; //结构体初始化
__HAL_RCC_PWR_CLK_ENABLE();  //使能电源控制时钟   
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);//设置调压器输出电压级别1
这个设置用来设置调压器输出电压级别,以便在器件未以最大频率工作时使性能与功耗实现平衡
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; //时钟源为HSI内部高速时钟
                                                               //RCC_OSCILLATORTYPE_HSE   高速外部时钟
RCC_OscInitStruct.HSEState = RCC_HSE_OFF;  //关闭HES
RCC_OscInitStruct.HSIState = RCC_HSI_ON;    //打开HSI
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //打开PLL
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;//设置PLL时钟源为HSI
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;//PLL VCO输入时钟的倍频系数
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV2;//PLL VCO输入时钟的分频系数
RCC_OscInitStruct.HSICalibrationValue = 0x10;//HSI校准调整值
HAL_RCC_OscConfig(&RCC_OscInitStruct);  //初始化
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);    //选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; //设置系统时钟源
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; //AHB分频系数为1
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;  //APB1分频系数为1
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;  //APB2分频系数为1
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1);//初始化并同时设置FLASH 的延迟周期为1

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

ayumi7 回答时间:2019-7-14 13:12:36
后来呢  楼主 我今天也玩到你这个错误了    到 while 就没了
u13718941626 回答时间:2021-2-2 14:42:08
我也遇到这个错误,楼主解决了么。我看了一下sysclk_source的值是0x00000000,如果配置外部高速时钟,这个值应该是0x00000008
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版