您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于STM32F103单片机开发介绍
基于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.CMSISARMCortex™微控制器软件接口标准(CMSIS:CortexMicrocontrollerSoftwareInterfaceStandard)是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等。这里特别强调三点:一是如果选择用外设库来编程则必须在编译器的PreProcessorSymbols的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\stm32f10x.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_Driver\src这些模块可以直接使用。2、用户需要修改文件位置:Keil_v5\ARM\Pack\Keil\STM32F1xx_DFP\1.0.5\Device\StdPeriph_Driver\templates这部分是STM提供的模板文件,用户开发的时候,需要根据自己的需要定制实现,主要包括stm32f10x_conf.h定义用户系统需要用到的上述不必修改的模块stm32f10x_it.c空中断实现函数,用户需要根据自己的修改实现stm32f10x_it.h空中断实现函数头文件到此,基本完成了介绍ARM和STM的一些架构和需要开发环境,下面我们可以开始移植开发。注:为了开发方便,我们会将这些文件Copy到自己的工程目录下。四、Startup文件的选择及文件拷贝-startup_stm32f10x_ld_vl.s:forSTM32LowdensityValuelinedevices-startup_stm32f10x_ld.s:forSTM32Lowdensitydevices-startup_stm32f10x_md_vl.s:forSTM32MediumdensityValuelinedevices-startup_stm32f10x_md.s:forSTM32Mediumdensitydevices-startup_stm32f10x_hd.s:forSTM32Highdensitydevices-startup_stm32f10x_xl.s:forSTM32XLdensitydevices-startup_stm32f10x_cl.s:forSTM32Connectivitylinedevicescl:互联型产品,stm32f105/107系列vl:超值型产品,stm32f100系列xl:超高密度产品,stm32f101/103系列ld:低密度产品,FLASH小于64Kmd:中等密度产品,FLASH=64or128hd:高密度产品,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.cSource\CORE\system_stm32f10x.cKeil_v5\AR
本文标题:基于STM32F103单片机开发介绍
链接地址:https://www.777doc.com/doc-4750662 .html