基于STM32F103单片机开发介绍

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于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.4
Keil_v5\ARM\Pack\Keil\STM32F0xx_DFP\1.0.3
Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5
PACK下的文件,将在我们开发和编译时都需要用上。

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

2.Core_cm
3.h
1、内对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.h
3.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.h
4.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.c
Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Include\ system_stm32f10x.h
5.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 devices
cl:互联型产品,stm32f105/107系列
vl:超值型产品,stm32f100系列
xl:超高密度产品,stm32f101/103系列
ld:低密度产品,FLASH小于64K
md:中等密度产品,FLASH=64 or 128
hd:高密度产品,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\syste
m_stm32f10x.c

Source\CORE\system_stm32f10x.c
Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Dri
ver\src\*

Source\STM32F10x_LIB\src\*
Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Dri
ver\inc\*

Source\STM32F10x_LIB\inc\*
Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Dri
ver\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不需要添加。

(其他Group也一样)
添加文件startup_stm32f10x_hd.s
4.HARDWARE
新建HARDWARE Group
根据需要依次添加需要的Hardware文件:
5.IOToggle
新建IOToggle Group
添加文件stm32f10x_it.c:
6.STM32F10x_LIB
新建STM32F10x_LIB Group
根据需要依次添加需要的STM32F10x_LIB文件:
7.SYSTEM
新建SYSTEM Group
依次添加SYSTEM下的文件:
8.OWCOMM
新建OWCOMM Group
依次添加OWCOMM下的文件:
ER
新建USER Group
添加文件main.c:
当然我们也有其他简单方式创建工程相关:
这里就不介绍了。

至此,完成了所有文件的添加:
六、配置工程
右键Target
1.配置晶振
这里配置为72.0M
2.配置Output
选择Output到OBJ下
同时勾选Create Hex File
3.配置Listing
同样,选择到OBJ下
4.配置C/C++
增加Define:
STM32F10X_HD,USE_STDPERIPH_DRIVER,OWCOMM_USE_UART
增加Include Patch:
为了便捷,这里加上了所有的路径
另外我们还可以修改修改优化级别,默认为-O0,正常情况下我们
可以使用-O2,尤其在ROM较小的情况下。

(不过优化级别越高,系统的运行效率可能要差)
5.配置Debug
选择为JLINK
6.配置Utilities
去掉Use Debug Driver,并选择JLINK
所有配置完成后,就可以开始编译了。

七、下载及调试
如果是开发板,可以直接用MCUISP下载
如果是最小核心板,需要用JLINK下载及调试。

八、SourceInght添加技巧
首先添加工程文件下的所有文件:
然后添加Keil_v5\ARM\ARMCC\include下所有文件:
最后添加Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\Include 下2个文件:
这样所有相关的文件都可以再Source Insight中显示了。

相关文档
最新文档