STM32单片机应用与全案例实践(第2版)课件 第13章 基于固件库的开发示例_第1页
STM32单片机应用与全案例实践(第2版)课件 第13章 基于固件库的开发示例_第2页
STM32单片机应用与全案例实践(第2版)课件 第13章 基于固件库的开发示例_第3页
STM32单片机应用与全案例实践(第2版)课件 第13章 基于固件库的开发示例_第4页
STM32单片机应用与全案例实践(第2版)课件 第13章 基于固件库的开发示例_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第13章

基于固件库的开发及示例1本章要览1STM32程序工程模版的创建2STM32程序的烧写、调试3三个GPIO输出的范例——STM32中延时程序实现的三种常用方法这一章顺便讨论GPIO的应用——输出部分2STM32最小系统1本章开始范例程序所使用的的STM32最小系统1最小系统组成单元

CPU单元STM32F103RBT6数字电源与模拟电源通过0电阻直接共用电源LM2596SASM111712V转4V4V转3.3VBOOTBOOT0BOOT1芯片复位后从哪个区域开始执行程序串口与SWDUSARTSWD2个串口1个SWD调试接口人机界面LED独立按键5个LED3个按键接口3STM32最小系统1最小系统组成单元

CPU单元STM32F103RBT6数字电源与模拟电源通过0电阻直接共用4STM32最小系统1最小系统组成单元

5STM32最小系统1最小系统组成单元

一定要清楚:在程序下载前,BOOT的设置;下载后,要运行程序,BOOT又如何设置

6STM32最小系统1最小系统组成单元

7STM32最小系统1最小系统组成单元

USART3USART1SWD调试接口:4线即可8STM32工程模版的建立什么是工程模板?

建立工程模板的实质是什么?

建立工程模板的主要步骤有哪些?

建立工程模板的几个注意事项

一定要深刻理解工程模板的实质这样就不会机械地去学工程模板的建立问题了就能根据自己的喜好建立模板了——抵达自由王国9STM32工程模版的建立什么是工程模板?

STM32的工程模板——就是开发STM32应用程序的一个通用架构、及其配置,换言之,就是一个配置好了的空的工程——应用程序环境。有了它,可以更加快捷地开发STM32的应用程序建立工程模板的实质是什么?

STM32的模板实质——一个STM32工程应该有哪些东西,如何配置工程选项,使编译器在组件生成代码时能找到这些东西,完成代码的编译和连接。也就是说:►►必须包含哪些必要的文件;►►这些文件分别到哪里寻找,即对应的路径。10STM32工程模版的建立认识STM32的固件库

STM32固件库是什么东东——STM32的固件库

是一个或以上的完整的软件包(被称之为固件包),包括所有的标准外设的设备驱动程序,其本质是一个固件函数包(库),它由程序、数据结构和各种宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API。使用STM32固件库好在哪——通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。从而大大缩短开发时间,降低开发难度。STM32固件库的今世前身——ST公司2007年10月发布了V1.0版本的固件库,目前最为通用是V3.5版本,该版本固件库支持所有STM32F10X系列。可从官网免费下载。11STM32工程模版的建立认识STM32的固件库

STM32固件库——都有哪些东西,各自有啥用Libraries文件夹下是驱动库的源代码与启动文件。Project文件夹下是用驱动库写的例子跟一个工程模板。_htmresc文件夹是ST公司的LOGO图标等文件,可以直接忽视它。Utilities文件夹下存放的是ST公司评估板的相关例程代码,可以作为学习参考用,也可以直接忽视。对固件库的简单说明12STM32工程模版的建立认识STM32的固件库

STM32固件库里有一样宝贝——【1】stm32f10x_stdperiph_lib_um.chm为已经编译的帮助系统,也就是该固件库的使用手册和应用举例。【2】学会使用和爱上这个帮助系统,可以大大加快你学习的进度,让你很快“渐入佳境”!不信,我带你看看!13STM32工程模版的建立认识STM32的固件库

最后还有一样要跟你说说——Startup文件夹下有四个对应不同开发环境的启动代码文件夹,其中arm文件对应KEIL开发环境。汇编语言开发,对应不同容量芯片的启动代码,共9个启动代码是任何处理器在上电复位之后最先运行的一段汇编程序代码。那么,启动代码是啥东东呢?这个留给大家自己好好看书吧!stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h也十分重要,差点忘了。这些是干啥用的呢?14STM32工程模版的建立搭建工程框架——文件夹及其文件

新建工程模版第一步:新建合适的文件夹并拷贝相应的固件库文件按照模块化思想,建立多干个文件夹,然后将固件库中必要的文件分别拷贝到各自的文件夹。例如,教材示例模板的框架如下:15STM32工程模版的建立搭建工程框架——文件夹及其文件

