4、定时器中断实验

1、思路:通过设定定时器3的溢出中断,实现对LED灯的闪烁控制。

2、主要过程:由于在实验过程中使用到的是刷新(溢出)中断,所以我们要开启计数器计数使能,刷新中断使能,设定分频因子、分频系数、计数类型等。

3、注意点:分频系数(psc):用于对计数器时钟进行分频,它的数值可以在1-65535取值。计数器的时钟频率(CK_CNT)等于fCK_PSC/( PSC[15:0]+1)。

                      分频因子:就是常说的二分频、四分频,用于改变计数器的时钟频率。

                      自动装载的周期值(arr):设置在下一个更新事件装入活动的自动重装载寄存器周期的值。

                      (分频因子与分频系数决定定时器的工作频率)

                      定时的时间计算公式:Tout= ((arr+1)*(psc+1))/Tclk        Tout:中断时间   Tclk:TIM3的输入时钟频率

我们将看 DS0 不停闪烁(每 400ms 闪烁一次),而 DS1也是不停的闪烁,但是闪烁时间较 DS0 慢(1s 一次):

DS0闪烁的时间计算:

while(1)

{

LED0=!LED0;

delay_ms(200);

}

DS1闪烁时间计算:

void TIM3_Int_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能

TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 

}

在main函数中,我们设置psc=7199,arr=4999;依据公式可以得出时间为500ms.那么一个周期就是1s亮一次。

PS:比如你的晶振是10M,定时器的计数器是65535,如果没有分频器,只能计时65535/10000000=6.5毫秒如果有了分频器,2分频,定时长度就变为2倍了,当然精度也下降。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值