STM32固件库V3.5.0CMSIS文件解析
1.首先选择启动文件:根据自己所用芯片的型号,选择正确的启动文件。例如选择STM32F107系列的处理器,我们就选择startup_stm32f10x_hd.s。在这个文件里首先要定义自己堆栈的大小,根据自己的需要确定。文件中已经定义好了中断向量的位置及堆栈的初始化操作。
/* Reset handler*/
Reset_Handler  PROC
                EXPORT  Reset_Handler            [WEAK]
                IMPORT  __main
                IMPORT  SystemInitsystem的头文件
                LDR    R0, =SystemInit
                BLX    R0             
                LDR    R0, =__main
                BX      R0
                ENDP
通过上面的代码可以看到先执行SystemInit()函数在进入main()函数。SystemInit()函数在文件system_stm32f10x.c中有定义。
2.stm32f10x.h:这个头文件包含了STM32的大部份定义:
定义了芯片的类型,例如:#define STM32F10X_CL
定义是否包含标准外设库,#defined  USE_STDPERIPH_DRIVER
定义外部振荡器频率,#defined  HSE_VALUE
上面的三个定义,最好在编译器选项中定义好,这样就不用修改stm32f10x.h文件,最好不要修改这个文件。
采用枚举的方式定义中断号。
包含core_cm3.hsystem_stm32f10x.h
  #include "core_cm3.h"
#include "system_stm32f10x.h"
#include <stdint.h>
定义数据类型,例如:typedef uint32_t  u32此外还定义了FlagStatusITStatusErrorStatus等。
定义外设结构体,地址及用到的常量。
包含stm32f10x_conf.h来配置外设。
  #ifdef USE_STDPERIPH_DRIVER
    #include "stm32f10x_conf.h"
#endif
定义位操作的宏。
3.system_stm32f10x.hsystem_stm32f10x.c,这两个文件中:
定义一个全局变量:extern uint32_t SystemCoreClock:系统时钟频率与此变量的选择有关。
/**********************************************************
*  Clock Definitions
*********************************************************/
#ifdef SYSCLK_FREQ_HSE
  uint32_t SystemCoreClock        = SYSCLK_FREQ_HSE;       
#elif defined SYSCLK_FREQ_24MHz
  uint32_t SystemCoreClock        = SYSCLK_FREQ_24MHz;       
#elif defined SYSCLK_FREQ_36MHz
  uint32_t SystemCoreClock        = SYSCLK_FREQ_36MHz;       
#elif defined SYSCLK_FREQ_48MHz
  uint32_t SystemCoreClock        = SYSCLK_FREQ_48MHz;       
#elif defined SYSCLK_FREQ_56MHz
  uint32_t SystemCoreClock        = SYSCLK_FREQ_56MHz;       
#elif defined SYSCLK_FREQ_72MHz
  uint32_t SystemCoreClock        = SYSCLK_FREQ_72MHz;       
#else
  uint32_t SystemCoreClock        = HSI_VALUE;       
#endif
SystemInit():这个函数就是启动文件中调用的函数。
SystemCoreClockUpdate():更新SystemCoreClock的值,与系统频率一致。
注:利用此文件设置系统的时钟具有一定的局限性,所以在编写程序时建议不要用他,而利用标准外设库中的stm32f10x_rcc中的函数进行设置。
 4.stm32f10x_conf.h
1 配置需要的标准外设库,将不需要用到的外设库屏蔽掉。
2 定义assert_Param的模式,选择#define USE_FULL_ASSERT时,断言输出问题所在的位置,在调试时很有用。
5.core_cm3:与CM3内核相关的操作
6. stm32f10x_it中断实现,在这里编写相应的中断服务函数。
7.还需要注意的一点是:进入main函数后,除了设置嘀嗒时钟和中断外,在操作各外设之前,调用:RCC_AHBPeriphClockCmd(),RCC_APB1PeriphClockCmd(),RCC_APB2PeriphClockCmd(),启动相应的时钟,否则外设就不能正常工作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。