版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验6——定时器卓越工程师培养系列本书获深圳大学教材出版资助STM32F1开发标准教程01实验内容实验内容功能包括:①将TIM2和TIM5均配置为每1ms进入一次中断服务函数;②在TIM2的中断服务函数中,2ms标志位置为1;③在TIM5的中断服务函数中1s标志位置为1;④在Main模块中基于2ms和1s标志分别创建2ms任务和1s任务;⑤在2ms任务中调用LED模块的LEDFlicker函数实现STM32核心板上LED1和LED2交替闪烁;⑥在1s任务中调用UART模块的printf,每秒输出一次ThisisthefirstSTM32F103Project,byZhangsan.基于STM32核心板设计一个定时器实验02实验原理1.通用定时器功能框图其次是通用定时器(TIM2~TIM5)最复杂的是高级定时器(TIM1和TIM8)。本书只使用通用定时器,因此,我们以通用定时器为例进行讲解,另外,本实验涉及定时器计数功能,后续章节将涉及输入捕获和PWM输出功能,所以,下面对这三个功能一并进行讲解。图7-1所示是通用定时器功能框图,下面依次介绍定时器时钟源、触发控制器、时基单元、输入通道、输入滤波器和边沿检测器、捕获通道、预分频器、捕获/比较寄存器、输出控制和输出引脚。STM32的基本定时器(TIM6和TIM7)的功能最简单1.通用定时器功能框图通用定时器的时钟源包括来自RCC的内部时钟(CKINT)外部输入脚TIX外部触发输入TIMxETR和内部触发输入ITRx。本书中的实验只用到了内部时钟CKINT,TIM2TIM7的时钟均由APB1时钟提供,而所有实验的APB1预分频器的分频系数为2,APB1钟频率为36MHz,因此,TIM2~TIM7时钟频率为72MHz。关于STM32的时钟系统将会在第9章深入讲解,这里,只要知道TIM2~TIM7时钟频率为72MH即可。1.定时器时钟源1.通用定时器功能框图触发控制器的基本功能包括复位和使能定时器,以及设置定时器的计数方式(递增)递减计数),此外,还可以通过触发控制器将通用定时器设置为其他定时器或DAC/ADC的触发源。2.触发控制器1.通用定时器功能框图时基单元对触发控制器输出的CK_PSC时钟进行预分频得到CK_CNT时钟,然后CNT计数器对经过分频之后的CK_CNT时钟进行计数,当CNT计数器的计数值与自动重装载寄存器的值相等时,产生事件。时基单元包括3个寄存器,分别是计数器寄存器(TIMX_CNT)预分频器寄存器(TIMx_PSC)和自动重装载寄存器(TIMXARR)。3.时基单元1.通用定时器功能框图TIMx_PSC有影子寄存器,向TIMx_PSC写入新值,定时器不会马上将该新值更新到影子寄存器,而是要等到更新事件产生时才会将该值更新到影子寄存器,这时候,分频后的CK_CNT时钟才会发生改变。TIMx_ARR也有影子寄存器,但是可以通过TIMx_CR1的ARPE将影子存器设置为有效或无效。如果ARPE设置为1,则影子寄存器有效,这种情况下,要等到更新事件产生时才把写入TIMx_ARR中的新值更新到影子寄存器如果ARPE设置为0则影子存器无效向TIMx_ARR写入新值之后,TIMx_ARR立即更新。3.时基单元1.通用定时器功能框图通过前面的分析可以得知定时器事件产生时间是由TIMX_PSC和TIMX_ARR两个寄存器决定的。计算分为两步:①根据ƒck_cnT=ƒcK_PSC/(TIMx_PSC+1)公式,计算CK_CNT时频率;②根据“定时器事件产生时间(1/ƒck_cnT)X(TIM_XARR+1)”公式,计算定时器事件产生时间。3.时基单元1.通用定时器功能框图通用定时器的输入通道有4个,分别是TI1、T2TI3和TI4。TI2、TI和TI4这3个通道分别对应于TIMx_CH2、TIMx_CH3和TIMx_CH4引脚,TI通道可以将TIMx_CH1引脚作为其信号源,也可以将TIMx_CH1、TIMX_CH2和TIM_CH3引脚的异或结果作为其信号源。定时器对这4个通道对应引脚输入信号的上升沿或下降沿进行捕获。4.输入通道1.通用定时器功能框图输入滤波器首先对输入信号TIx进行滤波处理,输入滤波器的参数由TIMX_CR1的CKDI1:01和TIMx_CCMRx的ICxF[3:0]决定。其中输入滤波器使用的采样频率ƒDTS可以与CK_INT时钟频率ƒCK_INT相等,也可以是ƒCK_INT的2分频或4分频,这个CKD[1:0]决定。边沿检测器实际上是一个事件计数器,该计数器对输入信号的边沿事件进行检测,当检测到N个事件后会产生一个输出的跳变,这个N由ICXFT[3:0]决定。边沿检测器对输入信号的上升沿还是下降沿进行捕获,由TIMx_CCER的CCxP决定,当CCxP为0时,捕获发生在TIx的上升沿,当CCxP为1时,捕获发生在TIx的下降沿。5.输入滤波器和边沿检测器1.通用定时器功能框图通用定时器有4个捕获通道,分别是IC1IC2IC3和IC4。捕获通道ICx用来捕获输入通道TIx通过输入滤波器和边沿检测器输出的信号TIXFPx或TRC每个捕获输入通道TIx经过输入滤波器和边沿检测器输出的信号TIXFPx可以同时为两个捕获通道的输入。每个捕获通道是选择TI1FP1、TI1FP2、TI2FP1、TI2FP2、TI3FP3、TI3FP4TI4FP3或TIFP4作为输入,还是选择TRC作为输入,由TIMxCCMRx的CCxST[1:0]决定。6.捕获通道1.通用定时器功能框图如果ICx直接输入捕获/比较寄存器(TIMx_CCRx)那就只能连续捕获每一个边沿而无法实现边沿的间隔捕获,比如每4个边沿捕获一次。ST公司在设计通用定时器和高级定时器时,增加了一个预分频器,ICx经过预分频器之后才会输入TIMx_CCRx,这样,就不仅可以实现边沿的连续捕获,还可以实现边沿的间隔捕获。多少个边沿捕获一次,由捕获/比较模式寄存器(TIMx_CCMRx)的ICxPSCT[1:0]决定,如果希望连续捕获每一个事件,将ICxPSC[1:0]配置为00即可,如果希望每4个事件触发一次捕获,将ICxPSC[1:0]配置为10即可。7.预分频器1.通用定时器功能框图捕获/比较寄存器(TIMx_CCRx)既是捕获输入的寄存器,又是比较输出的寄存器。TIMx_CCRx有预装载寄存器,可以通过TIMx_CCMRx的OCxPE决定开启或禁止TIMx_CCRx的预装载功能。将OCxPE设置为1,开启预装载寄存器,这种情况下,写该寄存器要等到更新事件产生时才将TIMxCCRx预装载寄存器的值传送至影子寄存器,读取该寄存器实际上是读取TIMx_CCRx预装载寄存器的值。将OCxPE设置为0禁止预装载寄存器,这种情况下,只有一个寄存器,不存在预装载寄存器和影子寄存器的概念,因此,读该寄存器实际上就是读取TIMX_CCRx中的值,写该寄存器实际上就是写TIMx_CCRx。8.捕获/比较寄存器1.通用定时器功能框图TIMx_CCER的CCxE决定禁止或使能输入捕获/输出比较功能。在CCx通道配置为输入的情况下,当CCxE为0时,禁止捕获,当CCxE为1时,使能捕获。在CCx通道配置为输出的情况下,当CCxE为0时,OCx禁止输出,当CCE为1时,OCx信号输出到对应的输出引脚。下面分别对输入捕获和输出比较的工作流程进行说明。1)输入捕获预分频器的输出是ICxPS,该信号作为捕获输入的输入信号,当第1次捕获到边沿事件时,计数器CNT的值会被锁存到TIMx_CCRx,同时,TIMxSR的中断标志CCxIF会被置为1,如果TIMx_DIER的CCxIE为1,则产生CCxI中断。CCxIF可以由软件清零也可以通过读取TIMx_CCRx清零。当第2次获到边沿事件(CCxIF依然为1)时TIMx_SR的重复捕获标志CCxOF会被置为1与CCxIF不同的是,CCxOF只能由软件清零。8.捕获/比较寄存器1.通用定时器功能框图2)输出比较输出比较有8种模式,分别是冻结、匹配时设置输出为有效电平、匹配时设置输出为无效电平、翻转、强制为无效电平、强制为有效电平PWM模式1和PWM模式2,通过TIMx_CCMR1的OCxM选择输出比较模式,可参见图14-5和表14-1。第14章是PWM输出实验,因此,这里只介绍PWM模式1和PWM模式2。当输出比较配置为PWM模式1,在向上计数时,一旦TIMX_CNT<TIMX_CCRx时输出的参考信号OCxREF为有效电平,否则为无效电平;在向下计数时,一旦TIMCNT>TIMx_CCRx时输出的参考信号OCxREF为无效电平,否则为有效电平。当输出比较配置为PWM模式2,在向上计数时一旦TIMx_CNT<TIMxCCRx时输出的参考信号0CxREF为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMxCCRx时输出的参考信号OCxREF为有效电平,否则为无效电平。当TIMx_CCER的CCxP为0时,OCxREF高电平有效,当CCxP为1时,OCxREF低电平有效。8.捕获/比较寄存器1.通用定时器功能框图参考信号OCxREF经过输出控制之后会产生OCx信号,该信号最终通过通用定时器的外部引脚输出,外部引脚包括TIMx_CH1、TIMx_CH2、TIMxCH3和TIMxCH4。9.输出控制和输出引脚2.通用定时器部分寄存器TIMx_CR1的结构偏移地址和复位值如图7-2所示,对部分位的解释说明如表7-1所示。1.控制寄存器1(TIMx_CR1)2.通用定时器部分寄存器TIMx_CR2的结构、偏移地址和复位值如图7-3所,对部分位的解释说明如表7-2所示。2.控制寄存器2(TIMx_CR2)2.通用定时器部分寄存器TIMx_DIER的结构偏移地址和复位值如图7-4所示对部分位的解释说明如表7-3所示。3.DMA/中断使能寄存器(TIMx_DIER)2.通用定时器部分寄存器TIMx_SR的结构偏移地址和复位值如图7-所对部分位的解释说明如表7-4所示。4.状态寄存器(TIMx_SR)2.通用定时器部分寄存器TIMx_EGR的结构、偏移地址和复位值如图7-6所示,对部分位的解释说明如表7-5所示。5.事件产生寄存器(TIMx_EGR)2.通用定时器部分寄存器TIMX_CNT的结构偏移地址和复位值如图7-7所示对部分位的解释说明如表7-6所示。6计数器(TIMx_CNT)2.通用定时器部分寄存器TIMx_PSC的结构偏移地址和复位值如图7-8所示,对部分位的解释说明如表7-7所示。7.预分频器(TIMx_PSC)2.通用定时器部分寄存器TIMx_ARR的结构偏移地址和复位值如图7-9所示,对部分位的解释说明如表7-8所示。8自动重装载寄存器(TIMX_ARR)3.通用定时器部分固件库函数TIM_TimeBaseInit函数的功能是根据结构体TIM_TimeBaseInitStruct的值配置通用定时器,通过向TIMx→CR1、TIMx→ARR、TIMx→PSC和TIMx→EGR写入参数来实现。具描述如表7-9所示。1.TIM_TimeBaselnit3.通用定时器部分固件库函数TIM_Cmd函数的功能是使能或除能某一定时器,通过向TIMx→CR1写入参数来实现具体描述如表7-10所示。2.TIM_Cmd3.通用定时器部分固件库函数TIM_ITConfig函数的功能是开启或关闭定时器中断通过向TIMx→DIER写入参数来实现。具体描述如表7-11所示。3.TIM_ITConfig3.通用定时器部分固件库函数TIM_ClearITPendingBit函数的功能是清除定时器中断待处理位,当检测到中断时该位会由硬件置为1,完成中断任务之后由软件将该位清零,通过向TIMx→SR写入参数来实现。具体描述如表7-12所示。4.TIM_ClearlTPendingBit3.通用定时器部分固件库函数TIM_GetITStatus函数的功能是检查中断是否发生,通过读取TIMx→SR和TIMX→DIER来实现。具体描述如表7-13所示。5.TIM_GetITStatus3.通用定时器部分固件库函数TIM_SelectOutputTrigger函的功能是选择TIMx触发输出模式通过向TIMx→CR2写入参数来实现。具体描述如表7-14所示。6.TIM_SelectOutputTrigger3.通用定时器部分固件库函数参数TIM_SelectOutputTrigger用于选择TIM触发输出源,可取值如表7-15所示。6.TIM_SelectOutputTrigger4.RCC部分寄存器本实验涉及的RCC寄存器只有APB1外设时钟使能寄存器(RCC_APB1ENR),RCC_APB1ENR的结构、偏移地址和复位值如图7-10所示,对部分位的解释说明如表7-16所示。5.RCC部分固件库函数本实验涉及的RCC固件库函数只有RCC_APB1PeriphClockCmd,该函数的功能是打开或关闭APB1上相应外设的时钟,通过向RCC→APB1ENR写入参数来实现。具体描述如表7-17所示。03实验步骤步骤1:首先,将“D:STM32KeilTestMaterial06定时器实验”文件夹复制到“D:STM32KeilTestProduct”文件夹中。然后,双击运行“D:STM32KeilTestiProductl06.定时器实验Proiect”文件夹中的STM32KeilPrjuvproix,单击工具栏中的留按钮,当BuildOutput栏出现FromELFcreatinghexfile..表示已经成功生成hex文件,出现0Error(s)0Warning(s)表示编译成功。由于本实验实现的是定时器功能,因此,Material提供的“06定时器实验”工程中Timer模块中的Timer文件对是空白的,而Mainc文件的Proc2msTask和ProcSecTask函数均依赖于Timer模块,因此,也就无法通过计算机上的串口助手软件查看串口输出的信息,STM32核心板上的两个LED也无法正常闪烁。不过,只要编译成功,接着就可以进入下一步操作。复制并编译原始工程步骤2:首先,将“D:STM32KeilTest\Producti06定时器实验HWTimer”文件夹中的Timer.c添加到HW分组,具体操作可参见2.3节步8。然后,将“D:STM32KeilTestProduct06定时器实验HWTimer”路径添加到IncludePaths栏,具体操作可参见23节步骤11。添加Timer文件对步骤3:单击
按钮进行编译编译结束后,在Project面板中双击Timerc下的Timerh。在Timerh文件的“包含头文件”区,添加代码#include"DataType.h"。在Timerh文件的“API函数声明”区添加如程序清单7-1所示的API函数声明代码InitTimer函数主要是初始化Timer模块;Get2msFlag和C2msFlag函数的功能是获取和清除2ms标志,Mainc中的Proc2msTask就是调用这两个函数,实现2ms任务功能;Get1SecFlag和CIr1SecFlag函数的功能是获取和清除1s标志,Mainc中的Proc1SecTask就是调用这两个函数,实现1s任务功能。完善Timer.h文件步骤4:在Timerc文件的“包含头文件”区的最后,添加代码#include"stm32f10x_confh"。在Timer.c文件的“内部变量”区,添加内部变量的定义代码,如程序清单7-2所示。s_i2msFlag是2ms标志位,s_ilseFlag是1s标位,这两个变量在定义时还要初始化为FALSE。完善Timerc文件步骤4:在Timerc文件的“内部函数声明”区,添加内部函数的声明代码,如程序清单7-3所示。ConfigTimer2函数用于配置TIM2,ConfigTimer5函数用于配置TIM5。完善Timerc文件步骤4:在Timerc文件的“内部函数实现”区,添加CongTimer2和ConfigTimer5函数的实现代码,如程序清单7-4所示。由于这两个函数的功能类似,下面按照顺序仅对CongTimer2函数中的语句进行解释说明。(1)在使用TIM2之前,需要通过RCC_APB1PeriphClockCmd函数使能TIM2的时钟。(2)通过TIM_TimeBaseInit函数对TIM2进行配置,该函数涉及TIM2_CR1的DIRCMS[1:0]、CKD[1:0],TIM2_ARR,TIM2_PSC,以及TIM2_EGR的UG。DIR用于设置计数器计数方向,CMS[1:0]用于选择中央对齐模式,CKD[1:0]用于设置时钟分频系数,可参见图7-2和表7-1,本实验中,TIM2设置为边沿对齐模式,计数器递增计数。TIM2_ARR和TIM2_PSC用于设置计数器的自动重装载值和预分频器的值,可参见图7-8和图7-9,以及表7-7和表7-8,本实验中,这两个值通过CongTimer2函数的参数a和psc来决定。UG用于产生更新事件,可参见图7-6和表7-5,本实验中将该值设置为1,用于重新初始化计数器,并产生一个更新事件。完善Timerc文件步骤4:(3)通过TIM_ITConfig函数使能TIM2的更新中断,该函数涉及TIM2_DIER的UIEUIE用于禁止和允许更新中断,可参见图7-4和表7-3。(4)通过NVIC_Imit函数使能TIM2的中断,同时设置抢占优先级为0,子优先级为3。(5)通过TIM_Cmd函数使能TIM2,该函数涉及TIM2_CR1的CEN,可参见图7-2和表7-1。完善Timerc文件步骤4:完善Timerc文件步骤4:在Timerc文件的“内部函数实现”区,在ConfigTimer5函数实现区的后面添加TIM2_IRQHandler和TIM5_IQHandler中断服务函数的实现代码,如程序清单7-5所示。由于这两个中断服务函数的功能类似,下面按照顺序仅对TIM2IRQHandler函数中的语句进行解释说明。(1)Timerc的CongTimer2函数中使能了TIM2的更新中断,因此当TIM2递增计数产生溢出时,会执行TIM2_IRQHandler函数。完善Timerc文件步骤4:(2)通过TIM_GetITStatus函数获取TIM2更新中断标志,该函数涉及TIM2_DIER的UIE和TIM2_SR的UIF,可参见图7-4、图7-5、表7-3和表7-4。本实验中,UIE为1,表示使能更新中断,当TIM2递增计数产生溢出时,UIF由硬件置为1并产生更新中断,执行TIM2IRQHandler函数。因此,在TIM2_IRQHandler函数中还需要通过TIM_CIearITPendingBi函数将UIF清零。(3)变量s_i2msFlag是2ms标志位,然而,TIM2_IRQHandler函数是1ms执行一次,因此,还需要一个计数器(s_iCnt2),TIM2_IRQHandler函数执行一次,s_iCnt2就执行一次加1操作,当s_iCnt2等于2时,将s_i2msFlag置为1,并将s_iCnt2清零。完善Timerc文件步骤5:在Project面板中,双击打开Mainc文件,在Main.c文件的“包含头文件”区的最后,添加代码#include"Timerh"。这样就可以在Maic文件中调用Timer模块的API函数等,实现对Timer模块的操作。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 送料装置耐用设计课程设计
- 教师副高资格考试试题及答案大全
- 教育行为分析优化方案课程设计
- 彩色气球课程设计
- AI换脸视频制作实战课程设计
- PCA降维技术可视化教程课程设计
- 深度强化学习游戏AIAtari前沿技术课程设计
- AI换脸入门教程课程设计
- 边缘计算高速安全传输设计课程设计
- 基于模拟退火的车间调度优化算法课程设计
- 紫金矿业员工工作手册
- 侵入式脑机接口技术
- 单元机组协调控制课件
- 三视图三视图
- GB/T 16622-2022压配式实心轮胎规格、尺寸与负荷
- SB/T 10743-2012焊接式散装水泥钢板筒仓
- 伦理学马工程课件 06第六章 道德规范
- 肾上腺疾病外科治疗
- 凝聚态物理专题课件
- 检验检测机构内审检查表
- 部编版三年级上册道德与法治-全册教案
评论
0/150
提交评论