Libraries文件夹——固件库里的同名文件夹。这是STM32单片机及其外设的驱动程序(包括启动代码)。不能缺少。Output文件夹主要存储输出文件,例如,最后编译和链接生成的机器码文件(HEX文件),也包括其他文件的中间文件。可手工定期清理。Project文件夹主要存储开发者自己开发的相关程序文件,例如,工程文件,main.c,stm32f10x_conf.h,stm32f10x_it.c,stm32f10x_it.h?16STM32工程模版的建立新建工程——(空),通用

请你跟我一起做!——话说百遍,不如动手一遍►第1步——新建KEIL工程(在Project文件夹下)►第2步——为工程添加分组(Group)►第3步——为各组添加相关文件►第4步——对KEIL开发环境进行必要的设置►第5步——简单配置工程模版中的相关文件带电脑了吗?掌握了吗?再来一次17STM32工程模版的建立新关于建立模板的“四个提醒”

正确选择CPU型号正确选择Startcode启动代码文件正确选择实际晶振正确设置Define选项。例如,USE_STDPERIPH_DRIVER,STM32F10X_HD那么,建立模板,最核心、最本质的是什么?哪些文件是必须的?这些文件各自在哪个文件夹(即路径)?得告诉C/C++编译器18STM32程序的烧写两种烧写方式:串口下载、JTAG(SWD)下载——串口下载(ISP)STM32单片机的USART1与PC的串口正确连接通过ISP烧写软件将HEX文件下载至STM32芯片STM32全系均具有ISP能力下载前必须首先将BOOT1=0BOOT0=1然后上电复位,启动STM32芯片内的LOADERBOOTER程序进行串口在系统烧写(ISP)下载完成后必须将BOOT1=0、BOOT0=0使系统恢复从用户闪存(Flash)启动,这是正常的工作模式19STM32程序的烧写两种烧写方式:串口下载、JTAG(SWD)下载——串口下载(ISP)STM32单片机的USART1与PC的串口正确连接通过ISP烧写软件将HEX文件下载至STM32芯片STM32全系均具有ISP能力——只能使用USART1下载前必须首先将BOOT1=0BOOT0=1然后上电复位,启动STM32芯片内的LOADERBOOTER程序进行串口在系统烧写(ISP)下载完成后必须将BOOT1=0、BOOT0=0使系统恢复从用户闪存(Flash)启动,这是正常的工作模式20STM32程序的烧写——串口下载(ISP)►ST官方提供的ISP软件►第三方提供的ISP软件ST官方提供的ISP软件FlashLoaderDemonstrator软件ST官方网站下载并安装21STM32程序的烧写——串口下载(ISP)►ST官方提供的ISP软件►第三方提供的ISP软件第三方提供的ISP软件较多,例如:

STM32ISP软件V1.0网上可免费下载串口下载ISP的优点▬▬不需要增加硬件成本串口下载ISP的缺点▬▬只能烧程序,不能仿真22STM32程序的烧写——基于JTAG(SWD)的程序下载►基于JTAG软件►基于SWD为了高效、快捷地调试STM32单片机系统,通常必须使用【仿真器】J-Link,U-Link等均是很好的仿真器,而这些仿真器均提供JTAG接口(SWD接口)J-link作为一款调试ARMCPU的调试设备,典型型号:V8、V9JTAG和SWD的特点与区别到底在哪里呢?20与423STM32程序的烧写——基于JTAG(SWD)的程序下载►基于JTAG软件►基于SWD要使用J-Link仿真器——调试程序和下载程序必须正确安装驱动程序在KEILMDK等开发环境中,要使用程序下载功能,必须正确设置J-Link选项下载功能是通过KEIL里的Flash菜单项—Download加以实现的。24STM32程序的调试一个程序写好后,必须经过调试,才能确认程序的正确性。调试程序是应用系统开发中最为重要的一个环节之一在KEILMDK等开发环境下调试程序的几个条件:▃有J-Link仿真器,正确设置J-Link选项▃合适的KEIL-MDK版本,常见的如µVisionV4.73.0.0▃必要的测量工具:数字万用表,逻辑笔(测高低电平、脉冲)▃被调试的实验系统或开发板——对象重点学习两个问题——●J-Link仿真器的正确设置●利用仿真器进行调试的一般步骤和方法25STM32程序的调试重点学习两个问题——●J-Link仿真器的正确设置●利用仿真器进行调试的一般步骤和方法在工程的Target1上鼠标右键选中OptionsforTarget1出现如图2.41的设置界面点击右侧的Settings26STM32程序的调试●J-Link仿真器的正确设置——Settings1和2部分正确设置1是设置SWD方式的通信速度(与PC机)出现不稳定等情况,可适当调低。理论上可达10MJ-Link如果被正确安装,应该出现类似3的信息27STM32程序的调试重点学习两个问题——●J-Link仿真器的正确设置官方好好干●利用仿真器进行调试的一般步骤和方法点击Debug菜单项的Start/StopDebugSession激活Debug功能,进入调试状态。然后使用单步、断点等命令调试程序。StepOver、Step有啥不同什么时候用RuntoCursorLine什么是断点?如何用断点?如何退出调试状态单步或断点后,如何确定程序的错误???28工程模板的使用要使用工程模板开发一个新的项目,则只要把工程模板文件夹整体复制到新的新项目的文件夹下根据新项目的需要,调整以下相关文件:▃stm32f10x_conf.h——外设头文件配置▃stm32f10x_it.c——中断函数(如果涉及到中断程序,则编写有关

中断函数的具体代码存)▃stm32f10x_it.h——中断函数头文件▃system_stm32f10x.c——如果要调整系统时钟,则必须调整

