版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目五定时器应用设计与实现任务10基于SysTick定时器的1秒延时设计与实现在STM32中有很多定时器,可以分成两大类内核中的SysTick(系统滴答)定时器STM32的常规定时器高级控制定时器(TIM1和TIM8);通用定时器(TIMx:TIM2-TIM5);基本定时器(TIM6和TIM7)。SysTick定时器认识SysTick定时器SysTick定时器又称为系统滴答定时器,这是一个24位的系统节拍定时器,具有自动重载和溢出中断功能,所有基于Cortex_M3的芯片都可以由这个定时器获得一定的时间间隔。SysTick定时器位于Cortex-M3内核的内部,是一个倒计数定时器,当计数到0时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就会永远工作。SysTick定时器STM32有8个定时器,为什么还要再提供一个SysTick定时器呢?由于所有基于Cortex_M3内核的控制器,都带有SysTick定时器,使用SysTick定时器编写的代码,在移植到同样使用Cortex-M3核的不同器件时,代码都不需要进行修改。为此,可以利用STM32的内部SysTick来实现延时的,这样既不占用中断,也不占用系统定时器。SysTick定时器除了能服务于操作系统之外,还能用于其他目的:如作为一个闹铃,用于测量时间等。SysTick定时器SysTick定时器时钟选择用户可以通过SysTick控制及状态寄存器,来选择SysTick定时器的时钟源。将SysTick控制及状态寄存器中的CLKSOURCE位置1,SysTick定时器就会在内核时钟(PCLK)频率下运行;将CLKSOUCE位清零,SysTick定时器就会以外部时钟源(STCLK)频率运行。SysTick定时器库函数中的SysTick相关函数SysTick_Config()函数SysTick_Config(uint32_tticks)函数是在core_cm3.h头文件中,该函数的主要作用是:初始化SysTick;打开SysTick;打开SysTick的中断并设置优先级;返回一个0代表成功或1代表失败。uint32_tticks是重装值,默认使用的时钟源是AHB(不分频)。若要分频,就需要调用voidSysTick_CLKSourceConfig()函数。在函数调用时,需要注意函数调用的次序。SysTick定时器库函数中的SysTick相关函数SysTick_CLKSourceConfig()函数SysTick_CLKSourceConfig(uint32_tSysTick_CLKSource)函数是在misc.c文件中,该函数的主要作用是选择SysTick定时器时钟的。SysTick的关键函数编写延时初始化函数:delay_init()微秒级延时函数:delay_us(u32nus)毫秒级延时函数:delay_ms(u16nms)SysTick中断服务函数:SysTick_Handler(void)基于SysTick定时器的1秒延时设计与实现利用SysTick定时器,来控制4个LED循环点亮,点亮时间是1秒钟。intmain(void){ delay_init(); //延时函数初始化
LED_Init(); //LED端口初始化 while(1) { temp=0x0100; for(i=0;i<4;i++) { GPIO_Write(GPIOD,temp); delay_ms(1000); temp=temp<<1; } }}基于SysTick定时器的1秒延时代码,见源程序任务11STM32定时器的定时设计与实现认识STM32定时器有高级控制定时器(TIM1和TIM8)、通用定时器(TIMx:TIM2-TIM5)和基本定时器(TIM6和TIM7)三种。是由一个通过可编程预分频器(PSC)驱动的、一个16位的自动装载计数器(CNT)组成。计数器模式有向上计数、向下计数或者向上向下双向计数。STM32定时器高级控制定时器TIM1和TIM8是可编程高级控制定时器,主要部分是一个16位计数器和与其相关的自动装载寄存器。计数器可以向上计数、向下计数或者向上向下双向计数;计数器时钟由预分频器分频得到。
计数器、自动装载寄存器和预分频器寄存器可以由软件读写,时基单元包含:计数器寄存器(TIMx_CNT)预分频器寄存器(TIMx_PSC)自动装载寄存器(TIMx_ARR)重复次数寄存器(TIMx_RCR)STM32定时器通用定时器通用定时器(TIMx:TIM2~TIM5)是一个通过可编程预分频器驱动的16位自动装载计数器构成。适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。每个定时器都是完全独立的,没有互相共享任何资源。STM3的通用TIMx(TIM2、TIM3、TIM4和TIM5)定时器主要功能见项目五PDF。基本定时器基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。STM32定时器相关的库函数如何通过库函数来实现定时器的定时任务呢?定时器相关的库函数主要集中在固件库文件stm32f10x_tim.h和stm32f10x_tim.c文件中。TIM_TimeBaseInit()函数初始化定时器自动重装值、分频系数、计数方式等参数,是通过初始化函数TIM_TimeBaseInit()实现的。
TIM_ITConfig()函数定时器中断使能是通过TIM_ITConfig()函数来实现的,既TIM_ITConfig()函数是用来设置TIMx_DIER允许更新中断。若使能TIM3的更新中断,代码如下:TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);STM32定时器相关的库函数定时器相关的库函数TIM_Cmd()函数开启定时器是通过TIM_Cmd()函数来实现的,既使用TIM_Cmd()函数设置TIM3_CR1的CEN位开启定时器。若开启TIM3,代码如下:TIM_Cmd(TIM3,ENABLE);//使能TIMx外设定时器中断服务函数是处理定时器产生的相关中断,编写定时器中断服务函数步骤如下:在中断产生后,通过状态寄存器SR的值来判断此次产生的中断属于什么类型;然后执行相关的操作,在这里使用的是更新(溢出)中断,所以在状态寄存器SR的最低位;在处理完中断之后应该向TIMx_SR的最低位写0,来清除该中断标志。STM32定时器的初始化步骤在学习完STM32的TIMx定时器相关寄存器和库函数后,如何对STM32的TIMx定时器进行初始化呢?其初始化步骤如下:时钟使能;配置预分频、自动重装值和重复计数值;清除中断标志位(否则会先进一次中断);使能TIM中断,选择中断源;设置中断优先级;使能TIMx外设。STM32定时器的定时设计学习完STM32的TIMx定时器相关寄存器和库函数后,如何对STM32的TIMx定时器进行初始化呢?初始化步骤如下:时钟使能;配置预分频、自动重装值和重复计数值;清除中断标志位(否则会先进一次中断);使能TIM中断,选择中断源;设置中断优先级;使能TIMx外设。STM32定时器的定时代码,见源程序任务12PWM输出控制电机任务要求利用TIM1的通道3(PE13)产生PWM,TIM1的通道1N(PE8)产生PWM,来控制电机的速度,实现电机慢->快->慢->快的循环变化。脉冲宽度调制(PWM)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。STM32的PWM输出相关寄存器本任务是利用TIM1的CH1和CH3产生二路PWM输出,通过软件配置相应寄存器,重新映射到PE8和PE13引脚上。在此要用到复用重映射和调试I/O配置寄存器(AFIO_MAPR)、捕获/比较模式寄存器(TIM1_CCMR1/2)、捕获/比较使能寄存器(TIM1_CCER)、捕获/比较寄存器(TIM1_CCR1~4)。复用重映射和调试I/O配置寄存器AFIO_MAPR把TIM1的CH1和CH3产生的二路PWM输出(复用功能)重新映射到PE8和PE13引脚上,设置代码如下:AFIO->MAPR&=0XFFFFFF3F; //清除MAPR的[7:6]AFIO->MAPR|=1<<7; //完全重映像,TIM1_CH1N->PE8AFIO->MAPR|=1<<6; //完全重映像,TIM1_CH3->PE13STM32的PWM输出相关寄存器捕获/比较模式寄存器TIMx_CCMR1该寄存器总共有2个,TIMx_CCMR1和TIMx_CCMR2。如:TIM1_CCMR1控制CH1/CH1N和CH2,TIM1_CCMR2控制CH3和CH4。模式设置位OCxM,由3位组成,总共可以配置成7种模式。如:模式设置位OCxM设置为110,既为PWM模式1,代码如下:TIM1->CCMR1|=6<<4;
//OC1M设置为110,CH1为PWM1模式TIM1->CCMR2|=6<<4;
//OC3M设置为110,CH3为PWM1模式又如:模式设置位OCxM设置为111,既为PWM模式2,代码如下:TIM1->CCMR1|=7<<4; //OC1M设置为111,CH1为PWM2模式TIM1->CCMR2|=7<<4; //OC3M设置为111,CH3为PWM2模式注意:在使用PWM模式时,模式设置位OCxM必须设置为110/111,这两种PWM模式的区别就是输出电平的极性相反。STM32的PWM输出相关寄存器捕获/比较模式寄存器TIMx_CCMR1预装载使能位OCxPE预装载使能位OCxPE设置为0禁止TIMx_CCR1寄存器的预装载功能,可随时写入TIMx_CCR1寄存器,并且新写入的数值立即起作用。预装载使能位OCxPE设置为1开启TIMx_CCR1寄存器的预装载功能,读写操作仅对预装载寄存器操作,TIMx_CCR1的预装载值在更新事件到来时被传送至当前寄存器中。例如:TIM1->CCMR1|=1<<3; //CH1预装载使能TIM1->CCMR2|=1<<3;
//CH3预装载使能STM32的PWM输出相关寄存器捕获/比较寄存器TIMx_CCR1~4该寄存器总共有4个,分别对应4个输通道CH1~4。捕获/比较使能寄存器TIMx_CCER该寄存器控制着各个输入输出通道的开关,例如:TIM1->CCER|=3<<8; //OC3输出使能TIM1->CCER|=3<<2; //OC1N输出使能其他相关寄存器事件产生寄存器(TIMx_EGR)TIM1->EGR|=1<<0;
//初始化所有的寄存器刹车和死区寄存器TIMx_BDTRTIM1->BDTR|=1<<15; //开启OC和OCN输出STM32的PWM输出编程思路PWM模式实现脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。在TIMx_CCMRx寄存器中的OCxM位写入“110”(PWM模式1))或“111”(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM;必须通过设置TIMx_CCMRx寄存器的OCxPE位使能相应的预装载寄存器;最后还要设置TIMx_CR1寄存器的ARPE位,(在向上计数或中心对称模式中)使能自动重装载的预装载寄存器;STM32的PWM输出编程思路PWM模式实现在计数器开始计数之前,必须通过设置TIMx_EGR寄存器中的UG位来初始化所有的寄存器;
OCx的极性通过软件在TIMx_CCER寄存器中的CCxP位设置,可设置为高电平有效或低电平有效。OCx的输出使能通过CCxE、CCxNE、MOE、OSSI和OSSR位的组合控制;在PWM模式下,TIMx_CNT和TIMx_CCRx始终在进行比较。以计数方向,确定是否TIMx_CCRx<TIMx_CNT或TIMx_CNT<TIMx_CCRx;根据TIMx_CR1寄存器中CMS位的状态,定时器能够产生边沿对齐的PWM信号或中央对齐的PWM信号。STM32的PWM输出编程思路STM32的PWM输出编程步骤通过以下步骤,可以控制TIM1_CH1N和TIM1_CH3的PWM输出:
开启TIM1和PORTE时钟,配置PE8、PE13为复用输出;设置AFIO_MAPR,把TIM1的二路PWM输出重新映射到PE8和PE13引脚上;设置TIM1的ARR和PSC,控制输出PWM的周期;设置TIM1_CH1N和TIM1_CH3的PWM模式;使能TIM1的CH1和CH3输出,使能TIM1;初始化所有的寄存器;修改TIM3_CCR2来控制占空比。STM32的PWM输出相关库函数PWM相关的函数设置,是在库函数文件stm32f10x_tim.h和stm32f10x_tim.c文件中。开启TIM1时钟以及复用功能时钟,配置PE8和PE13为复用输出。使用GPIO_PinRemapConfig()函数,设置TIM1_CH1N和TIM1_CH3重映射到PE8和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南省2026年初中物理学业水平性考试附答案
- 沪科版九年级全册物理第十五章 第四节 测量:用电压表测电压 同步精讲精炼学案
- 环境管理体系审核员职业技能鉴定考试复习题库(附答案)
- 审计所长面试题(某世界500强集团)题库解析
- 2026年尿素生产工专项题库(附答案与解释)
- 统编版语文六年级上册期中高频考点检测卷(含答案)
- 教师资格考试高级中学化学学科知识与教学能力复习策略解析(2026年)
- 应用文写作 巧用 AI共筑学术成长 英文戏剧赏析论文写作之思 讲义
- 【整合突破专题学案】目录(高三地理自主复习资料)
- 节日促销活动策划合同
- 2026-2030国内铁路电气设备行业市场发展分析及竞争格局与投资机会研究报告
- 2026-2030中国建筑信息模型(BIM)行业发展状况与前景趋势研究报告
- 2026年学校会计高频面试题包含详细解答
- 2026年秋人教部编版三年级语文上册教案全册
- 仓库货物收发验收管理规范
- 后勤管理工作不足对照检查材料范文
- 多病共存患者安全管理
- (2026年)检验检测机构资质认定“一单一库”的学习与解读(2026年实施)课件
- 外委施工公司级安全培训课件
- 24J113-1 内隔墙-轻质条板(一)
- 高二上学期期末英语考前指导课件
评论
0/150
提交评论