嵌入式技术及应用(STM32CubeMX版)课件 任务7 制作简易秒表_第1页
嵌入式技术及应用(STM32CubeMX版)课件 任务7 制作简易秒表_第2页
嵌入式技术及应用(STM32CubeMX版)课件 任务7 制作简易秒表_第3页
嵌入式技术及应用(STM32CubeMX版)课件 任务7 制作简易秒表_第4页
嵌入式技术及应用(STM32CubeMX版)课件 任务7 制作简易秒表_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

任务7制作简易秒表任务要求STM32的TIM6作定时器使用,用来产生基准时间,PE0~PE7外接8只发光二极管LED1~LED8,发光二极管采用低电平有效控制。要求用TIM6和8只发光二极管制作一个简易秒表,用来显示开机时间。上电后系统从0秒开始计时,发光二极管二进制数的形式显示开机的秒数,其中,发光二极管点亮表示该位二进制数为1,例如当前秒数为5,则8只发光二极管的状态就为“灭灭灭灭灭亮灭亮”。知识储备

1.定时器的分类STM32共有8个定时器,依次为TIM1~TIM8。这8个定时器分基本定时器、通用定时器、高级定时器3类。类型定时器编号计数模式捕获/比较通道数挂载总线应用场景基本TIM6、TIM7向上0APB1定时、驱动DAC通用TIM2~TIM5向上向下向上/向下4APB1定时计数、PWM输出、输入捕获、输出比较高级TIM1、TIM8向上向下向上/向下4APB2定时计数、PWM输出、输入捕获、输出比较具有死区控制和紧急刹车功能,可用于PWM电机控制2.定时器的基本结构

在STM32中,8个定时器的最基本的功能是定时,它们的基本结构相同,如图所示。从图中可以看出,定时器的基本结构由计数器TIMx_CNT、预分频器、自动重装载寄存器TIMx_ARR和控制逻辑电路组成。定时器的基本结构2.定时器的基本结构

计数器TIMx_CNT是16位的寄存器,其主要功能是对输入脉冲进行计数,每输入一个脉冲计数值就加1或减1,STM32的计数器有3种计数模式,在不同模式下计数方式不同,并且计数值达到不同值时定时器会有不同的动作。定时器的基本结构2.定时器的基本结构

预分频器的功能是对输入脉冲进行分频,预分频器的分频系数取决于其内部的16位预分频寄存器TIMx_PSC的值。设输入预分频器的脉冲频率为fIN,输出频率为fOUT,预分频寄存器TIMx_PSC的值为PSC,则fIN与fOUT的关系为:fOUT=fIN/(PSC+1)定时器的基本结构2.定时器的基本结构

图中计数器输入脉冲的频率fCK_CNT与分频器输入脉冲的频率fCK_PSC的关系为:fCK_CNT=fCK_PSC/(PSC+1)自动重装载寄存器TIMx_ARR是16位的寄存器,其功能是保存计数器所能计数的最大值。定时器的基本结构3.计数模式

在STM32中,定时器有向上计数、向下计数、中央对齐3种计数模式。(1)向上计数模式向上计数模式的特点是,计数器从0开始计数,每输入1个脉冲,计数值就加1,当计数值达到自动重装载寄存器TIMx_ARR的值后,计数值回0,然后从0开始重新作加1计数,并产生一个计数溢出事件,每次溢出时可以产生更新事件。所有定时器都具备这种计数模式。3.计数模式

(2)向下计数模式向下计数模式的特点是,计数器从自动重装载寄存器TIMx_ARR的值开始计数,每输入一脉冲,计数值就减1,当计数值达到0后,计数值自动装入TIMx_ARR寄存器的值,然后从TIMx_ARR寄存器的值开始重新作减1计数,并产生一个计数向下溢出事件,每次计数溢出时可以产生更新事件。只通用型定时和高级定时器(TIM1~TIM5、TIM8)才有这种计数模式,基本型定时器(TIM6、TIM7)没有向下计数模式。3.计数模式

(3)中央对齐模式(向上/向下计数模式)中央对齐模式也叫向上/向下计数模式。其特点是,计数器从0开始作加1计数,当计数值达到自动加载的值(TIMx_ARR寄存器的值)−1,产生一个计数器溢出事件,然后向下作减1计数,计数值减1计数达到1时,再产生一个计数器下溢事件,然后再从0开始重新计数。计数器每次上溢和下溢时都可产生更新事件。只有通用型定时和高级定时器(TIM1~TIM5、TIM8)才有这种计数模式,基本型定时器(TIM6、TIM7)没有中央对齐计数模式。3.计数模式

