Arm 使用CubeMX为STM32F103C8生成系统时钟配置

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

我正在尝试生成system_stm32f1x.c,它将设置我的时钟,如图所示。

问题是,当我用CubeMX生成代码时,我没有得到这个配置。相反,我得到了启用内部RC时钟的默认配置

在我发现我的时钟配置有问题之前,我在配置计时器和USART时遇到了很多问题

system_init函数的内容

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。