STM教程STMS定时器模块及其应用实例

合集下载

STM32通用定时器(TIM2-5)基本用法

STM32通用定时器(TIM2-5)基本用法
由上图可知,当 APB1 的预分频系数为 1 时,这个倍频器不起作用,定时器的时钟频率等 于 APB1 的频率;当 APB1 的预分频系数为其它数值(即预分频系数为 2、4、8 或 16)时, 这个倍频器起作用,定时器的时钟频率等于 APB1 的频率两倍。也就是,当 APB1 不分频, TIM3 的时钟速度为 36MHz,当 2 分频是,APB1 变成 18MHz,但是 TIM 又会倍频,即 TIM 时钟等于 18*2=36MHz。这里我们用向上计数的方式,即 TIMx_CNT 中的计数值达到 TIMx_ARR 中的值时,产生中断,TIMx_CNT 又从 0 开始计。 按以下步骤编程: 1.系统初始化,主要初始化时钟等。 2.GPIO 初始化,用于 LED,有了灯就便于观察了。 3.TIM3 的配置。 4.NVIC 的配置。 5.编写中断服务函数。
if(TIM_GetITStatus(TIM3 , TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update); if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8)) GPIO_ResetBits(GPIOA, GPIO_Pin_8); else GPIO_SetBits(GPIOA, GPIO_Pin_8); } } //注意使能定时器时钟
void TIMER3_Init() { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_DeInit(TIM3); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period=10000;//ARR 的值 TIM_TimeBaseStructure.TIM_Prescaler=7200-1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); TIM_Cmd(TIM3, ENABLE); //开启时钟 }

stm32f103 timer用法 -回复

stm32f103 timer用法 -回复

stm32f103 timer用法-回复什么是STM32F103 Timer?STM32F103 Timer是指STMicroelectronics公司生产的一款嵌入式微控制器系列中的定时器模块。

STM32F103是基于ARM Cortex-M3内核的微控制器系列,具有丰富的外设资源和较高的性能。

Timer是其中一个重要的外设模块,用于计时、延时和定时触发各种事件。

Timer的基本原理Timer的基本原理是利用一个计数器来记录时钟脉冲的数量或者时间间隔,当计数器达到设定的值时触发相应的事件。

Timer的工作原理可以概括为以下几个步骤:1. 配置计数器:首先需要设置计数器的初始值,并选择递增或递减的方向。

计数器可以是16位或者32位,具体由定时器模块的规格确定。

2. 配置预分频器:预分频器用于控制时钟输入的频率,通过将输入时钟分频,可以获得更低的计数速度。

预分频器的分频系数可以根据需要设置。

3. 配置计数模式:定时器可以工作在不同的计数模式下,包括单脉冲模式、连续模式、周期模式等。

根据具体需求选择适当的计数模式。

4. 配置定时器的中断和触发事件:可以设置计数器达到特定值时触发中断或者触发某个事件。

中断可以用于实现精确的定时功能,而事件触发可以用于控制其他外设的工作。

STM32F103 Timer的使用步骤下面将逐步介绍STM32F103 Timer的使用步骤:1. 引脚初始化:首先需要将Timer所需的引脚初始化为Timer模式。

这可以通过GPIO配置来实现。

2. Timer初始化:接下来需要对Timer进行初始化,包括设置计数器初始值、预分频系数、计数模式以及相关的中断和触发事件。

3. 中断配置:如果需要使用中断功能,可以设置中断优先级和中断响应函数。

中断优先级用于设置中断的优先级顺序,中断响应函数用于处理中断事件。

4. 启动Timer:启动Timer开始计时。

这可以通过设置控制寄存器来实现。

5. 中断处理:如果启用了中断功能,当计数器达到特定值时,中断会被触发。

STM系列微控制器的PWM输出和定时器配置方法

STM系列微控制器的PWM输出和定时器配置方法

STM系列微控制器的PWM输出和定时器配置方法在STM系列微控制器中,PWM输出和定时器配置方法对于实现精确控制和处理各种应用任务至关重要。

本文将探讨如何在STM微控制器中配置和利用PWM输出以及定时器功能来满足不同的需求。

一、PWM输出配置方法在STM系列微控制器中,配置PWM输出通常需要以下步骤:1. 初始化定时器:选择一个合适的定时器,设置其相关参数,例如时钟频率、预分频因子等。

2. 配置定时器的工作模式:选择合适的工作模式,如定时器模式、单脉冲模式、PWM模式等。

3. 配置定时器的输出模式:选择PWM输出模式,并设置相关参数,如占空比、周期等。

4. 配置GPIO引脚:将相关的GPIO引脚与定时器的输出通道连接起来,并配置为PWM输出功能。

通过以上步骤,可以实现对PWM输出的配置和控制。

具体的配置方法可以参考STM系列微控制器的产品手册和开发工具包提供的相关资料。

二、定时器配置方法定时器在STM系列微控制器中既可以用于计时,也可以用于生成各种定时事件。

下面介绍一种常用的定时器配置方法:1. 初始化定时器:选择一个合适的定时器,设置其相关参数,例如时钟频率、预分频因子等。

2. 配置定时器的工作模式:根据需求选择定时器的工作模式,如定时器模式、输入捕获模式、输出比较模式等。

3. 配置定时器的计数器周期:设置定时器的计数器周期,即计数器溢出前的计数值。

这个值可以根据实际需求来确定。

4. 配置定时器的中断:根据需求选择是否使能定时器的中断功能,并设置相关的中断优先级。

通过以上步骤,可以配置和控制定时器,实现各种定时任务的触发和处理。

具体的配置方法可以参考STM系列微控制器的产品手册和开发工具包提供的相关资料。

三、PWM输出和定时器配置的应用案例PWM输出和定时器功能在现实应用中有广泛的应用。

以下是一些常见的应用案例:1. 电机控制:通过配置PWM输出和定时器,可以实现对电机速度和方向的控制。

通过调整PWM占空比和周期,可以实现电机的不同转速和运动方向。

STM32的SYSTICK定时器(系统滴答定时器)

STM32的SYSTICK定时器(系统滴答定时器)

STM32的SYSTICK定时器(系统滴答定时器)什么是SysTick?这是⼀个24位的系统节拍定时器system tick timer,SysTick,具有⾃动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得⼀定的时间间隔。

SysTick作⽤在单任务引⽤程序中,因为其架构就决定了它执⾏任务的串⾏性,这就引出⼀个问题:当某个任务出现问题时,就会牵连到后续的任务,进⽽导致整个系统崩溃。

要解决这个问题,可以使⽤实时操作系统(RTOS).因为RTOS以并⾏的架构处理任务,单⼀任务的崩溃并不会牵连到整个系统。

这样⽤户出于可靠性的考虑可能就会基于RTOS来设计⾃⼰的应⽤程序。

SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供⼀个有节奏的“⼼跳”。

微控制器的定时器资源⼀般⽐较丰富,⽐如STM32存在8个定时器,为啥还要再提供⼀个SYSTICK?原因就是所有基于ARM Cortex_M3内核的控制器都带有SysTick定时器,这样就⽅便了程序在不同的器件之间的移植。

⽽使⽤RTOS的第⼀项⼯作往往就是将其移植到开发⼈员的硬件平台上,由于SYSTICK的存在⽆疑降低了移植的难度。

SysTick定时器除了能服务于操作系统之外,还能⽤于其它⽬的:如作为⼀个闹铃,⽤于测量时间等。

要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

SysTick时钟的选择SysTick寄存器说明在《Cortex-M3权威指南》(chap8.SysTick定时器章节)有说明⽤户可以在位于Cortex_M3处理器系统控制单元中的系统节拍定时器控制和状态寄存器(SysTick control and status register ,SCSR)选择systick 时钟源。

如将SCSR中的CLKSOURCE位置位,SysTick会在CPU频率下运⾏;⽽将CLKSOUCE位清除则SysTick会以CPU主频的1/8频率运⾏。

stm32定时器的使用流程

stm32定时器的使用流程

STM32定时器的使用流程1. 简介STM32定时器是STM32系列微控制器中重要的外设之一。

定时器可以用于生成特定的定时器事件,实现计时、测量时间间隔、产生PWM信号等功能。

本文将介绍STM32定时器的使用流程。

2. STM32定时器的基本工作原理STM32定时器通常由一个或多个计数器和若干个通道组成。

计数器用于计算时间的流逝,而通道用于控制输出。

计数器的计数范围和分辨率可以根据需求进行配置。

通常情况下,定时器通过外部时钟源进行计数,也可以使用内部时钟源。

3. STM32定时器的使用流程使用STM32定时器通常需要以下步骤:3.1 初始化定时器在使用定时器之前,需要初始化定时器的相关参数,包括计数器的计数范围、分频系数等。

通常可以通过寄存器的设置来完成初始化工作。

使用HAL库的话,可以使用HAL_TIM_Base_Init()函数进行初始化。

3.2 配置定时器的工作模式定时器可以根据需求配置为不同的工作模式,常见的模式包括单脉冲模式、连续模式、PWM输出模式等。

可以使用TIM_CR1、TIM_CR2等寄存器进行配置。

使用HAL库的话,可以使用相应的函数进行配置。

3.3 配置定时器的中断和DMA定时器可以配置中断和DMA功能,在特定的条件下触发相应的中断或DMA请求。

可以使用TIM_DIER寄存器进行配置。

使用HAL库的话,可以使用相应的函数进行配置。

3.4 启动定时器在配置完成后,需要启动定时器开始计数。

可以使用TIM_CR1寄存器进行配置。

使用HAL库的话,可以使用相应的函数进行配置。

3.5 处理定时器中断如果配置了定时器中断,当定时器达到设定的计数值时,会触发中断。

在中断服务函数中可以根据需求进行相应的处理。

3.6 设置定时器输出如果配置了定时器的通道输出模式,可以在定时器计数到一定值时,通过通道输出相应的信号。

可以使用TIM_CCR1、TIM_CCR2等寄存器进行配置。

3.7 停止定时器如果需要停止定时器的计数,可以使用TIM_CR1寄存器进行配置。

STM系列微控制器的低功耗特性与应用案例

STM系列微控制器的低功耗特性与应用案例

STM系列微控制器的低功耗特性与应用案例在当今高科技领域的发展中,微控制器作为电子产品的核心控制器件,扮演着至关重要的角色。

而在众多微控制器中,STMicroelectronics公司的STM系列以其卓越的低功耗特性和广泛的应用案例而备受推崇。

本文将重点介绍STM系列微控制器的低功耗特性,并探讨其应用案例。

一、STM系列微控制器的低功耗特性1.1 低功耗工作模式STM系列微控制器具有多种低功耗工作模式,能够根据不同的应用需求选择合适的模式。

其中,待机模式是最常用的一种低功耗模式,它可以在保持内部状态的同时极大地降低功耗。

此外,STM还提供了深度睡眠模式、停机模式等多种低功耗模式,进一步降低系统功耗。

1.2 功耗优化设计STM系列微控制器的芯片设计经过精心优化,充分考虑功耗问题。

采用先进的工艺制程和低功耗电路设计,有效减少了功耗。

同时,STM还提供了智能化的功耗管理功能,能够根据系统负载动态调整功耗,并通过软件、硬件相结合的方式实现功耗的优化。

1.3 低功耗时钟和定时器STM系列微控制器配备了低功耗时钟和定时器模块,能够在低功耗状态下保持准确的时钟和定时功能。

这对于需要低功耗计时或周期性唤醒的应用非常重要。

低功耗时钟和定时器模块的设计能够有效减少功耗,并且还能提供准确的时钟信号。

二、STM系列微控制器的应用案例2.1 无线传感器网络无线传感器网络是近年来兴起的一种重要应用,其涉及大量的低功耗设备。

STM系列微控制器在无线传感器网络中具有广泛的应用。

它的低功耗特性使得传感器节点能够在电池供电情况下长时间工作,实现低能耗、长寿命的传感器网络。

同时,STM系列微控制器的低功耗设计能够保持节点的灵活性和可扩展性,适应各种应用场景。

2.2 移动设备在移动设备领域,如智能手机、平板电脑等,低功耗是一个关键因素。

STM系列微控制器凭借其低功耗特性成功应用于移动设备中的控制模块。

通过微控制器的低功耗工作模式和功耗优化设计,移动设备实现了更长的电池续航时间,提供给用户更好的使用体验。

STM32通用定时器的基本特性、操作模式及相关应用介绍

STM32通用定时器的基本特性、操作模式及相关应用介绍

STM32 通用定时器的基本特性、操作模式及相关应
用介绍
众所周知,STM32 的定时器功能非常庞大复杂,应用也非常普遍。

目前STM32 家族已有10 条产品线,其中都内置多个定时器外设。

尽管STM32 各系列的定时器无论从数目上还是特性上可能略有差异,但它们整体上还是具有一些公共特性与相同的操作模式。

ST 官方有一篇针对STM32 通用定时器的应用笔记,编号为AN4776,内容较为详尽丰富。

该笔记主要对STM32 通用定时器的基本特性、操作模式及相关应用做了细致清晰的描述。

既有对基本概念的详细讲解,又有相关实际应用的原理介绍,同时还配有相关应用的参考工程代码。

该笔记值得一读。

这里简单介绍下AN4776 应用笔记的基本内容框架。

该笔记主要分两部分。

第一部分主要是对STM32 定时器的基本组成及特性的描述和讲解。

第二部分对STM32 定时器的一些特定应用做了专门描述,包括基本工作原理和相关应用代码的介绍。

STM32定时器详细讲解及应用

STM32定时器详细讲解及应用

TIM3->DIER|=1<<0; //允许更新中断 TIM3->DIER|=1<<6; //允许触发中断 TIM3->CR1|=0X01; //使能定时器 3(这里面包括计数方向为向上计数) } #if 0 void TIM4_Configuration(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* TIM4 clock enable */
/*使能预装载*/ TIM_ARRPreloadConfig(TIM4, ENABLE); /*预先清除所有中断位*/ TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
/* 允许 TIM2 开始计数 */ TIM_Cmd(TIM4, ENABLE); } #else void TIM_Configuration(u16 p,u16 psc) { RCC->APB1ENR|=1<<2;//TIM4 时钟使能 //自动装载寄存器 TIM4->ARR=p; //设定定时器自动重装值 //PSC 预分频寄存器 TIM4->PSC=psc; //设定定时器的分频系数 TIM4->DIER|=1<<0; //允许更新中断 TIM4->DIER|=1<<6; //允许触发中断 TIM4->CR1|=0X01; //使能定时器 3(这里面包括计数方向为向上计数)
***********
* Function Name : TIM2_IRQHandler TIM2 中断
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S T M教程S T M S定时器模块及其应用实例集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]第十三章 STM8S207 定时器模块及其应用实例这一节,我们将向大家介绍如何使用 STM8 的定时器中的基本定时功能,STM8 的定时器功能十分强大,有 TIM1 高级定时器,也有 TIM2、TIM3 等通用定时器,还有TIM4 基本定时器。

