我有两台电脑,都使用keil5,版本都是5.36.0,一台安装了Geehy.APM32F0xx_DFP.1.0.9.pack,另外一台安装了Geehy.APM32F0xx_DFP.1.1.0.pack。都是从
https://www.keil.arm.com/packs/apm32f0xx_dfp-geehy/versions/上下载的。
主板使用APM32F030RCT6芯片,无外部晶振,使用内部RC
在Geehy.APM32F0xx_DFP.1.0.9.pack的电脑上编译后烧录到APM32F030RCT6上,USART1能够正常printf打印输出。
在Geehy.APM32F0xx_DFP.1.1.0.pack的电脑上编译后烧录到同一块板子APM32F030RCT6上,USART1打印输出就卡死。debug打印卡死在下面while中
while (USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);另外Geehy.APM32F0xx_DFP.1.1.0.pack上使用HSI然后通过PLL输出配置也会卡死。
void SystemClock_PLL_Init(void)
{
uint32_t timeout = 0;
RCM_Reset();
/* Enable HSI */
RCM_EnableHSI();
RCM_ConfigAHB(RCM_SYSCLK_DIV_1);
RCM_ConfigAPB(RCM_HCLK_DIV_1);
/* SYSCLKFreq = (HSI * 16) / 2 */
RCM_ConfigPLL(RCM_PLL_SEL_HSI_DIV2, RCM_PLLMF_8);
/* Enable PLL */
RCM_EnablePLL();
/* Selct PLL as Sysclk */
RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_PLL);
// while (RCM->CFG1_B.SCLKSWSTS != 0x02);
// 等待切换完成,最多尝试1000次
timeout = 1000;
while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_PLL) {
if (timeout-- == 0) {
// printf("警告:PLL时钟切换超时,回退到HSI!\n");
/* 回退方案:使用HSI作为系统时钟 */
RCM_ConfigSYSCLK(RCM_SYSCLK_SEL_HSI);
// 等待HSI切换完成
// uint32_t fallback_timeout = 1000;
// while (RCM_ReadSYSCLKSource() != RCM_SYSCLK_SEL_HSI && fallback_timeout--);
break;
}
}
}
具体工程见附件,请问这两个版本DFP有什么区别,为什么会造成这个问题?能够帮忙看下