版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Embedded System DevelopmentEmbedded System Development嵌入式系统与应用嵌入式系统与应用 第第7 7章章 CMSISCMSIS架构与架构与STM32STM32标准外设库标准外设库7.1 CMSIS7.1 CMSIS简介简介7.2 C/C+7.2 C/C+项目建立与调试项目建立与调试7.3 CM77.3 CM7的启动文件解析的启动文件解析7.4 STM327.4 STM32标准外设库标准外设库7.1 CMSIS7.1 CMSIS简介简介F为解决不同厂商的为解决不同厂商的CortexCortex微控制器软件的兼容性问题,微控制器软件的兼容性问题,
2、ARMARM与芯片厂商制定了与芯片厂商制定了CortexCortex微控制器软件接口标准微控制器软件接口标准CMSIS CMSIS ( (Cortex MicroController Software Interface StandardCortex MicroController Software Interface Standard) )。F是是Cortex-MCortex-M处理器系列的与供应商无关的硬件抽象层,可处理器系列的与供应商无关的硬件抽象层,可以为处理器和外设实现一致且简单的软件接口。以为处理器和外设实现一致且简单的软件接口。1 1、基于、基于CMSISCMSIS应用程序的架构
3、应用程序的架构中间件CMSIS层内核访问函数、外设寄存器与中断向量定义MCU层用户层RTOS、中间件层外设函数库外设函数库2 2、CMSISCMSIS包含的主要组件:包含的主要组件:FCMSIS-CORECMSIS-CORE库:库:访问内核及其设备、寄存器、内核外设函数,如访问内核及其设备、寄存器、内核外设函数,如ARMARM提提供供core_cm3.hcore_cm3.h、 core_cm3.c core_cm3.c等等core_core_前缀的文件;前缀的文件;片上外设寄存器与中断定义,如由芯片生产商提供片上外设寄存器与中断定义,如由芯片生产商提供device.hdevice.h、syst
4、em_device.csystem_device.c等文件;等文件;FCMSIS-DSPCMSIS-DSP库:包括向量运算、矩阵计算、复杂运算、筛库:包括向量运算、矩阵计算、复杂运算、筛选函数、控制函数、选函数、控制函数、PID PID 控制器、傅里叶变换和很多其他控制器、傅里叶变换和很多其他常用的常用的 DSP DSP 算法。有算法。有C C源代码允许修改。源代码允许修改。FCMSIS-RTOS APICMSIS-RTOS API库:用于线程控制、资源和时间管理的实库:用于线程控制、资源和时间管理的实时操作系统的标准化编程接口。时操作系统的标准化编程接口。 FCMSIS-SVDCMSIS-S
5、VD库:系统视图描述库:系统视图描述 (SVD) (SVD) 文件以基于格式化的文件以基于格式化的 XMLXML提供了外设信息和其他设备参数。提供了外设信息和其他设备参数。F编译器编译器+ +微控制器专用启动文件微控制器专用启动文件startup_device.sstartup_device.s。3 3、CMSISCMSIS的作用的作用FCMSISCMSIS层起着承上启下的作用:层起着承上启下的作用:对硬件寄存器层进行统一实现、统一定义;对硬件寄存器层进行统一实现、统一定义;向上层的操作系统及中间件接口层和应用层提供接口向上层的操作系统及中间件接口层和应用层提供接口,简化应用程序开发难度。,简
6、化应用程序开发难度。FCMSISCMSIS可实现与处理器和外设之间的一致且简单的软件接可实现与处理器和外设之间的一致且简单的软件接口,从而简化软件的重用,缩短微控制器开发人员新手的口,从而简化软件的重用,缩短微控制器开发人员新手的学习过程,并缩短新设备的上市时间。学习过程,并缩短新设备的上市时间。 FARMARM公司提供的公司提供的CMSISCMSIS组件函数库、芯片厂商提供的外设函组件函数库、芯片厂商提供的外设函数库都是参照此标准设计的。数库都是参照此标准设计的。Fdevice HAL(Hardware Abstraction Layerdevice HAL(Hardware Abstrac
7、tion Layer 硬件抽象层硬件抽象层) )芯片厂商的标准外设函数库。芯片厂商的标准外设函数库。7.2 C/C+7.2 C/C+项目建立与调试项目建立与调试F当前的嵌入式应用程序开发,当前的嵌入式应用程序开发,使用使用C/C+C/C+语言成了绝大部语言成了绝大部分场合的最佳选择。分场合的最佳选择。F那么那么mainmain函数成了理所当然的起点函数成了理所当然的起点。F微控制器上电后,是如何寻找到并执行微控制器上电后,是如何寻找到并执行mainmain函数的呢?函数的呢?F每一种微控制器都必须有启动文件每一种微控制器都必须有启动文件(Bootloader)(Bootloader),负责执负
8、责执行微控制器从行微控制器从“复位复位”到到“开始执行开始执行mainmain函数函数”,这段时这段时间称为启动过程间称为启动过程,进行,进行所必须的工作。所必须的工作。F芯片公司都提供了各种芯片的启动文件,芯片公司都提供了各种芯片的启动文件,开发人员可以开发人员可以方方便地便地引用启动文件直接进行引用启动文件直接进行C/C+C/C+应用程序的开发。应用程序的开发。FCortex-M3Cortex-M3规定,规定,起始起始地址存放地址存放主主堆堆栈栈指针指针初值初值,下一下一地地址存放复位中断址存放复位中断服务程序服务程序入口地址入口地址即即PCPC复位初值。复位初值。F所以芯片所以芯片复位后
9、会自动取出复位中断入口向量复位后会自动取出复位中断入口向量给给PCPC,执行,执行复位中断服务程序。复位中断服务程序。C/C+项目建立与调试项目建立与调试F第一步:新建工程,芯片选择,以第一步:新建工程,芯片选择,以Cortex M7Cortex M7核为例:核为例:C/C+项目建立与调试项目建立与调试F第二步,选择第二步,选择CMSISCMSIS的接口软件组件:的接口软件组件:CORECORE内核接口库、内核接口库、DSPDSP信号处理算法库信号处理算法库( (可选可选) )、实时操作系统、实时操作系统Keil RTX(Keil RTX(可可选选) )、DeviceDevice的的Start
10、upStartup启动文件,编译时自动添加其他启动文件,编译时自动添加其他用的库文件。用的库文件。C/C+项目建立与调试项目建立与调试F第三步:在第三步:在Source Group 1Source Group 1中添加中添加C C语言源程序即可。语言源程序即可。#define uint32 unsigned int#define uint32 unsigned int#define N#define N 10 10uint32 sum;uint32 sum;/ / 计算计算1+2+3+.+N1+2+3+.+N的值。的值。int main(void)int main(void) uint32 i
11、; uint32 i; sum = 0; sum = 0; for(i=0; i=N; i+) for(i=0; i=N; i+) sum += i; sum += i; C/C+项目建立与调试项目建立与调试F第四步:编译、链接、调试类似于汇编程序。第四步:编译、链接、调试类似于汇编程序。注意:注意:ProjectProject窗口加载的库文件窗口加载的库文件FRTX_RTX_前缀前缀的文件为的文件为Keil RTXKeil RTX实时操作实时操作系统相关文件。系统相关文件。Fstdin.h stdin.h 头文件是头文件是ANSI C ANSI C 文件,独文件,独立于处理器之外,类似熟知的
12、立于处理器之外,类似熟知的C C语言语言头文件头文件stdio.hstdio.h文件。文件。Fcore_core_前缀前缀文件核内设备访问函数层文件核内设备访问函数层,进入内核的接口。,进入内核的接口。FARMCM7.hARMCM7.h定义寄存器地址、寄存器数定义寄存器地址、寄存器数据结构、中断向量表。据结构、中断向量表。Fsystem_ ARMCM7.c /.hsystem_ ARMCM7.c /.h 含含两个函数两个函数:系统初始化函数:系统初始化函数SystemInitSystemInit、_main _main 函数;函数;Fstartup_ARMCM7.s startup_ARMCM
13、7.s 系统启动文件。系统启动文件。7.3 CM77.3 CM7的启动文件解析的启动文件解析F打开打开startup_ARMCM7.sstartup_ARMCM7.s启动文件,前面注释部分为版权信息启动文件,前面注释部分为版权信息,后面每段的作用:,后面每段的作用:F1 1、第、第1 1个为数据段,用于个为数据段,用于开辟栈开辟栈(Stack)(Stack)空间空间。 Stack_Size EQU 0 x00000400 Stack_Size EQU 0 x00000400 ; ;定义常量,栈空间大小定义常量,栈空间大小1KB1KB AREA STACK, NOINIT, READWRITE,
14、 ALIGN=3 AREA STACK, NOINIT, READWRITE, ALIGN=3 ; ;定义一个数据段定义一个数据段,8(2,8(2的的3 3次方次方) )字节对齐字节对齐Stack_Mem SPACE Stack_Size Stack_Mem SPACE Stack_Size ; ;开辟栈大小开辟栈大小1KB,1KB,并用并用0 0填充填充_initial_sp _initial_sp ; ;标号,栈顶地址指针,标号,栈顶地址指针,CM3CM3中栈为满递减中栈为满递减CM7CM7的启动文件详解的启动文件详解F2 2、第第2 2个个声声明明数数据据段段,开开辟辟堆堆( (H He
15、 ea ap p) )空空间间。H He ea ap p_ _S Si iz ze e E EQ QU U 0 0 x x0 00 00 00 00 0C C0 00 0 ; ;定定义义常常量量,堆堆大大小小3 3K K字字节节 A AR RE EA A H HE EA AP P, , N NO OI IN NI IT T, , R RE EA AD DW WR RI IT TE E, , A AL LI IG GN N= =3 3 ; ;定定义义数数据据段段,8 8字字节节对对齐齐,_ _ _h he ea ap p_ _b ba as se e ; ;堆堆的的空空间间基基址址H He ea
16、 ap p_ _M Me em m S SP PA AC CE E H He ea ap p_ _S Si iz ze e ; ;开开辟辟堆堆空空间间3 3k k字字节节, , 并并用用0 0填填充充_ _ _h he ea ap p_ _l li im mi it t ; ;堆堆空空间间结结束束地地址址CM7CM7的启动文件详解的启动文件详解F3 3、第、第3 3个数据段,定义个数据段,定义中断向量表中断向量表,复位后映射到地址复位后映射到地址0 0 AREA RESET, DATA, READONLY AREA RESET, DATA, READONLY EXPORT _VectorsEX
17、PORT _Vectors ; ;声明全局符号声明全局符号, ,表示中断向量表入口地址表示中断向量表入口地址 EXPORT _Vectors_EndEXPORT _Vectors_End; ; 表示向量表结束地址表示向量表结束地址 EXPORT _Vectors_Size EXPORT _Vectors_Size; ; 表示向量表大小表示向量表大小 _Vectors DCD _initial_sp_Vectors DCD _initial_sp ; ;地址地址0 x00 x0,第,第0 0字,栈指针字,栈指针R13R13(MSPMSP)初值)初值 DCD Reset_Handler DCD R
18、eset_Handler ; ;地址地址0 x40 x4,第,第1 1字,复位中断入口,字,复位中断入口,PCPC初值初值 DCD NMI_Handler DCD NMI_Handler ; ;地址地址0 x80 x8,非屏蔽异常非屏蔽异常 _Vectors_End _Vectors_End ; ; 中断向量结束处中断向量结束处_Vectors_Size EQU _Vectors_End - _Vectors_Vectors_Size EQU _Vectors_End - _Vectors; ;向量表长度向量表长度CM7CM7的启动文件详解的启动文件详解F4 4、第、第4 4个代码段,个代码段
19、, Reset_HandlerReset_Handler复位中断服务程序复位中断服务程序 AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY ; ; 只读代码段只读代码段Reset_Handler PROCReset_Handler PROC; ;复位中断服务程序的入口复位中断服务程序的入口 EXPORT Reset_Handler WEAKEXPORT Reset_Handler WEAK; ;声明复位中断向量为全局、外部可调用声明复位中断向量为全局、外部可调用 IMPORT SystemInit IMPORT SystemIn
20、it ; ;通知编译器要用的标号在其他文件通知编译器要用的标号在其他文件 IMPORT _main IMPORT _main ; c; c库中的标号库中的标号, ,不是不是mainmain函数函数 LDR R0, =SystemInit LDR R0, =SystemInit ; ;此处此处LDRLDR是伪指令是伪指令 BLX R0 BLX R0 ; ;跳到跳到SystemInitSystemInit,系统初始化,系统初始化 LDR R0, =_main LDR R0, =_main ; BX R0 BX R0 ; ;跳到跳到c c库中的库中的_main_main,F链接、添加链接、添加c c
21、库中的库中的_mian_mian代码代码, ,用来进行用来进行flashflash到到RAMRAM的存储的存储器映射器映射, ,执行执行lib_initlib_init等等c c库的初始化工作库的初始化工作, ,最后进入最后进入我们自我们自编源程序的编源程序的mian()mian()函数函数! !CM7CM7的启动文件详解的启动文件详解F5 5、 R Re es se et t_ _H Ha an nd dl le er r复复位位中中断断服服务务程程序序之之后后是是虚虚设设的的其其他他各各个个异异常常处处理理程程序序段段,可可根根据据需需要要自自行行修修改改。各各中中断断函函数数内内把把各各
22、个个异异常常处处理理程程序序标标号号均均声声明明全全局局、外外部部可可调调用用的的。所所有有的的中中断断函函数数全全部部带带有有 w we ea ak k 属属性性,即即弱弱定定义义,如如果果编编译译器器发发现现在在别别处处文文件件中中定定义义了了同同名名函函数数,在在链链接接时时用用别别处处的的地地址址进进行行链链接接。F6 6、在在最最后后对对栈栈和和堆堆进进行行了了初初始始化化。F启启动动文文件件到到底底什什么么作作用用?主主要要进进行行堆堆、栈栈初初始始化化,中中断断向向量量表表以以及及中中断断函函数数定定义义,复复位位中中断断处处理理函函数数R Re es se et t_ _H H
23、a an nd dl le er r是是唯唯一一的的实实现现、其其调调用用了了S Sy ys st te em mI In ni it t系系统统初初始始化化函函数数、引引导导进进入入C C/ /C C+ + +程程序序的的m ma ai in n函函数数。7.4 STM327.4 STM32标准外设库标准外设库F在在8 8位单片机的程序开发中,是直接配置单片机外设的寄位单片机的程序开发中,是直接配置单片机外设的寄存器来控制芯片的工作,如中断、定时器等。常常要查阅存器来控制芯片的工作,如中断、定时器等。常常要查阅手册,看实现某功能寄存器的某位该置手册,看实现某功能寄存器的某位该置1 1还是置还
24、是置0 0。这些都。这些都是很琐碎的、机械的工作。幸好是很琐碎的、机械的工作。幸好8 8位单片机较简单、资源位单片机较简单、资源有限,可以通过直接配置寄存器的方式来开发。有限,可以通过直接配置寄存器的方式来开发。FSTM32STM32外设资源丰富,寄存器的数量多、设置复杂度高,外设资源丰富,寄存器的数量多、设置复杂度高,直接配置寄存器方式开发程序效率低。直接配置寄存器方式开发程序效率低。FSTM32STM32库是针对库是针对STM32STM32提供的一个函数包,为开发者访问底提供的一个函数包,为开发者访问底层硬件提供了一个中间层硬件提供了一个中间APIAPI,使用库函数就可直接配置寄,使用库函
25、数就可直接配置寄存器、系统部件,无需深入掌握底层硬件细节,就可轻松存器、系统部件,无需深入掌握底层硬件细节,就可轻松应用每一个外设。应用每一个外设。FSTM32STM32库涵盖了时钟、库涵盖了时钟、GPIOGPIO、定时器、定时器、CANCAN、I2CI2C、SPISPI、UARTUART和和ADCADC等的所有标准外设。等的所有标准外设。STM32STM32标准外设库标准外设库F新建新建GPIOGPIO项目:项目:STM32STM32标准外设库文件必选项:标准外设库文件必选项:STM32STM32标准外设库标准外设库F1 1、S ST TM M3 32 2启启动动文文件件s st ta ar
26、 rt tu up p_ _s st tm m3 32 2f f1 10 0 x x_ _l ld d_ _v vl l. .s s,同同时时加加载载的的还还有有s sy ys st te em m_ _s st tm m3 32 2f f1 10 0 x x. .c c外外设设层层访访问问系系统统的的源源文文件件,主主要要对对系系统统进进行行初初始始化化。F与与s st ta ar rt tu up p_ _A AR RM MC CM Mx x. .s s启启动动文文件件是是相相似似的的,只只不不过过实实际际芯芯片片对对内内存存、外外设设等等有有了了更更多多具具体体内内容容。F2 2、s s
27、y ys st te em m_ _s st tm m3 32 2f f1 10 0 x x. .c c 文文件件提提供供了了启启动动文文件件调调用用的的两两个个函函数数和和一一个个全全局局变变量量: S Sy ys st te em mI In ni it t函函数数主主要要设设置置S ST TM M3 32 2的的时时钟钟系系统统: :H HS SI I, , H HS SE E, , L LS SI I, , L LS SE E, , P PL LL L倍倍频频因因子子, , S SY YS SC CL LK K、 A AH HB B/ /A AP PB Bx x预预分分频频、 F Fl
28、 la as sh h设设置置等等; _ _ _m ma ai in n函函数数由由编编译译器器生生成成,负负责责初初始始化化栈栈、堆堆等等,并并在在最最后后跳跳转转到到用用户户源源程程序序的的m ma ai in n( () )函函数数,来来到到C C的的世世界界。S Sy ys st te em mF Fr re eq qu un nc cy y,该该值值代代表表系系统统时时钟钟频频率率。STM32STM32标准外设库标准外设库F3 3、stm32f10 x.hstm32f10 x.h头文件:头文件:外设寄存器的定义、位定义、中外设寄存器的定义、位定义、中断向量表、存储空间的地址映射等。断
29、向量表、存储空间的地址映射等。F如同如同5151单片机的单片机的头文件一样,头文件一样,stm32f10 x.hstm32f10 x.h像一像一个大表格,我们在使用的时候就是通过宏定义进行类似查个大表格,我们在使用的时候就是通过宏定义进行类似查表的操作。表的操作。F例:没有这个文件的话,怎样访问例:没有这个文件的话,怎样访问STM32STM32的寄存器,有什的寄存器,有什么缺点?么缺点? 需要查手册来确定哪个地址对应哪个寄存器。需要查手册来确定哪个地址对应哪个寄存器。地址易写错、可读性差、易出错、开发效率低。地址易写错、可读性差、易出错、开发效率低。 F新建项目选库时必选项:新建项目选库时必选
30、项:FrameworkFramework,加载下,加载下2 2个库文件。个库文件。F4 4、stm32f10 x_conf.hstm32f10 x_conf.h,库配置文件,记录用到的外设库,库配置文件,记录用到的外设库文件。文件。F5 5、misc.cmisc.c,设置,设置NVICNVIC的函数库。的函数库。STM32STM32标准外设库标准外设库F6 6、stm32f10 x_rcc.cstm32f10 x_rcc.c必选项,设置系统时钟相关函数的库必选项,设置系统时钟相关函数的库;除了在;除了在SystemInit()SystemInit()函数中对时钟初始化。函数中对时钟初始化。标准
31、外设库文件:标准外设库文件:stm32f10 x_adc.cstm32f10 x_adc.c stm32f10 x_bkp.cstm32f10 x_bkp.c stm32f10 x_can.cstm32f10 x_can.c stm32f10 x_cec.cstm32f10 x_cec.c stm32f10 x_crc.cstm32f10 x_crc.c stm32f10 x_dac.cstm32f10 x_dac.c stm32f10 x_dbgmcu.cstm32f10 x_dbgmcu.c stm32f10 x_dma.cstm32f10 x_dma.c stm32f10 x_exti.
32、cstm32f10 x_exti.c stm32f10 x_flash.cstm32f10 x_flash.c stm32f10 x_fsmc.cstm32f10 x_fsmc.c stm32f10 x_gpio.cstm32f10 x_gpio.c stm32f10 x_i2c.cstm32f10 x_i2c.c stm32f10 x_iwdg.cstm32f10 x_iwdg.c stm32f10 x_pwr.cstm32f10 x_pwr.c stm32f10 x_rcc.cstm32f10 x_rcc.c stm32f10 x_rtc.cstm32f10 x_rtc.c stm32f10 x_sdio.cstm32f10 x_sdio.c stm32f10 x_spi.cstm32f10 x_spi.c stm32f10 x_tim.cstm32f10 x_tim.c stm32f10 x_usart.cstm32f10 x_usart.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吊顶包干合同模板
- 买瓷砖有合同模板
- 第三方买保险合同模板
- 外墙油漆装修合同模板
- 退货退款合同模板
- 电影设备购置合同模板
- 荒山合作种植合同模板
- 食品双方责任合同模板
- 美发实体转让合同模板
- 庭院菜地托管合同模板
- 某建筑企业集团经营理念与目标(5篇)
- 关于收集员工个人信息档案工作的通知-+员工个人信息档案登记表模板
- Introduction-of-Giant-Panda大熊猫英文介绍
- 地磅拆除施工方案
- 软件正版化工作信息统计表样表
- 生态环境保护责任清单
- 2型糖尿病糖尿病肾病的护理查房
- 白酒Ⅲ行业深度报告:酱酒专题酱香风起再焕生机-方正证券
- 初中历史《第8课:革命先行者孙中山》课件
- 教育装备质量检查汇报通用
- 如何做好小学数学模拟课堂片段教学
评论
0/150
提交评论