在 STM8S 参考手册里面,定时器的介绍占了 1/3 的篇幅,足见其重要性。

这一节,我们分别介绍 TIM1 到 TIM4 定时器中的基本定时功能。

例程一、16 位高级控制定时器(TIM1)简介:TIM1 由一个 16 位的自动装载计数器组成,它由一个可编程的预分频器驱动。

TIM1 有 4 个通道,分别是 1 到 4。

分别对应于四个不同的捕获/比较通道。

高级控制定时器适用于许多不同的用途:基本的定时测量输入信号的脉冲宽度(输入捕获)产生输出波形(输出比较,PWM 和单脉冲模式)对应与不同事件(捕获,比较,溢出,刹车,触发)的中断与 TIM5/TIM6 或者外部信号(外部时钟,复位信号,触发和使能信号)同步高级控制定时器广泛的适用于各种控制应用中,包括那些需要中间对齐模式PWM 的应用,该模式支持互补输出和死区时间控制。

高级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进行选择。

这一节我们实现的功能是基本的定时,关于 PWM 的编程留下以后的章节中。

还有建议大家研究更为深入的功能TIM1 的时基单元包括,如下图所示:● 16 位向上/向下计数器● 16 位自动重载寄存器●重复计数器●预分频器16 位计数器,预分频器,自动重载寄存器和重复计数器寄存器都可以通过软件进行读写操作。

