01_stm32f10x外设库及MCU启动流程

来源:互联网 发布:linux named配置文件 编辑:程序博客网 时间:2024/05/16 14:46

stm32f10x外设库及MCU启动流程

1、外设库

1.1、下载

官网链接:http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software.html?querycriteria=productId=SC961

找到stm32f10x的外设库,下载(官网需要注册才能下载)

1.2、stm32f10x外设库文件

从官网下载到stm32f10x的外设库解压将得到如下文件

_htmresc—包含一些图片,没什么用;

Libraries—包含stm32f10x外设库和ARM Cortex™ 微控制器软件接口标准(CMSIS)
在 ..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport文件夹下包含M3内核通用的文件。

在..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup文件夹下包含不同开发工具的启动文件,比如使用Keil开发应该使用arm文件夹下的.s文件,使用IAR开发应该使用iar下的.s文件。

在..\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下包含stm32f10x的系统文件: stm32f10x.h; system_stm32f10x.c; system_stm32f10x.h

Project—示例代码,可以提取里面的 stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h文件。

Utilities—评估板代码,没什么用。

2、MCU启动流程

以 ..\startup\iar\startup_stm32f10x_hd.s为例。上电首先执行 SystemInit

SystemInit函数在system_stm32f10x.c中实现,SystemInit函数主要是对时钟的配置,函数如下:

void SystemInit (void){  /* Reset the RCC clock configuration to the default reset state(for debug purpose) */  /* Set HSION bit */  RCC->CR |= (uint32_t)0x00000001;  /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */#ifndef STM32F10X_CL  RCC->CFGR &= (uint32_t)0xF8FF0000;#else  RCC->CFGR &= (uint32_t)0xF0FF0000;#endif /* STM32F10X_CL */     /* Reset HSEON, CSSON and PLLON bits */  RCC->CR &= (uint32_t)0xFEF6FFFF;  /* Reset HSEBYP bit */  RCC->CR &= (uint32_t)0xFFFBFFFF;  /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */  RCC->CFGR &= (uint32_t)0xFF80FFFF;#ifdef STM32F10X_CL  /* Reset PLL2ON and PLL3ON bits */  RCC->CR &= (uint32_t)0xEBFFFFFF;  /* Disable all interrupts and clear pending bits  */  RCC->CIR = 0x00FF0000;  /* Reset CFGR2 register */  RCC->CFGR2 = 0x00000000;#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)  /* Disable all interrupts and clear pending bits  */  RCC->CIR = 0x009F0000;  /* Reset CFGR2 register */  RCC->CFGR2 = 0x00000000;      #else  /* Disable all interrupts and clear pending bits  */  RCC->CIR = 0x009F0000;#endif /* STM32F10X_CL */#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)  #ifdef DATA_IN_ExtSRAM    SystemInit_ExtMemCtl();   #endif /* DATA_IN_ExtSRAM */#endif   /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */  /* Configure the Flash Latency cycles and enable prefetch buffer */  SetSysClock();//配置时钟#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 }

在 SystemInit 函数中调用SetSysClock()对系统时钟进行配置,在SetSysClock()函数中根据设定的宏对时钟进行不同的配置,默认是外部8MHz晶振,倍频到72MHz。

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) */ }

总之,MCU上电或者复位后—>SystemInit—>__iar_program_start—>main, 在SystemInit中根据不同的宏初始化时钟。

3、额外说明

在编译器中定义 STM32F10X_HD,USE_STDPERIPH_DRIVER全局宏的作用

在stm32f10x.h文件中会用到这些宏。USE_STDPERIPH_DRIVER也可以不用在编译器中定义,直接在stm32f10x.h将宏打开即可。

#if !defined  USE_STDPERIPH_DRIVER/** * @brief Comment the line below if you will not use the peripherals drivers.   In this case, these drivers will not be included and the application code will    be based on direct access to peripherals registers    */  /*#define USE_STDPERIPH_DRIVER*/#endif
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 瑕怎么读 攻瑕指失 瑕不自掩 遮瑕膏怎么用 玉微瑕 吹毛觅瑕 抱罪怀瑕 遮瑕膏排行榜 白玉微瑕 全脸零瑕疵 瑕组词语 瑕的意思是什么 瑕的意思 瑕的读音 瑕丝是什么意思 瑕怎么组词 瑕组词有哪些 瑕的拼音 瑕是什么意思 瑕怎么读音 什么气垫遮瑕保湿效果好 遮瑕膏用在哪一步 瑕疵的拼音 瑕疵是什么意思 翡翠色线是瑕疵吗 翡翠瑕疵图片详解 瑕疵的意思 翡翠矿点算瑕疵吗 和田玉瑕疵 有瑕疵 瑕疵的读音 瑕疵担保责任 品味瑕疵 瑕疵读音 产品瑕疵 产品瑕疵责任 瑕疵必报什么意思 意思表示瑕疵 贝玲妃无瑕疵粉底霜 圣洁没有瑕疵