基于STM32F103单片机开发介绍

  • 格式:docx
  • 大小:1.79 MB
  • 文档页数:35

基于STM32F103单片机开发介绍目录一、IDE安装(MDK) (2)二、CMSIS 架构简介 (3)三、标准外设库的外设库结构 (8)四、Startup文件的选择及文件拷贝 (10)五、创建工程 (14)六、配置工程 (24)七、下载及调试 (32)八、SourceInght添加技巧 (33)一、IDE安装(MDK)STM32使用的开发环境是MDK,目前我们使用的版本是MDK5.10。

安装步骤请参考《MDK5.10安装手册.pdf》。

二、CMSIS 架构简介安装完ARM.CMSIS.3.20.4.pack和Keil.STM32F1xx_DFP.1.0.5.pack后,会在Keil的安装路径下生成对应的文件夹:Keil_v5\ARM\Pack\ARM\CMSIS\3.20.4Keil_v5\ARM\Pack\Keil\STM32F0xx_DFP\1.0.3Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5PACK下的文件,将在我们开发和编译时都需要用上。

1.CMSISARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是Cortex-M 处理器系列的与供应商无关的硬件抽象层。

2.Core_cm3.h1、内对Lint进行了配置。

2、最重要的是调用了“stdint.h”文件,该文件由编译环境提供,对8位、16位、32位等整数类型的定义及其范围进行了规范,还定义了大数输出如:UINT_LEAST8_MAX。

主要用来屏蔽不同编译器之前的差异。

这种扩展整数类型的定义非常清晰,从类型名字上就可以看出它的长度,这有利于编写可移植的代码。

3、指示寄存器的访问权限。

CMSIS定义以下3种标识符来指定访问权限:_I(volatileconst)、_O(volatile)和_IO(volatile)。

其中_I用来指定只读权限,_O指定只写权限,_IO指定读写权限。

4、对CM3核内的寄存器进行了定义。

定义了NVIC类型结构体NVIC_Type、SCB结构体SCB_Type、SysTick 类型结构体SysTick_Type、ITM类型结构体ITM_Type、MPU类型结构体MPU_Type、InterruptType类型结构体InterruptType_Type、CoreDebug 类型结构体CoreDebug_Type。

定义了各种寄存器。

5、对CM3硬件内存地址进行了映射。

6、对硬件抽象层的寄存器进行了定义,包括Cortex_M3核的全局变量声明和定义,并定义一些静态功能函数。

用于C语言文件内调用汇编语句如:__NOP、__ISB()、__DSB()等。

其原型在core_m3.c文件内。

此文件在:Keil_v5\ARM\Pack\ARM\CMSIS\3.20.4\CMSIS\Include\core_cm3.h3.stm32f10x.h属于CMSIS的DPAL,包括了STM32F10x系列处理器所有的外设寄存器定义、位定义和不同容量STM32F10x的内存映射。

1、可以通过该文件配置如下内容:目标芯片、是否使用库文件、个别特殊的参数,如HSE的频率等。

2、定义了数据类型、结构体和所有外设的内存映射3、访问外设寄存器达到宏4、中断异常的定义CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。

异常和中断标识符需加后缀_IRQn,系统异常向量号必须为负值,而设备的中断向量号是从0开始递增。

CMSIS对系统异常处理函数以及普通的中断处理函数名的定义也有所不同。

系统异常处理函数名需加后缀_Handler,而普通中断处理函数名则加后缀_IRQHandler。

这些异常中断处理函数被定义为weak属性,以便在其他的文件中重新实现时不出现重复定义的错误。

这些处理函数的地址用来填充中断异常向量表,并在启动代码中给以声明,例如:NMI_Handler、MemManage_Handler、SysTick_Handler、WWDG_IRQHandler等。

这里特别强调三点:一是如果选择用外设库来编程则必须在编译器的PreProcessor Symbols的Define中写入“USE_STDPERIPH_DRIVER, STM32F10X_HD”。

这个STM32F10x标准外设库结构分析在很多的教程中都有些过的。

请打开stm32f10x.h并查看8184行。

只有这样才能调用库的函数的stm32f10x.h;二是要定义存储器的类型,按照存储容量分为低容量、中容量和高容量;三是要定义HSE的频率。

内部定义了25M和8M两种。

此文件在:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Include\stm3 2f10x.h4.system_stm32f10x.h和system_ stm32f10x.c该文件提供了两个函数和一个全局变量。