自动重载寄存器由预装载寄存器和影子寄存器组成。

可在在两种模式下写自动重载寄存器:●自动预装载已使能(TIM1_CR1 寄存器的 ARPE 位置位)。

在此模式下,写入自动重载寄存器的数据将被保存在预装载寄存器中,并在下一个更新事件(UEV)时传送到影子寄存器。

●自动预装载已禁止(TIM1_CR1 寄存器的 ARPE 位清除)。

在此模式下,写入自动重载寄存器的数据将立即写入影子寄存器。

更新事件的产生条件:●计数器向上或向下溢出。

●软件置位了 TIM1_EGR 寄存器的 UG 位。

●时钟/触发控制器产生了触发事件。

在预装载使能时(ARPE=1),如果发生了更新事件,预装载寄存器中的数值(TIM1_ARR)将写入影子寄存器中,并且 TIM1_PSCR 寄存器中的值将写入预分频器中。

置位 TIM1_CR1 寄存器的 UDIS 位将禁止更新事件(UEV)。

计数器由预分频器的输出 CK_CNT 驱动,而 CK_CNT 仅在 IM1_CR1 寄存器的计数器使能位(CEN)被置位时才有效。

简要说明:CK_PSC 的时钟来源于 f_master,我们使用 16M 内部时钟源 HIS然后可以通过 PSCR 这个寄存器设置 CK_CNT,PSCR 是 2 个 8 位寄存器组成的16 位寄存器,可以在 0~65535 之间任务分频,分频后的频率提供给 CK_CNT 我们的实验为了方便计算,CK_CNT 为1K 的频率,所以PSCR = 16M/1K = 16000,换成 16 进制为 0x3E80我们使用了默认的向上溢出,所以为了 500ms 溢出中断一次,需要设置 ARPE这个定时器,而且设置为自动预装功能,这样就可以一直提供 2Hz 的频率中断最后允许中断和计数器使能就可以实现我们的功能有了以上的基础就可以进入到 TIM1 的基本定时器编程了,为了验证效果,我们采用了 LED0 作为判断依据。