(3)中央对齐模式(向上/向下计数模式)按照输出比较中断标志位置位的时刻来分,中央对齐方式又分为3种。第1种:中央对齐模式1(CenterAligned1),其特点是,计数器交替地向上和向下计数,输出比较中断标志位,只在计数器向下计数时置位。第2种:中央对齐模式2(CenterAligned2),其特点是,计数器交替地向上和向下计数,输出比较中断标志位,只在计数器向上计数时置位。第3种:中央对齐模式3(CenterAligned3),其特点是,计数器交替地向上和向下计数,输出比较中断标志位,在计数器向下和向上计数时均置位。4.定时时长的计算

设计数器输入脉冲的频率为f,TIMx_ARR寄存器的值为arr,计数器发生溢出时所定时的时长为t,此时计数器所计入的脉冲个数为arr+1,t=(arr+1)/f。若输入预分频器的脉冲(STM32CubeMX中称之为APBxTimerclocks)频率为fAPB,预分频寄存器TIMx_PSC的值为psc,则t=(psc+1)*(arr+1)/fAPB。5.HAL库中有关定时器的常用函数

(1)HAL_TIM_Base_Start_IT()函数原型HAL_StatusTypeDefHAL_TIM_Base_Start_IT(TIM_HandleTypeDef*htim);功能启动定时器并开启定时中断。参数htim:定时器的句柄。取值为htimx,x为定时器的编号,取值为1~8。返回值HAL状态,其值为枚举值,定义如下:typedefenum{HAL_OK=0x00U, //正常HAL_ERROR=0x01U, //出错HAL_BUSY=0x02U, //忙HAL_TIMEOUT=0x03U //超时}HAL_StatusTypeDef;函数的用法5.HAL库中有关定时器的常用函数

(1)HAL_TIM_Base_Start_IT()函数【举例】启动定时器TIM6并开启TIM6的定时中断的程序代码如下:HAL_TIM_Base_Start_IT(&htim6);【说明】在HAL库中,HAL_TIM_Base_Start()函数和HAL_TIM_Base_Start_DMA()函数也可以启动定时器,但HAL_TIM_Base_Start()函数只启动定时器,不开启定时中断,只能以查询方式检查定时时间是否到。HAL_TIM_Base_Start_DMA()函数的功能是,启动定时器同时启动DMA控制器。这2个函数的用法与HAL_TIM_Base_Start_IT()函数相似,它们的定义位于stm32f1xx_hal_tim.c文件中。5.HAL库中有关定时器的常用函数

(2)HAL_TIM_Base_Stop_IT()函数原型HAL_StatusTypeDefHAL_TIM_Base_Stop_IT(TIM_HandleTypeDef*htim);功能停止定时中断。参数htim:定时器的句柄。取值为htimx,x为定时器的编号,取值为1~8。返回值HAL状态,其值为枚举值。函数的用法【说明】在HAL库中还2个停止定时器的函数,它们分别是,HAL_TIM_Base_Stop()函数、HAL_TIM_Base_Stop_DMA()函数,它们的功能分别是查询方式停止定时器、DMA方式停止定时器,其用法与HAL_TIM_Base_Stop_IT()函数相似,它们的定义位于stm32f1xx_hal_tim.c文件中。5.HAL库中有关定时器的常用函数

(3)HAL_TIM_PeriodElapsedCallback()函数原型__weakvoidHAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef*htim);功能定时器溢出中断的回调函数。若使能了定时器的溢出中断,则当定时器发生溢出后就会执行此函数。参数htim:定时器的句柄。取值为htimx,x为定时器的编号,取值为1~8。返回值无。函数的用法5.HAL库中有关定时器的常用函数

在HAL中,该函数为弱函数,内部无操作,需用户重新定义。重定义的内容为定时时间到后STM32所要处理的工作,函数的框架结构如下:voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){ if(htim==&htimx) { /*定时时间到后CPU所要做的事情*/ }}(3)HAL_TIM_PeriodElapsedCallback()函数5.HAL库中有关定时器的常用函数

【举例】TIM6的定时时间到后需将PE7的状态取反,则用户重新定义的定时器回调函数如下:voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim){ if(htim==&htim6) { HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_7); }}实现方法与步骤任务7的硬件电路:

1.搭建电路2.生成定时器的初始化代码用TIM6产生1s的定时,生成定时器初始化代码的步骤如下:(1)启动STM32CubeMX,然后新建CubeMX工程、配置SYS、RCC,其中,Debug模式选择SerialWire,HSE选择外部晶振。(2)配置GPIO口。按照前面任务中介绍的方法将PE0~PE7配置成输出口,输出电平为高电平、模式为推挽输出、无上拉也无下拉、高速输出、无用户标签。

