Arm 使用CubeMX为STM32F103C8生成系统时钟配置
我正在尝试生成system_stm32f1x.c,它将设置我的时钟,如图所示。 问题是,当我用CubeMX生成代码时,我没有得到这个配置。相反,我得到了启用内部RC时钟的默认配置 在我发现我的时钟配置有问题之前,我在配置计时器和USART时遇到了很多问题 system_init函数的内容Arm 使用CubeMX为STM32F103C8生成系统时钟配置,arm,microcontroller,stm32,system-clock,Arm,Microcontroller,Stm32,System Clock,我正在尝试生成system_stm32f1x.c,它将设置我的时钟,如图所示。 问题是,当我用CubeMX生成代码时,我没有得到这个配置。相反,我得到了启用内部RC时钟的默认配置 在我发现我的时钟配置有问题之前,我在配置计时器和USART时遇到了很多问题 system_init函数的内容 void SystemInit (void) { /* Reset the RCC clock configuration to the default reset state(for debug pur
void SystemInit (void)
{
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC->CR |= 0x00000001U;
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#if !defined(STM32F105xC) && !defined(STM32F107xC)
RCC->CFGR &= 0xF8FF0000U;
#else
RCC->CFGR &= 0xF0FF0000U;
#endif /* STM32F105xC */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= 0xFEF6FFFFU;
/* Reset HSEBYP bit */
RCC->CR &= 0xFFFBFFFFU;
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC->CFGR &= 0xFF80FFFFU;
#if defined(STM32F105xC) || defined(STM32F107xC)
/* Reset PLL2ON and PLL3ON bits */
RCC->CR &= 0xEBFFFFFFU;
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x00FF0000U;
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000U;
#elif defined(STM32F100xB) || defined(STM32F100xE)
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000U;
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000U;
#else
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000U;
#endif /* STM32F105xC */
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
#endif
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}
时钟配置函数位于tge main.c文件中。除非您知道自己在做什么,否则不要触摸系统文件
SystemInit执行其他操作,您应该保持原样。时钟配置函数位于由CubeMx main.c文件生成的中,称为SystemClock\u Config。SystemInit不设置时钟。我不知道为什么我的previos答案被删除,因为它回答了这个问题。我看到system_init没有对我的RCC寄存器做任何事情,但我认为CubeMx有问题。我试图在没有任何IDE的情况下使用我的定制Makefile,因此我从未打开过CubeMx生成的main.c。我将尝试在寄存器中配置时钟,我不喜欢使用IDE-s提供的API,如果有人能告诉我从哪里开始我的研究,我将不胜感激。这很简单。我个人使用CubeMx只是因为使用这个工具分配pin和查看冲突要容易得多。我还使用了时钟配置,只需从屏幕上获取乘法器和除法器。F103是一个非常简单的uC。F7的时钟树要复杂得多,这个时钟工具帮助很大。在21世纪,我不认为ant有理由在开发阶段使用DIY makefile。我在发布项目时写了一个。IDE-s是一个完美的工具,你有完全相同的控制,但它只是简单得多。PS我是裸寄存器程序员我知道IDE-s是一个伟大的工具,但我是Linux用户,也是VIM的忠实粉丝,当结合tmux和VIM时,我会感觉舒服得多,我觉得这样工作效率更高。然后,使用makefile对我来说非常自然,在我的例子中,它们是通用的。比如,我有这个STM MCU的生成文件,我在STM32F103和STM32F407上使用它们,我相信我可以在任何其他STM uC上使用它们,同样的故事也适用于Atmel uC。