STM32 system_stm32f10x.c文件分析
startup_stm32f10x_md.s文件中,調(diào)用了一個叫SystemInit的函數(shù),該函數(shù)其實在system_stm32f10x.c中定義,旨在初始化系統(tǒng)時鐘、初始化外部SRAM、設(shè)置中斷向量表地址。
void SystemInit (void)
{
??/*?使能內(nèi)部高速時鐘 */
? RCC->CR |= (uint32_t)0x00000001;
#ifndef STM32F10X_CL
? RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
? RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif
??
??/*?禁用PLL、禁用始時鐘檢測、禁用外部高速時鐘 */
? RCC->CR &= (uint32_t)0xFEF6FFFF;
??/*?外部1-25M振蕩器未被繞過 */
? RCC->CR &= (uint32_t)0xFFFBFFFF;
? /* USB預(yù)分頻器PLL未分頻、PLL倍頻2、HSE未被分頻、HSI/2作為PLL頻率?*/
? RCC->CFGR &= (uint32_t)0xFF80FFFF;
/* 禁用時鐘中斷寄存器 */
#ifdef STM32F10X_CL
? RCC->CR &= (uint32_t)0xEBFFFFFF;
? RCC->CIR = 0x00FF0000;
? RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
? RCC->CIR = 0x009F0000;
? /* Reset CFGR2 register */
? RCC->CFGR2 = 0x00000000;??????
#else
? RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */
????
/* 設(shè)置外部SRAM */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
? #ifdef DATA_IN_ExtSRAM
??? SystemInit_ExtMemCtl();?
? #endif /* DATA_IN_ExtSRAM */
#endif
?/* 配置系統(tǒng)時鐘?*/
? SetSysClock();
/*中斷向量偏移地址設(shè)置 */
#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?
}
總結(jié)
以上是生活随笔為你收集整理的STM32 system_stm32f10x.c文件分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux修改文件没有备份,归档模式,恢
- 下一篇: 《2018中国区块链行业分析报告》(50