2.生成定时器的初始化代码(3)配置时钟。按照任务2中介绍的方法配置时钟,配置结果与任务2相同结果,如图所示。

时钟配置2.生成定时器的初始化代码(4)配置定时器TIM6第1步:计算预分频系数和计数值TIM6的时钟来源于APB1,由上图可知,APB1上的定时器的时钟频率为72MHz,所以,fclk=72MHz。设预分频系数为psc,计数值为arr,则定时时长t为:t=(psc+1)*(arr+1)/fclk本任务中,t=1s,fclk=72MHz,可取psc=9999,arr=7199。这2个参数需在后面的步骤中设置。2.生成定时器的初始化代码(4)配置定时器TIM6第2步:激活定时器TIM6单击“Pinout&Configuration”标签,然后在窗口左边的列表框中点击“Timers”->“TIM6”列表项,然后在中间窗口的Mode窗口中勾选“Activated”多选钮,如图所示。激活定时器TIM62.生成定时器的初始化代码(4)配置定时器TIM6第3步:设置TIM6的定时参数在中间窗口中点击“ParameterSettings”标签,再将Prescaler(预分频系数)的值设为9999,将CounterMode(计数模式)设置为UP(向上计数),将CounterPeriod(计数值)设为7199,将auto-reloadpreload(自动重装计数值)设为Enable,如图所示。激活定时器TIM62.生成定时器的初始化代码(4)配置定时器TIM6第4步:开启定时中断。在左边的窗口中点击“NVIC”列表项,再在中间窗口的“NVIC”选项卡中选择“TIM6globalinterrupt”列表项,然后勾选Enabled复选框,并将主优先级和子优先级均设为0,如图所示。使能TIM6中断并设置中断优先级2.生成定时器的初始化代码(5)配置工程按照任务2中介绍的方法配置STM32CubeMX工程,其中工程名为Task7,其他配置项与任务2中的配置相同。(6)保存工程,然后生成Keil工程代码。3.编写简易秒表程序在main.c文件中编写简易秒表程序。其编程思路是,用TIM6定时1s,用变量sec记录秒值,TIM6的1s定时时间到后就在其中断回调函数中将sec的值加1,然后在main()函数中不停地显示sec的值。由于变量sec在main()函数和定时中断回调函数中都要使用,sec变量应定义成全局变量。简易秒表的程序结构详见链接。

3.编写简易秒表程序

【说明】

程序中,第9行的htim6是用CubeMX生成Keil工程时系统自动定义的全局变量,如图所示。在main()函数的初始化部分,系统会调用MX_TIM6_Init()函数,将htim6设置成定时器TIM6。全局变量htim63.编写简易秒表程序

按照程序编写的规范要求将上述代码添加至main.c文件的对应位置处,就得到简易秒表程序。其实现步骤如下:第1步:打开main.c文件,并在用户变量区定义全局变量sec,即添加第2行代码,如图所示。定义全局变量3.编写简易秒表程序

第2步:在代码4区定义定时器回调函数和数据显示函数display(),即添加第16~36行代码,如图所示。定义用户函数3.编写简易秒表程序

第3步:在函数说明区中添加display()函数的原型说明代码,其方法是,将第32行代码复制到函数说明区中,并在代码尾加上分号“;”,即添加第4行代码,如图所示。函数原型说明3.编写简易秒表程序

第4步:在用户代码2区启动定时器TIM6并开启定时中断,即添加第9行代码。第5步:在while(1)区中添加显示秒值的程序代码,即添加第12行代码。启动定时器并开启定时中断显示秒值3.编写简易秒表程序

第6步:保存main.c文件。第7步:编译、调试程序直至程序正确无误,然后将程序下载至开发板中运行,我们可以看到8只发光二极管以二进制数的形式显示数据,其所显示的数据每隔1秒钟就自动加1,自动地显示开机时间。程序分析STM32F103xe的中断向量表的定义位于startup_stm32f103xe.s文件中,其中,TIM6的中断向量定义如图所示。定时中断的分析TIM6的中断向量定义定时中断的分析TIM6发生溢出中断后就会执行TIM6_IRQHandler(),用GoToDefinitionof命令可以查看到该函数的定义如图所示。TIM6_IRQHandler()函数的定义定时中断的分析

TIM6_IRQHandler()函数内只调用了HAL_TIM_IRQHandler()函数,再用GoToDefinitionof命令查看该函数的定义,其定义如图所示。HAL_TIM_IRQHandler()函数的定义定时中断的分析定时器发生溢出后

温馨提示

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

最新文档

评论

0/150

提交评论