在 TIM1 的溢出中断服务程序中闪耀 LED0程序代码如下:#include ""#define LED1_FLASH PD_ODR_ODR0 = !PD_ODR_ODR0void CLK_Init(void);void GPIO_Init(void);void TIM1_Init(void);void main( void ){CLK_Init();GPIO_Init();TIM1_Init();asm("rim");// 主循环里没有程序需要执行while(1);}void CLK_Init(void){CLK_CKDIVR = 0x00; // 16M内部RC直接输出}void GPIO_Init(void){PD_DDR = 0x01; // 配置PD端口的方向寄存器PD0输出PD_CR1 = 0x01; // 设置PD0为推挽输出PD_ODR = 0xFF;}void TIM1_Init(void){TIM1_PSCRH = 0x3E; // 16M系统时钟经预分频f=fck/(PSCR+1)TIM1_PSCRL = 0x7F; // PSCR=0x3E7F, f=16M/(0x3E7F+1)=1000Hz//每个计数周期1msTIM1_ARRH = 0x01; // 自动重载寄存器ARR=0x01F4=500TIM1_ARRL = 0xF4; // 每记数500次产生一次中断,即500msTIM1_IER = 0x01; // 允许更新中断TIM1_CR1 = 0x01; // 计数器使能,开始计数}#pragma vector=TIM1_OVR_UIF_vector //0x0D__interrupt void TIM1_OVR_UIF(void){LED1_FLASH;TIM1_SR1 = 0; //清除中断标记,这步不能漏掉,否则会连续进入中断程序}编译下载后就可以看到LED1一闪一闪的,闪耀的频率我们设置是2Hz,大家也可以设置不一样的定时时间,我们只是简单介绍如何使用TIM1的基本定时功能例程2、16位通用定时器TIM2、TIM3TIM2/TIM3的功能包括:● 16位向上计数和自动装载计数器● 4位可编程(可以实时修改的)预分频器,计数器时钟频率的分频系数为1~32768之间的2的幂● 3个独立通道:输入捕获输出比较PWM生成(边缘对齐模式)单脉冲模式输出●如下事件发生时产生中断:更新:计数器向上溢出,计数器初始化(通过软件)输入捕获输出比较和TIM1介绍一样,下面介绍时基单元时基单元包含:16位向上计数器预分频器16位自动装载寄存器没有重复寄存器。

