SystemInit()函数的结构分析
2013-04-24 15:56
225 查看
具体的分析见: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编辑器,一点击就可以看出这个子函数到哪结束
下面定义的SystemCoreClock 变量是为了方便取出几种情况下系统时钟的实际值,例SYSCLK_FREQ_24MHz 也就是24000000。
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) { ....... }这样结构就很明晰了。
相关文章推荐
- ffplay.c函数结构简单分析
- jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 【转】jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- sk_buff结构和函数分析
- C++ 函数反汇编跟踪以及栈结构分析
- ngx_cycle_t结构体及ngx_cycle_init函数分析
- 拿到一个代码,如何快速分析项目结构与各函数关系?
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析 .
- 函数调用时的堆栈结构分析
- jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- jQuery源码分析(版本1.6.1)___构造jQuery对象-源码结构和核心函数
- jQuery源码分析-03构造jQuery对象-源码结构和核心函数
- 结构体变量、结构指针变量、结构数组作为函数的参数应用实例分析
- ffmpeg.c函数结构简单分析(画图)
- jQuery源码分析-构造jQuery对象-源码结构和核心函数
- struct stat结构分析函数转
- 内核链表结构与函数源码分析