该文件有关内容因为在stm32f10x.h中包含以下内容:#ifdefUSE_STDPERIPH_DRIVER#include"stm32f10x_conf.h"#endif这三个文件在建立模板时,已拷贝在Project文件夹29STM32的三种延时实现延时是单片机程序中常用的功能。在STM32应用系统中,要实现延时功能,通常采用三种方式。结合GPIO的输出应用范例程序,讨论三种方法:▃延时函数法——精度不高,实现方便▃SysTick定时器延时——精度高,不占用资源▃定时器中断延时——精度高,占用定时器资源重点学习两个问题——●延时的实现方法●GPIO的输出应用在这部分讨论中,重点讨论实现思想,具体程序请参阅教材一个LED闪烁,闪烁即一亮一灭,周期由延时实现30STM32的三种延时实现GPIO的输出应用——初始化、输出GPIO的初始化GPIO的高电平、低电平设置(输出)voidLED_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能时钟

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8; //选择对应的引脚GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化PC端口GPIO_SetBits(GPIOC,GPIO_Pin_8); //关闭LED}初始化三部曲——使能GPIO口时钟通过定义结构体变量设置对应的引脚的方式和速度初始化端口31STM32的三种延时实现GPIO的输出应用——初始化、输出GPIO的初始化GPIO的高电平、低电平设置(输出)GPIO_SetBits(GPIOC,GPIO_Pin_8);//设置该口为高电平,1delay_ms(1000); GPIO_ResetBits(GPIOC,GPIO_Pin_8);//清除该口,即低电平0delay_ms(1000);GPIO_SetBits库函数、GPIO_ResetBits库函数它们的用法掌握了?要设置某一个GPIO引脚为高电平、低电平,还有没有其他函数?32STM32的三种延时实现▃延时函数法——精度不高,实现方便▃SysTick定时器延时——精度高,不占用资源▃定时器中断延时——精度高,占用定时器资源//1ms延时函数(@72M)voiddelay_nms(u16time){u16i=0;while(time--){i=12000;//根据主频调整while(i--);}}//1us延时函数(@72M)voiddelay_us(u16time){

u16i=0;

while(time--)

{

i=10;

//根据主频调整

while(i--);

}}如果主频72M发生改变(不是72M),则必须调整i。此法有较大误差!33STM32的三种延时实现▃延时函数法——精度不高,实现方便▃SysTick定时器延时——精度高,不占用资源▃定时器中断延时——精度高,占用定时器资源CM3

内核的处理器,内部包含了一个SysTick

定时器。SysTick

是一个24

位的倒计数定时器,当计到0

时,将从RELOAD

寄存器中自动重装载定时初值。只要不把它在SysTick

控制及状态寄存器中的使能位清除,就永不停息。SysTick

在STM32

的参考手册里面介绍的很简单,其详细介绍,请参阅《Cortex-M3

权威指南》SysTick

定时器延时有两种方案——中断法——别的中断函数不便调用,不建议使用此法查询法(非中断法)——使用无限制,强烈√34STM32的三种延时实现SysTick定时器是如何工作的?SysTick定时器为递减计数器。设定初值并使能后,它以每个1系统时钟周期计数器减,计数到

0时,SysTick计数器自动重装初值并继续计数,同时可触发中断。那么每次计数器减到0,时间经过了多少时间呢?=系统时钟周期

*计数器初值。以使用72M作为系统时钟,那么每次计数器减1所用的时间是1/72M,计数器的初值如果是72000,那么每次计数器减到0,时间经过(1/72M)*72000=0.001,即1ms。(简单理解:用72M的时钟频率,即1s计数72M=72000000次,那1ms计数72000次,所以计数值为72000)

SysTick