计数器使用内部时钟(fMASTER),它由CK_PSC提供,并经过预分频器分频产生计数器时钟CK_CNT。

预分频器预分频器的实现:预分频器基于4位寄存器控制的16位计数器,由于寄存器带有缓冲器因此可以随时修改预分频的数值。

计数器可以取值为1到32768之间的2的幂进行分频。

计数器时钟频率的计算公式:fCK_CNT = fCK_PSC/2(PSCR[3:0])]预分频器的值由预装载寄存器写入。

一旦写入预装载寄存器的LS字节时,带有当前使用值的影子寄存器就被写入了新的值。

新的预分频值在下一个周期时生效(在下一个更新事件之后)。

对TIMx_PSCR寄存器的读操作通过预装载寄存器实现,因此可以随时读取不受限制。

TIM2、TIM3与TIM1不同之处是预分频器并非在0~65535之间的认为分频系数,而是1到32768之间2的幂进行分频。

关于TIM2和TIM3的预分频寄存器如下:这次实验是TIM2、TIM3同时工作,因为预分频系数不能随意设置,所以为了计算方便,我们设置为1024分频,也就是PSC = 0x0A,经过分频后的频率是,也就是因此500ms/ = 7813 转为16进制是1E84,所以1S的定时是3D08,有了这些参数就可以开始我们例程二的软件代码编写了#include ""#define LED1_FLASH PD_ODR_ODR0 = !PD_ODR_ODR0#define LED2_FLASH PD_ODR_ODR1 = !PD_ODR_ODR1#define LED3_FLASH PD_ODR_ODR2 = !PD_ODR_ODR2void CLK_Init(void);void GPIO_Init(void);void TIM1_Init(void);void TIM2_Init(void);void TIM3_Init(void);void main( void ){CLK_Init();GPIO_Init();TIM1_Init();TIM2_Init();TIM3_Init();asm("rim");// 主循环里没有程序需要执行while(1);}void CLK_Init(void){CLK_CKDIVR = 0x00; // 16M内部RC直接输出}void GPIO_Init(void){PD_DDR = 0x07; // 配置PD端口的方向寄存器PD0输出PD_CR1 = 0x07; // 设置PD0为推挽输出PD_ODR = 0xFF;}void TIM1_Init(void){TIM1_PSCRH = 0x3E; // 16M系统时钟经预分频f=fck/(PSCR+1)TIM1_PSCRL = 0x7F; // PSCR=0x3E7FTIM1_ARRH = 0x00; // 自动重载寄存器ARR=0x00FA=250TIM1_ARRL = 0xFA; // 每记数250次产生一次中断,即250msTIM1_IER = 0x01; // 允许更新中断TIM1_CR1 = 0x01; // 计数器使能,开始计数}void TIM2_Init(void){TIM2_PSCR = 0x0A; //16M系统时钟经预分频f=16M/1024=TIM2_ARRH = 0x1E; // * 7813 = 500msTIM2_ARRL = 0x84;TIM2_IER = 0x01; //运行更新中断TIM2_CR1 = 0x01; //使能计数器}void TIM3_Init(void){TIM3_PSCR = 0x0A; //16M系统时钟经预分频f=16M/1024=TIM3_ARRH = 0x3D; // * 15626 = 1sTIM3_ARRL = 0x08;TIM3_IER = 0x01; //允许更新中断TIM3_CR1 = 0x01; //使能计数器}#pragma vector=TIM1_OVR_UIF_vector //0x0D__interrupt void TIM1_OVR_UIF(void){LED1_FLASH;TIM1_SR1 = 0; //这步不能漏掉,否则会连续进入中断程序}#pragma vector=TIM2_OVR_UIF_vector //0x0F__interrupt void TIM2_OVR_UIF(void){LED2_FLASH;TIM2_SR1 = 0; //这步不能漏掉,否则会连续进入中断程序}#pragma vector=TIM3_OVR_UIF_vector //0x11__interrupt void TIM3_OVR_UIF(void){LED3_FLASH;TIM3_SR1 = 0; //这步不能漏掉,否则会连续进入中断程序}编译下载后就可以看到LED1、LED2、LED3在不停闪耀,而且是LED1闪耀两次LED2才闪耀一次,LED2闪耀两次LED3才闪耀一次。

相关文档
最新文档