SystemInit函数

以上在stm32f4xx中文参考手册的截图

SYSCLK时钟的来源有3个分别是 HSI  HSE PLL

我们主要的时钟有 低速的内部时钟  LSI   RC震荡产生 32KHZ

                               低速的外部时钟 LSE  32.768KHZ晶振

                              高速的内部时钟  HSI  RC震荡16MHZ

                               高速的外部时钟 HSE  一般为8Mhz

一般情况我们的SYSCLK时钟选择PLLCLK

看看我们的函数是怎么操作时钟分配的!

 

启动文件首先先配置时钟然后在运行用户主函数,打开SystemInit函数

 


 
  1. **

  2. * @brief Setup the microcontroller system

  3. * Initialize the Embedded Flash Interface, the PLL and update the

  4. * SystemFrequency variable.

  5. * @param None

  6. * @retval None

  7. */

  8. void SystemInit(void)

  9. {

  10. /* FPU settings ------------------------------------------------------------*/

  11. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

  12. SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */

  13. #endif

  14. /* Reset the RCC clock configuration to the default reset state ------------*/

  15. /* Set HSION bit */

  16. RCC->CR |= (uint32_t)0x00000001;

  17.  
  18. /* Reset CFGR register */

  19. RCC->CFGR = 0x00000000;

  20.  
  21. /* Reset HSEON, CSSON and PLLON bits */

  22. RCC->CR &= (uint32_t)0xFEF6FFFF;

  23.  
  24. /* Reset PLLCFGR register */

  25. RCC->PLLCFGR = 0x24003010;

  26.  
  27. /* Reset HSEBYP bit */

  28. RCC->CR &= (uint32_t)0xFFFBFFFF;

  29.  
  30. /* Disable all interrupts */

  31. RCC->CIR = 0x00000000;

  32.  
  33. #if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)

  34. SystemInit_ExtMemCtl();

  35. #endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */

  36.  
  37. /* Configure the System clock source, PLL Multiplier and Divider factors,

  38. AHB/APBx prescalers and Flash settings ----------------------------------*/

  39. SetSysClock();

  40.  
  41. /* Configure the Vector Table location add offset address ------------------*/

  42. #ifdef VECT_TAB_SRAM

  43. SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */

  44. #else

  45. SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */

  46. #endif

  47. }

以上为整个代码


 
  1. /* FPU settings ------------------------------------------------------------*/

  2. #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)

  3. SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */

  4. #endif

这个是设置FPU


 
  1. /* Reset the RCC clock configuration to the default reset state ------------*/

  2. /* Set HSION bit */

  3. RCC->CR |= (uint32_t)0x00000001;

CR寄存器的第0位置1,其他位保持不变 ,HSI振荡器打开


 
  1. /* Reset CFGR register */

  2. RCC->CFGR = 0x00000000;

CFGR寄存器全都设0,对其复位


 
  1. /* Reset HSEON, CSSON and PLLON bits */

  2. RCC->CR &= (uint32_t)0xFEF6FFFF;

将对cr寄存器设置‭,1111 1110 1111 0110 1111 1111 1111 1111‬‬将第16位19位24位置0,其他位保持不变


 
  1. /* Reset PLLCFGR register */

  2. RCC->PLLCFGR = 0x24003010;

‭00100100(4)  0           0         0000  00 (2)  0      011000000(192)                    010000‬(16)


 
  1. /* Reset HSEBYP bit */

  2. RCC->CR &= (uint32_t)0xFFFBFFFF;


 
  1. /* Disable all interrupts */

  2. RCC->CIR = 0x00000000;

复位

 再来看看  SetSysClock();函数

阅读更多
个人分类: 嵌入式
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