定时器的时钟来源有两种情况可选——1)HCLK的8分频2)HCLK35STM32的三种延时实现SysTick定时器是如何工作的?SysTick定时器的初始化设置——选择时钟来源设定初值使能定时器

SysTick定时器的初始化设置涉及的寄存器——主要三个CTRL(控制寄存器)LOAD(初值寄存器)VAL(当前计数值)SysTick定时器的寄存器主要功能及其特性——

《Cortex-M3

权威指南》里面都有啦!36STM32的三种延时实现SysTick定时器是如何工作的?有例有真相,举例说明吧!/*微秒级精确延时函数*/voidDelay_us(uint32_tn)//延时多少微秒,n就输入多少!{SysTick->LOAD=72*n;//初值,因为时钟72M,72次即1μsSysTick->CTRL=0x00000005;//时钟来源设为为HCLK(72M),打开定时器while(!(SysTick->CTRL&0x00010000));//等待计数到0SysTick->CTRL=0x00000004;//关闭定时器

SysTick->VAL=0X00;//清空计数器,必须}CTRL寄存器——

第16位:计数到0则为1

第02位:时钟选择位,0=HCLK/8,1=HCLK

第00位:使能位,1为使能5=10137STM32的三种延时实现▃延时函数法——精度不高,实现方便▃SysTick定时器延时——精度高,不占用资源▃定时器中断延时——精度高,占用定时器资源如果你学过8位的51单片机,那么请你先想想采用定时器中断是如何实现延时的??38STM32的三种延时实现▃延时函数法——精度不高,实现方便▃SysTick定时器延时——精度高,不占用资源▃定时器中断延时——精度高,占用定时器资源STM32拥有众多功能强大、种类不同的定时器定时器的功能就是定时和计数,即定时器和计数器定时器中断延时——►实现原理——此法的本质及其实现要领►注意问题——重点和难点延时的本质就是定时由于定时器的内容比较复杂,所以专门有章节讨论它。作为本章的范例,重点是理解定时的实现方法。39STM32的三种延时实现定时器中断延时——实现原理时钟安全系统(CSS)

时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex-M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源。一旦CSS被激活,当HSE时钟出现故障时将产生CSS中断,同时自动产生NMI。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中,必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。

时钟安全系统(CSS)

的使能

RCC_ClockSecuritySystemCmd(ENABLE);正常情况下,范例中的上述语句可以删除不用。特此说明

!40STM32的三种延时实现定时器中断延时——实现原理程序实现要领

——选用合适的定时器——如果仅仅用于延时,选用基本定时器即可——使能相关外设的时钟——对定时器进行初始化——设置定时参数等——设置定时器中断——优先级、使能——设计定时器中断函数——启动定时器范例程序中对应的函数

——选用合适的定时器——TIM3——使能相关外设的时钟——RCC_Configuare()——对定时器进行初始化——TIM3_Configuare()(参数、允许中断等)——设置定时器中断——NVIC_Configuare()——设计定时器中断函数——TIM3_IRQHandler()(在stm32f10x_it.c)——启动定时器——TIM_Cmd(TIM3,ENABLE)41STM32的三种延时实现定时器中断延时——注意事项重点——定时器初始化设置——中断的设置难点——定时参数计算——中断的优先级(模式和等级)42STM32的GPIO输出模式STM32的最常用的外设模块是GPIO,它通常用于信号的输入输出。STM32的GPIO具有四种输入、四种输出模式。(1)GPIO_Mode_AIN

模拟输入

(2)GPIO_Mode_IN_FLOATING

浮空输入

(3)GPIO_Mode_IPD

下拉输入

(4)GPIO_Mode_IPU

上拉输入

(5)GPIO_Mode_Out_OD

开漏输出

(6)GPIO_Mode_Out_PP

推挽输出

(7)GPIO_Mode_AF_OD

复用开漏输出

(8)GPIO_Mode_AF_PP

复用推挽输出4种输出模式这2种输出模式同在用在II2总线、串行通信等43STM32的GPIO输出模式STM32的GPIO用于一般的输入输出——第一步:对GPIO进行初始化设置第二步:对GPIO进行写入、读取操作对GPIO进行初始化设置:设置什么、如何设置对GPIO进行写入操作:写入1、0(高、低电平),如何写入44STM32的GPIO输出模式STM32的GPIO初始化设置——结合例子voidLED_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能C口时钟

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;//选择对应的引脚

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;//速度为10MGPIO_Init(GPIOC,&GPIO_InitStructure);//初始化PC端口

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12; //引脚

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;//输出开漏方式

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;//速度为10MGPIO_Init(GPIOC,&GPIO_InitStructure);//初始化C端口

}速度是啥意思?45STM32的GPIO输出模式STM32的GPIO的速度设置——GPIO的引脚速度——I/O口驱

温馨提示

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

评论

0/150

提交评论