STM32嵌入式技术及应用 课件 任务1-2 创建STM32固件库的工程模板_第1页
STM32嵌入式技术及应用 课件 任务1-2 创建STM32固件库的工程模板_第2页
STM32嵌入式技术及应用 课件 任务1-2 创建STM32固件库的工程模板_第3页
STM32嵌入式技术及应用 课件 任务1-2 创建STM32固件库的工程模板_第4页
STM32嵌入式技术及应用 课件 任务1-2 创建STM32固件库的工程模板_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

掌握固件库架构搭建开发环境创建工程模板建议课时:4学时难度等级:初级STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用任务1-2创建STM32固件库的工程模板项目一LED控制设计与实现CONTENTS目录01任务目标明确学习目标与能力要求,掌握固件库基本概念和工程模板创建流程核心能力培养02知识储备学习STM32固件库架构、CMSIS标准、文件结构和启动文件选择理论基础03任务实施动手实践:准备工作、搭建工程、配置工程和编译验证实践操作04任务总结梳理核心知识点、技能提升要点和代码规范要求知识梳理05提升训练与评价通过知识问答、实践操作和任务评价,巩固所学知识,提升工程实践能力能力提升01CHAPTERONE任务目标明确学习目标与能力要求为后续嵌入式开发打下坚实基础掌握固件库概念搭建开发环境TASKOBJECTIVES任务目标目标一掌握固件库基本概念理解STM32固件库的基本概念及其种类,了解标准外设固件库、HAL库和LL库的特点和适用场景,为选择合适的开发方式提供依据。标准外设库HAL库LL库目标二学会创建工程模板学会新建基于STM32固件库的MDK工程模板,包括配置系统时钟、初始化外设和编写用户代码等步骤,掌握工程搭建的完整流程。系统时钟配置外设初始化目标三熟悉开发基本流程通过实践熟悉STM32项目开发的基本流程,包括准备工作、工程搭建、配置编译等环节,培养规范的工程开发习惯。准备工作编译调试学习成果预期完成本任务后,你将能够独立创建基于STM32标准外设库的Keil工程模板,理解固件库的架构和工作原理,为后续GPIO、定时器、中断等外设的学习和开发打下坚实基础。02CHAPTERTWO知识储备理论基础与核心概念深入理解STM32固件库架构CMSIS标准文件架构DEVELOPMENTCHALLENGES传统单片机开发的痛点传统开发方式传统的微控制器如8051系列,一般都是通过直接配置寄存器来控制芯片的工作方式,如使用定时器、中断等。配置时需要查看芯片的数据手册需要将寄存器的相应位配置成"0"或"1"工作既机械又麻烦,效率低下STM32的挑战STM32微控制器功能强大,片上集成的资源丰富,SFR(特殊功能寄存器)非常多。若采用直接配置寄存器的方式进行编程,将会花费大量时间来查阅数据手册,开发效率极低。1查阅手册耗时需要反复查阅数据手册,理解每个寄存器的功能和位定义2配置过程繁琐需要逐个配置寄存器的每一位,容易出错且难以维护3开发效率低下大量时间花在底层配置,无法专注于应用逻辑开发FIRMWARELIBRARYSTM32库函数的诞生解决方案的诞生为了帮助学习者快速上手,ST公司找了顶级的工程师创建了STM32库函数。库函数就是架设在寄存器与用户驱动层之间的代码。向下直接处理寄存器的相关配置向上提供配置寄存器的函数接口核心优势让开发者脱离最底层的寄存器操作,大幅提升开发效率,将更多精力投入到应用逻辑的实现上。库函数架构层次用户应用层ApplicationCode库函数层FirmwareLibrary寄存器层HardwareRegistersCMSISSTANDARDCMSIS标准概述为什么需要CMSIS?STM32采用的Cortex-M3内核是ARM公司提出的,不同芯片的区别主要是核外的片上外设的差异。这些差异会导致软件在同内核、不同外设的芯片上移植困难。解决方案为了解决不同芯片厂商生产的Cortex内核软件的兼容性问题,ARM公司与芯片生产厂商建立了CMSIS标准。CMSIS标准定义CortexMicrocontrollerSoftwareInterfaceStandardARMCortex微控制器软件接口标准软件抽象层位于硬件层与操作系统或用户层之间硬件无关性提供与芯片生产厂商无关的硬件抽象层软件可移植为外设、RTOS提供简单的处理器软件接口CMSISARCHITECTURECMSIS标准架构图屏蔽硬件差异CMSIS层位于硬件层与用户层之间,屏蔽了不同芯片厂商的硬件差异,对软件移植有极大的好处。软件可移植性为外设和实时操作系统提供简单的处理器软件接口,实现跨平台软件移植。STM32固件库STM32固件库就是按照CMSIS标准建立的,符合ARM公司的标准化要求。CMSISCORELAYERSCMSIS核心层详解内核函数层CoreFunctionLayer核心文件core_cm3.h/core_cm3.c提供方主要由ARM公司提供功能说明包含用于访问内核寄存器的名称、地址定义设备外设访问层DevicePeripheralAccessLayer核心文件stm32f10x.h/system_stm32f10x.c提供方主要由芯片生产厂商提供功能说明提供核外的片上外设的地址和中断定义CMSIS核心层总结CMSIS标准中最主要的是CMSIS核心层,包括内核函数层和设备外设访问层两部分,分别由ARM公司和芯片生产厂商提供,共同构成了STM32固件库的基础架构。FIRMWARELIBRARYTYPESSTM32固件库的种类标准外设固件库StandardPeripheralsFirmwareLibrary推出时间最早生态最为完整更新到V3.5后停止初学者的首选HAL库HardwareAbstractionLibrary伴随STM32CubeMX图形化配置生成代码增加程序设计框架快速开发首选LL库Low-LevelLibrary最新推出的库提供更底层访问性能优化更好高性能场景第三方固件库官方固件库都是基于C语言开发的,不具备面向对象的特点。在GitHub等平台上出现了基于C++的固件库,libstm32pp就是其中一种。STANDARDPERIPHERALSLIBRARY标准外设固件库特点历史与生态标准外设固件库是推出时间最早、生态最为完整的库,主要是将一些基本的寄存器操作封装成了C函数。版本说明ST公司在其更新到3.5版本(STM32F10x_StdPeriph_Lib_V3.5.0)后停止了更新。核心优势结构简单,易于理解未干预开发者的设计思路仍有大量开发人员在使用初学者的首选对于初学者来说,标准外设固件库是最佳的学习选择,因为它能够帮助你更好地理解底层寄存器的工作原理。通过学习标准库,你可以深入了解STM32的硬件架构,为后续学习HAL库和LL库打下坚实基础。本书将基于标准外设固件库进行讲解,帮助读者建立扎实的嵌入式开发基础。HAL&LLLIBRARYHAL库和LL库特点HAL库HardwareAbstractionLibrarySTM32CubeMXHAL库和LL库是伴随着STM32CubeMX软件共同出现的图形化配置使用该工具,操作鼠标即可完成配置,自动生成基于HAL库或LL库的代码设计框架HAL库不是一个纯粹的SFR操作接口,还增加了一些程序设计框架LL库Low-LevelLibrary最新推出LL库是最新推出的底层库,提供更接近寄存器的操作接口高性能相比HAL库,LL库的执行效率更高,代码体积更小灵活控制提供更精细的硬件控制,适合对性能要求高的应用场景使用建议有经验的开发人员,经过一段时间的熟悉与使用,利用STM32CubeMX的自动生成代码功能确实可以在一定程度上提高开发效率。THIRD-PARTYLIBRARY第三方固件库官方库的局限官方固件库都是基于C语言开发的,不具备面向对象的特点。对于习惯使用面向对象编程的开发者来说,这可能是一个不便之处。第三方库的兴起在GitHub等平台上出现了基于C++的固件库,libstm32pp就是其中一种代表。第三方库的局限性使用者较少相比官方库,第三方库的使用者要少得多团队负担在团队中使用时,增加了团队其他成员的负担资源较少相关资源也比较少,不利于解决学习中遇到的问题本书选择在初学阶段,为了将注意力集中到STM32微控制器开发本身,本书将基于标准外设固件库进行讲解,对片上资源熟悉以后,读者可以过渡到HAL库、LL库。LIBRARYSELECTIONGUIDE固件库选择建议固件库类型主要特点适用场景推荐指数标准外设库结构简单,易于理解未干预设计思路生态完整初学者学习理解底层原理教学培训HAL库图形化配置自动生成代码开发效率高快速开发复杂项目团队协作LL库执行效率高代码体积小精细控制性能要求高资源受限底层优化初学者建议建议初学者先掌握标准库,理解底层原理后,再过渡到HAL库和LL库。学习路径标准库→HAL库→LL库,循序渐进,逐步深入。FILEARCHITECTURESTM32固件库文件架构STD库文件基本架构架构说明开发者使用标准固件库时,需关注所使用的外设是在哪个总线上、具体寄存器的配置等底层信息。标准固件库的文件基本架构并不复杂,较好展示了各层以及具体文件间的联系。分层优势清晰的层次结构,便于理解和维护各层职责明确,降低耦合度便于代码复用和移植后续内容接下来将详细介绍各核心文件的功能和作用。COREFILES(1/3)核心文件功能说明(一)内核访问层文件core_cm3.c/core_cm3.h文件类型分别是内核访问层的源文件和头文件核心功能提供进入M3内核的接口提供方由ARM公司提供的CMSIS核心文件重要提示对所有M3内核的芯片都一样,永远都不需要修改微控制器专用头文件stm32f10x.h重要性该文件相当重要,是开发的基础包含内容•STM32F10x全系列所有外设寄存器的定义•寄存器的基地址和布局•位定义、中断向量表•存储空间的地址映射等使用提示编程时需要经常查阅此文件,了解寄存器的定义和配置COREFILES(2/3)核心文件功能说明(二)系统时钟设置文件system_stm32f10x.c/.h核心功能主要设置系统和总线时钟相关的函数关键函数SystemInit()-系统启动时自动调用自动配置用来设置系统的整个时钟系统,不需要用户配置时钟,程序就能运行编译器启动代码startup_stm32f10x_Xd.s核心功能•进行堆栈等的初始化•中断向量表以及中断函数定义•引导程序进入main函数文件位置在STM32F10x子目录下的startup子目录中文件数量在\startup\arm目录下,可以看到8个以startup开头的".s"文件COREFILES(3/3)核心文件功能说明(三)固件库配置文件stm32f10x_conf.h核心功能通过#include宏指令配置项目使用的外设驱动库使用技巧可以注释掉不用的外设头文件,只选择需要的外设中断函数文件stm32f10x_it.c/.h核心功能包含STM32的中断函数重要说明只写了ARM内核的几个异常中断,其他需用户编写外设驱动函数文件stm32f10x_ppp.c/.h核心功能包括相关外设的初始化配置和功能应用函数重要性这是进行编程功能实现的重要组成部分文件关系总结这些文件共同构成了STM32固件库的完整架构,从底层的内核访问到上层的应用开发,每个文件都有其特定的功能和作用。理解这些文件的功能,是掌握STM32开发的关键。STARTUPFILESELECTION启动文件选择指南启动文件容量标识FLASH容量适用系列startup_stm32f10x_ld.sld:low-density16-32KSTM32F101xxSTM32F102xxSTM32F103xx(基本型)startup_stm32f10x_md.smd:medium-density64-128Kstartup_stm32f10x_hd.shd:high-density256-512Kstartup_stm32f10x_xl.sxl:extralarge512-1024Kstartup_stm32f10x_cl.scl:connectivityline-STM32F105xxSTM32F107xx(互联型)startup_stm32f10x_ld_vl.svl:valueline16-32KSTM32F100xx(超值型)startup_stm32f10x_md_vl.s64-128Kstartup_stm32f10x_hd_vl.s256-512K本书选择本书选用的STM32F103R6的FLASH是32K,属于基本型的小容量产品,启动文件选择startup_stm32f10x_ld.s。SYSTEMCLOCKCONFIGURATION系统时钟配置详解SystemInit()函数此文件主要设置系统及总线时钟相关的函数。该文件中定义了初始化函数SystemInit(),这个函数在系统启动时都会被调用。系统主频配置通过注释不同的"#define"宏定义,可将芯片配置为不同的系统主频:超值型芯片24MHz非超值型芯片72MHz时钟配置代码示例//系统主频配置#defineSYSCLK_FREQ_HSE8000000#defineSYSCLK_FREQ_24MHz24000000#defineSYSCLK_FREQ_36MHz36000000#defineSYSCLK_FREQ_48MHz48000000#defineSYSCLK_FREQ_56MHz56000000#defineSYSCLK_FREQ_72MHz72000000//取消注释需要的频率//程序启动时自动配置重要提示编程时应尽量避免对STM32标准外设库文件夹中的文件进行任何的修改,导致系统主频不对。CONFIGURATIONFILE固件库配置文件应用stm32f10x_conf.h在这个文件中用"#include"宏指令配置项目所要用到的外设驱动函数库。使用技巧项目使用的外设驱动库文件必须被包含,未使用的外设驱动库头文件也可以被包含,并不影响最终的编译和运行结果,只是会增加编译时间。优化建议建议只包含需要的外设头文件,注释掉不用的头文件,以减少编译时间和提高代码可读性。点亮LED灯项目配置示例//stm32f10x_conf.h配置文件//标准外设库头文件配置#include"stm32f10x_gpio.h"//GPIO外设-必需#include"stm32f10x_rcc.h"//RCC时钟-必需//以下头文件在本项目中不需要,已注释//#include"stm32f10x_adc.h"//#include"stm32f10x_can.h"//#include"stm32f10x_dma.h"//#include"stm32f10x_exti.h"//#include"stm32f10x_i2c.h"//#include"stm32f10x_spi.h"//#include"stm32f10x_tim.h"//#include"stm32f10x_usart.h"必需包含stm32f10x_gpio.hstm32f10x_rcc.h已注释其他外设头文件减少编译时间INTERRUPTHANDLERFILES中断函数文件说明外设中断函数文件stm32f10x_it.c/.h包含内容包含了STM32的中断函数重要说明源文件和头文件中并没有把所有的中断入口函数都写出来,而只写了ARM内核的几个异常中断用户编写其它中断函数需要用户自己编写中断服务函数名称STM32标准外设库中断服务函数的名称已定义好,可以在相应的汇编语言启动代码中查询到。文件位置灵活在实际编程过程中,也经常会将中断服务函数的源代码放在其它的文件中,并非强制要求放在stm32f10x_it.c文件中。启动代码中的中断定义//startup_stm32f10x_ld.sDCDTIM2_IRQHandler;TIM2DCDTIM3_IRQHandler;TIM3DCDTIM4_IRQHandler;TIM4DCDI2C1_EV_IRQHandler;I2C1EventDCDSPI1_IRQHandler;SPI1DCDUSART1_IRQHandler;USART103CHAPTERTHREE任务实施动手实践与工程搭建从零开始创建STM32工程模板准备工作搭建工程PREPARATION准备工作1下载固件库从ST官网下载STM32F10x_StdPeriph_Lib_V3.5.0固件库。下载地址:ST官方网站2安装开发环境下载并安装好KeiluVisionV5.30(MDK5)开发环境。推荐版本:MDK5.30或更高固件库文件夹结构Libraries库文件重要包含STM32的系统源文件和头文件Project例程和模板包含STM32F10x的例程和工程模板_htmrescSTLogo里面是ST的Logo图片,基本无用Utilities实用程序里面有一些实用程序,也没多大用FOLDERSTRUCTURE创建工程文件夹结构工程文件夹结构STM32_Project工程根目录CMSISLibrariesStartupUserProject存放项目文件CMSIS从固件库中的CMSIS文件夹直接复制过来,包含内核相关文件Libraries从固件库中的Libraries文件夹复制过来,只保留inc和src文件夹Startup放置启动代码,根据所用芯片的容量选择合适的启动文件User用户应用程序,包括main.c、stm32f10x_conf.h、stm32f10x_it.c等Project存放项目文件,如STM32_Template.uvproj,以及输出信息CREATEKEILPROJECT新建Keil工程步骤1新建项目打开Keil5软件,在Project菜单下选择NewuVisionProject新建项目。2命名与保存键入新的项目名称如STM32_Template,保存到刚才的Project文件夹下面。3选择芯片选择芯片类型,根据实际情况选择,选STM32F103R6,点击OK。4跳过组件管理MDK会弹出"ManageRun-TimeEnvironment"对话框,这是MDK5新增的功能。本书创建工程的方式是添加ST官方文件,直接点击OK即可。操作流程图Project→NewuVisionProject输入项目名:STM32_Template选择芯片:STM32F103R6点击OK跳过组件管理ADDFILESTOPROJECT添加文件到工程打开管理窗口点击项目组合图标,弹出"组件、环境、书籍"窗口。添加文件组可根据实际需要添加相应的文件组,包括:CMSIS、Libraries、Startup、User等。完成添加添加完成后,工程Project区会显示文件树状结构。Project文件结构CMSIScore_cm3.c、system_stm32f10x.c、stm32f10x.hLibrariesstm32f10x_gpio.c、stm32f10x_rcc.c、...Startupstartup_stm32f10x_ld.sUsermain.c、stm32f10x_conf.h、stm32f10x_it.c根据实际需要添加相应的文件,确保工程结构清晰PROJECTCONFIGURATION(1/2)工程配置(一)1Target设置点击图标进入TargetOption界面,设置晶振为实际所用晶振的频率。时钟晶振频率8.00MHz2Output设置选择Output项进行设置,配置输出文件的生成选项。3Listing设置点击Listing选项,配置Listing文件的所在路径为Project下的Listing文件夹。配置步骤总结1设置目标选项(晶振频率8MHz)2选择Output项进行设置3配置Listing文件路径接下来进行C/C++选项的配置(见下一页)PROJECTCONFIGURATION(2/2)工程配置(二)C/C++选项在"C/C++"选项中进行关键配置。预定义宏加入预定义的宏:USE_STDPERIPH_DRIVERSTM32F10X_LD头文件路径在"IncludePaths"框中填入头文件所在目录。宏定义说明USE_STDPERIPH_DRIVERV3.5版的库函数在配置和选择外设时,是通过宏定义来选择的,所以需要配置一个全局的宏定义变量,否则工程编译会出错。STM32F10X_LD根据芯片容量选择不同的宏定义:小容量LD中容量MD大容量HDCOMPILE&VERIFY编译与验证1保存配置单击OK按钮,退出"OptionsforTarget'Target1'"对话框。2编译工程单击工具栏的Rebuild按钮,对工程进行编译。3检查错误若编译发生错误,要进行分析检查,直到编译正确为止。编译成功标志0Error(s),0Warning(s)编译成功,无错误无警告常见编译错误及解决方案UndefinedsymbolSystemInit检查system_stm32f10x.c是否添加到工程Cannotopensourceinputfile检查头文件路径配置是否正确USE_STDPERIPH_DRIVERundefined检查C/C++选项中的宏定义配置04CHAPTERFOUR任务总结知识梳理与能力提升巩固所学,为后续学习做准备核心知识点技能提升KEYKNOWLEDGEPOINTS核心知识点总结知识点一固件库差异理解理解标准外设库(STD)、HAL库和LL库的差异,掌握它们各自的特点和适用场景。CMSIS标准架构掌握CMSIS标准的层级架构,包括内核函数层和设备外设访问层。知识点二工程模板文件结构熟悉工程模板的文件结构,包括启动文件、系统时钟配置、外设驱动文件等。启动文件选择掌握如何根据芯片容量选择合适的启动文件(ld/md/hd/xl等)。CMSIS架构内核层+外设层三种固件库STD/HAL/LL文件架构启动+系统+外设SKILLS&STANDARDS技能提升与代码规范技能提升创建工程模板创建基于标准外设库的Keil工程模板系统时钟初始化完成系统时钟初始化(如72MHz主频配置)工程配置优化通过宏定义优化工程配置,减少冗余编译时间代码规范使用stm32f10x_conf.h精简外设头文件,提升工程可维护性。工程配置最佳实践宏定义配置正确配置USE_STDPERIPH_DRIVER和芯片容量宏定义头文件路径确保所有头文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论