您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 面向库文件函数的程序设计-GPIO
九江学院谢辉程martinxhc@126.com06面向库文件函数的程序设计-GPIOPage2本章内容STM32F10x标准外设库概述stm32f10x.h分析建立基于库文件函数的工程stm32f10x_gpio.c函数调用Page3STM32F10x标准外设库概述STM32F10x标准外设库是一个固件函数包,由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。还包括每一个外设的驱动描述和应用实例。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API(ApplicationProgrammingInterface应用编程界面)驱动。Page4STM32F10x标准外设库文件结构标准库文件html页面资源EVAL评估板专用驱动项目模板示例标准外设库驱动完整例程CMSIS库外设库Page5CMSIS架构ARM公司于2008年11月12日发布了ARMCortex微控制器软件接口标准(CMSIS:CortexMicrocontrollerSoftwareInterfaceStandard)。CMSIS是独立于供应商的Cortex-M处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了连续的、简单的处理器软件接口,简化了软件复用,降低了Cortex-M3上操作系统的移植难度,并缩短了新入门的微控制器开发者的学习时间和新产品的上市时间。Page6CMSIS核内外设访问层中间件访问层设备外设访问层CMSIS层结构CortexCPUSysTick实时内核定时器NVIC嵌套向量中断控制器调试/跟踪接口其他外设微控制器外设寄存器和中断向量定义层用户应用程序代码实时操作系统实时内核中间件Page7CMSIS层结构核内外设访问层中间件访问层设备外设访问层外设寄存器和中断向量定义层核内外设访问层CPAL(CorePeripheralAccessLayer)由ARM负责实现。包括对寄存器地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口中间件访问层MWAL(MiddlewareAccessLayer)由ARM负责实现,但芯片厂商需要针对所生产的设备特性对该层进行更新。该层主要负责定义一些中间件访问的API函数。设备外设访问层DPAL(DevicePeripheralAccessLayer)由芯片厂商负责实现。负责对硬件寄存器地址以及外设访问接口进行定义。core_cm3.hstm32f10x.hsystem_stm32fx.hPage8STM32F10x标准外设库文件结构CMSISSTM32F10x_StdPeriph_DriverCore_cm3.hCore_cm3.cSTSTM32F10xstartupstm32f10x.hsystem_stm32f10x.hsystem_stm32f10x.cstartup_stm32f10x_cl.sstartup_stm32f10x_hd.sstartup_stm32f10x_hd_vl.sstartup_stm32f10x_ld.sstartup_stm32f10x_ld_vl.sstartup_stm32f10x_md.sstartup_stm32f10x_md_vl.sstartup_stm32f10x_xl.sarmgcc_ride7iarTrueSTUDIOsrcincstm32f10x_ppp.cstm32f10x_ppp.cstm32f10x_ppp.cMisc.cstm32f10x_ppp.cstm32f10x_ppp.cstm32f10x_ppp.hMisc.hDocumentionCM3CoreSupportDeviceSupportPage9启动文件的选择startup_stm32f10x_cl.s互联型的器件,STM32F105xx,STM32F107xxstartup_stm32f10x_hd.s大容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10x_hd_vl.s大容量的STM32F100xxstartup_stm32f10x_ld.s小容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10x_ld_vl.s小容量的STM32F100xxstartup_stm32f10x_md.s中容量的STM32F101xx,STM32F102xx,STM32F103xxstartup_stm32f10x_md_vl.s中容量的STM32F100xxstartup_stm32f10x_xl.sFLASH在512K到1024K字节的STM32F101xx,STM32F102xx,STM32F103xxPage10core_cm3.h解析内核文件,定义了一些Cortex-M3的寄存器和一些函数,包括NVIC,MPU,SCB,SysTick,Debug寄存器。84~88:定义版本号90:包含stdint.h(数据类型定义)97~99:定义__NVIC_PRIO_BITS110~116:定义__I,__O,__IO120~732:定义寄存器结构,寄存器位定义(CortexM3)737~1812:函数定义Page11core_cm3.c解析__ASMuint32_t__get_PSP(void):获取进程堆栈指针PSP。__ASMvoid__set_PSP(uint32_ttopOfProcStack):设置PSP。__ASMuint32_t__get_MSP(void):获取主堆栈指针MSP。__ASMvoid__set_MSP(uint32_tmainStackPointer):设置MSP。__ASMuint32_t__REV16(uint16_tvalue):反转半字中字节顺序,如0xABCD反转后得到0xCDAB。__ASMint32_t__REVSH(int16_tvalue):反转字节顺序,并做符号拓展。就是在__REV16函数得到的结果上再进行一次符号拓展。这两个函数主要是方便进行大小端的切换。Page12core_cm3.c解析__ASMvoid__CLREX(void):清除由LDREX指令造成的互斥锁。LDREX和STREX是Cortex用来实现互斥访问,保护临界资源的指令,LDREX执行后,只有离它最近的一条存储指令(STR,STREX)才能执行,其他的存储指令都会被驳回,而CLREX就是用于清除互斥访问状态的标记。__ASMuint32_t__get_BASEPRI(void):获取BASEPRI寄存器的值,优先级号高于该寄存器的中断都会被屏蔽(优先级号越大,优先级越低),为零时不屏蔽任何中断。__ASMvoid__set_BASEPRI(uint32_tbasePri):设置BASEPRI的值。__ASMuint32_t__get_PRIMASK(void):PRIMASK是一个只有一位的寄存器,置位时屏蔽绝大部分的异常中断,只剩下NMI和HardFault可以响应。__ASMvoid__set_PRIMASK(uint32_tpriMask):设置PRIMASK的值。Page13core_cm3.c解析__ASMuint32_t__get_FAULTMASK(void):FAULTMASK也是一个只有一位的寄存器,为1时只有NMI才能响应,其他异常与中断全部被屏蔽。__ASMvoid__set_FAULTMASK(uint32_tfaultMask):设置FAULTMASK的值。__ASMuint32_t__get_CONTROL(void):获取CONTROL的值。寄存器CONTROL只有两位。CONTROL[0]选择特权级别,0为特权级,1为敌用户级。CONTROL[1]用于选择堆栈指针,0为MSP,1为PSP。__ASMvoid__set_CONTROL(uint32_tcontrol):设置CONTROL寄存器的值。BASEPRI,PRIMASK,FAULTMASK,CONTROL都只能在特权模式下被修改。Page14stm32f10x.h分析65~97:定义CPU,选择STM32F10X_MD99~106:定义USE_STDPERIPH_DRIVER,确定是否使用外设驱动库。115~121:定义HSE频率。128:定义HSE启动时间上限130:定义HSI频率132~143:定义固件函数库版本号155~159:定义MPU160:定义__NVIC_PRIO_BITS161:定义__Vendor_SysTickConfigPage15stm32f10x.h分析167~472:定义中断向量,数据类型IRQ_TYPE。478~480:包含头文件487~517:定义新数据类型519~524:定义状态常量(枚举)542~1261:定义外设寄存器结构体1272~1370:定义外设基地址1380~1453:定义外设寄存器指针1467~8286:定义外设寄存器中的位8296~8298:根据是否定义USE_STDPERIPH_DRIVER决定是否包含stm32f10x_conf.h。8304~8316:定义寄存器位操作函数。Page16system_stm32f10x.c分析_时钟设置65:包含stm32f10x.h106~116:定义系统时钟频率(根据实际情况选择)128:定义VECT_TAB_OFFSET148~165:定义SystemCoreClock167:定义AHB预分频数组176~1080:定义函数Page17system_stm32f10x.c分析externvoidSystemInit(void);设置系统时钟(系统时钟源、PLL倍频因子、AHB/APBx的预分频及其Flash)该函数在启动后的复位中被调用。externvoidSystemCoreClockUpdate(void);更新系统内核时钟,当系统内核时钟变化后必须执行该函数进行更新Page18外设库结构misc.c/misc.hNVIC外设驱动,代替原来的stm32f10x_nvic.c.stm32f10x_adc.c/stm32f10x_adc.hstm32f10x_bkp.c/stm32f10x_bkp.hstm32f10x_can.c/stm32f10x_can.hstm32f10x_cec.c/stm32f10x_cec.hstm32f10x_crc.c/stm32f10x_crc.hstm32f10x_dac.c/stm32f10x_dac.hstm32f10x_dbgmcu.c/stm32f10x_dbgmcu.hstm32f10x_dma.c/stm32f10x_dma.hstm32f10x_exti.c/stm32f10x_exti.hstm32f10x_flash.c/stm32f10x_flash.hPage19外设库结构stm32f10x_fsmc.c/stm32f10x_fsmc.hstm32f10x_gpio.c/stm32f10x_gpio.hstm32f10x_i2c.c/stm32f10x_i2c.hstm32f10x_iwdg.c/stm32f10x_iwdg.hstm32f10x_pwr.c/stm32f10x_pwr.hstm32f10x_rcc.c/stm32f10x_rcc.hstm32f10x_rtc.c/stm32f10x_rtc.hstm32f10x_sdio.c/stm32f10x_sdio.hstm32f10x_spi.c/stm32f10x_spi.hstm32f10x_tim.c/stm3
本文标题:面向库文件函数的程序设计-GPIO
链接地址:https://www.777doc.com/doc-4752903 .html