为何我使用cubemx配置的内部HSI 程序跑不去起来,而使用MSI...
各位大神 https://www.stmcu.org.cn/module/forum/forum.php?mod=image&aid=392420&size=300x300&key=8b0c7a3cfd1b62ec&nocache=yes&type=fixnone为何我使用cubemx配置的内部HSI 程序跑不去起来,而使用MSI可以跑起来 这个是CubeMX的一个bug。当配置为HSI作为时钟时,SystemClock_Config()这个函数里没有对RCC_OscInitStruct.MSIState进行赋值,这样就使用了默认值RCC_MSI_OFF。但是在随后调用HAL_RCC_OscConfig()时MSI configuration这段代码中: if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_CFGR_SWS_MSI) )
{
if((__HAL_RCC_GET_FLAG(RCC_FLAG_MSIRDY) != RESET) && (RCC_OscInitStruct->MSIState == RCC_MSI_OFF))
{
return HAL_ERROR;
}
此时时钟源依然是MSI,因此会进入if语句,并且RCC_FLAG_MSIRDY也是置位的,两个条件与的if语句也满足,因此就return ERROR了。
修改时只需要在SystemClock_Config()函数中加上对RCC_OscInitStruct.MSIState的初始化就可以了,如下:
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
页:
[1]