简单写一下失败经历。
用的CubeMX版本是4.20.0如下图,用的Keil5编译代码,编译结果0 Error(s),0 Warning(s)。
在CubeMX中配置了时钟,如下图。
CubeMX生成的main.c中Clock代码是这样的:
/** System Clock Configuration*/void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; /**Initializes the CPU, AHB and APB busses clocks *//*其中,OscillatorType这里自动生成的代码有问题*/RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI|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; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /**Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { 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);}
问题在哪儿呢?LED挂在PC0上,时钟路线图如下。
第14行代码写成下面这样验证OK。
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
实际上在实验中没有用到HSI,但是在自动生成的代码中把它加上了,导致单片机无法正常工作。看来排查Bug时,时钟这一块需要重点关注一下。
责任编辑人:CC
-
编译
+关注
关注
0文章
657浏览量
32851 -
stm32cubemx
+关注
关注
5文章
283浏览量
14791
原文标题:STM32CubeMX+Hal库教程-点亮Led
文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论