今天遇到个莫名其妙的问题,外部8M晶振用cubeMX生成的代码不起振。 然后我在HAL_RCC_OscConfig和HAL_RCC_ClockConfig中间加了点延迟才能起振。 系统生成的SystemClock_Config代码是这样的,我在中间加了一个 while( i < 20000) i ++ ; 才执行成功,不然就卡在函数中间出不来这里。 大家帮忙看看这是怎么回事。 是cubeMX有bug还是我的晶振的问题。 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; a1 = HAL_RCC_OscConfig(&RCC_OscInitStruct); uint32_t i = 0 ; while( i < 20000) i ++ ; RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; a2 = HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2); HAL_RCC_EnableCSS(); HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); /* SysTick_IRQn interrupt configuration */ HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); } |
就知道卡在函数里执行不了,没法确定卡在那一句。
我在函数中间加个点led的语句就能起振了