基于STM32F103单片机开发介绍

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

下载文档原格式

  / 37
  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。