SystemInit()函数的结构分析

来源:互联网 发布:中国移动4g网络畅玩包 编辑:程序博客网 时间:2024/06/11 16:15

具体的分析见:http://wenku.baidu.com/view/3b995d708e9951e79b8927f5.html

                        http://blog.sina.com.cn/s/blog_60e5783601017vbt.html

系统函数调用顺序startup_stm32f10x_cl.s→ SystemInit() → SetSysClock()→ SetSysClockTo72()

总结:开始是在keil4里看代码,很混乱,后来把他粘到Notepad编辑器,一点击就可以看出这个子函数到哪结束

#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/* #define SYSCLK_FREQ_HSE    HSE_VALUE */ #define SYSCLK_FREQ_24MHz  24000000#else/* #define SYSCLK_FREQ_HSE    HSE_VALUE *//* #define SYSCLK_FREQ_24MHz  24000000 */ /* #define SYSCLK_FREQ_36MHz  36000000 *//* #define SYSCLK_FREQ_48MHz  48000000 *//* #define SYSCLK_FREQ_56MHz  56000000 */#define SYSCLK_FREQ_72MHz  72000000#endif

下面定义的SystemCoreClock 变量是为了方便取出几种情况下系统时钟的实际值,例SYSCLK_FREQ_24MHz 也就是24000000。

#ifdef SYSCLK_FREQ_HSE  uint32_t SystemCoreClock         = SYSCLK_FREQ_HSE;        /*!< System Clock Frequency (Core Clock) */#elif defined SYSCLK_FREQ_24MHz  uint32_t SystemCoreClock         = SYSCLK_FREQ_24MHz;        /*!< System Clock Frequency (Core Clock) */#elif defined SYSCLK_FREQ_36MHz  uint32_t SystemCoreClock         = SYSCLK_FREQ_36MHz;        /*!< System Clock Frequency (Core Clock) */#elif defined SYSCLK_FREQ_48MHz  uint32_t SystemCoreClock         = SYSCLK_FREQ_48MHz;        /*!< System Clock Frequency (Core Clock) */#elif defined SYSCLK_FREQ_56MHz  uint32_t SystemCoreClock         = SYSCLK_FREQ_56MHz;        /*!< System Clock Frequency (Core Clock) */#elif defined SYSCLK_FREQ_72MHz  uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */#else /*!< HSI Selected as System Clock source */  uint32_t SystemCoreClock         = HSI_VALUE;        /*!< System Clock Frequency (Core Clock) */#endif


static void SetSysClock(void){#ifdef SYSCLK_FREQ_HSE  SetSysClockToHSE();#elif defined SYSCLK_FREQ_24MHz  SetSysClockTo24();#elif defined SYSCLK_FREQ_36MHz  SetSysClockTo36();#elif defined SYSCLK_FREQ_48MHz  SetSysClockTo48();#elif defined SYSCLK_FREQ_56MHz  SetSysClockTo56();  #elif defined SYSCLK_FREQ_72MHz  SetSysClockTo72();#endif  /* If none of the define above is enabled, the HSI is used as System clock    source (default after reset) */ }

#ifdef SYSCLK_FREQ_HSE/**  * @brief  Selects HSE as System clock source and configure HCLK, PCLK2  *         and PCLK1 prescalers.  * @note   This function should be used only after reset.  * @param  None  * @retval None  */static void SetSysClockToHSE(void){     ......}

#elif defined SYSCLK_FREQ_24MHz/**  * @brief  Sets System clock frequency to 24MHz and configure HCLK, PCLK2   *         and PCLK1 prescalers.  * @note   This function should be used only after reset.  * @param  None  * @retval None  */static void SetSysClockTo24(void){      ........}

#elif defined SYSCLK_FREQ_36MHz/**  * @brief  Sets System clock frequency to 36MHz and configure HCLK, PCLK2   *         and PCLK1 prescalers.   * @note   This function should be used only after reset.  * @param  None  * @retval None  */static void SetSysClockTo36(void){    ......}
省略几个......

#elif defined SYSCLK_FREQ_72MHz/**  * @brief  Sets System clock frequency to 72MHz and configure HCLK, PCLK2   *         and PCLK1 prescalers.   * @note   This function should be used only after reset.  * @param  None  * @retval None  */static void SetSysClockTo72(void){     .......}
这样结构就很明晰了。