- SystemInit()函数用来设置系统时钟(系统时钟源、PLL倍频因子、AHB/APBx的预分频及其Flash)该函数在启动后的复位后中被调用。

- SystemCoreClock 全局变量包括了内核时钟(HCLK),可以用来在程序中设置SysTick和配置其他参数;- SystemCoreClockUpdate()函数用来更新系统内核时钟,当系统内核时钟变化后必须执行该函数进行更新当系统复位后,系统时钟利用的内部时钟源的8MHz,然后通过"startup_stm32f10x_xx.s"调用SystemInit() 系统主时钟。

如果系统启动不成功,则SystemInit()函数不会生效,HIS依旧运行于8MHz。

HSE默认频率为8MHz。

可在stm32f10x.h中修改“HSE_VALUE”来改变此值。

当HSE被用作系统时钟时其直接接入PLL。

所以需要用户必须根据自己的HSE实际频率更改该参数。

ST定义的系统初始化函数SystemInit(),以及SystemInit()函数的原型可以在system_stm32f10x.c中找到。

此部分文件在:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Source\ system_stm32f10x.cKeil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Include\ system_stm32f10x.h5.startup文件夹该文件夹下根据4种不同编译环境编写了启动的汇编代码,这些汇编代码分主要为STM32F10x完成系统系统所必须的初始化,主要有:初始化堆栈指针SP、程序指针PC、设置中断矢量、配置系统时钟,系统启动完毕好后运行主程序。

这些汇编文件时根据不同内存容量的芯片来区分的,使用时需要注意。

后面还会详细讲到。

此部分文件在:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Source\ARM三、标准外设库的外设库结构该部分主要有inc和src两个文件夹。

该部分包括了所有外设的操作函数,固态函数库遵从以下命名规则:PPP表示任一外设缩写,例如:ADC。

系统、源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。

他们的命名都由英文字母大写书写。

在大多数情况下,他们采用如下缩写规范:OK,讲到这里,这部分的文件分为2个部分:1、用户不必修改文件位置:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Dri ver\src这些模块可以直接使用。

2、用户需要修改文件位置:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Dri ver\templates这部分是STM提供的模板文件,用户开发的时候,需要根据自己的需要定制实现,主要包括stm32f10x_conf.h 定义用户系统需要用到的上述不必修改的模块stm32f10x_it.c 空中断实现函数,用户需要根据自己的修改实现stm32f10x_it.h 空中断实现函数头文件到此,基本完成了介绍ARM和STM的一些架构和需要开发环境,下面我们可以开始移植开发。

注:为了开发方便,我们会将这些文件Copy到自己的工程目录下。

四、Startup文件的选择及文件拷贝- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices- startup_stm32f10x_ld.s: for STM32 Low density devices- startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices- startup_stm32f10x_md.s: for STM32 Medium density devices- startup_stm32f10x_hd.s: for STM32 High density devices- startup_stm32f10x_xl.s: for STM32 XL density devices- startup_stm32f10x_cl.s: for STM32 Connectivity line devicescl:互联型产品,stm32f105/107系列vl:超值型产品,stm32f100系列xl:超高密度产品,stm32f101/103系列ld:低密度产品,FLASH小于64Kmd:中等密度产品,FLASH=64 or 128hd:高密度产品,FLASH大于128选择好需要的文件后,将startup文件Copy到自己的工程目录下:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Source\ARM\*Source\CORE\ARM\*其他还需要COPY的文件:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Source\system_stm32f10x.c→Source\CORE\system_stm32f10x.cKeil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Driver\src\*→Source\STM32F10x_LIB\src\*Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Driver\inc\*→Source\STM32F10x_LIB\inc\*Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Driver\templates\*→Source\IOToggle\* 这部分代码需要根据需要修改,主要是stm32f10x_conf.h文件的修改另外包括已经实现的部分:HARDWARE (硬件相关的接口实现)SYSTEM (系统相关的接口,如delay, uart, 中断组等) OWCOMM (碧水源项目的通信接口实现)PROJECT (空文件夹,用于存放工程文件)OBJ (空文件夹,用于存放编译生成的文件及目标文件)五、创建工程1.新建工程打开Keil uVision5;Project->New uVision Project,Project选择保存在上述说的PROJECT 文件夹下:2.选择STM单片机类型然后以下窗口选择Cancel(OK也可以)3.CORE新建CORE Group或者将第一个GROUP改为CORE添加文件system_stm32f10x.c注:只需要添加.c和.s即可,.h不需要添加。