STM8 入门学习与实验(二)TIM 定时器

简介:这一章节将说明如何在stm8s上面部署一个TIM1,也就是定时器,我们将利用这一个定时器精准定时1ms单位,并用它来为LED灯闪烁时间作参考。



一、stm8定时器简述


打开用户手册,可以看到这张模块图鲜明的表明了STM8S103F3的外设内设都有哪些,我们可以看到右下角的几个定时器




可以得知,STM8S具有一个高级控制定时器TIM1,一个普遍应用定时器TIM2和一个基本定时器TIM4,可用的功能和配置逐级往下




二、配置TIM定时器


先看一条初始化TIM1的语句示例

TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 800, 0);


第一个参数0,是预分频值,这里为0就是1分频,也就是我们定时器将和系统内置晶振时间一样,也是16Mhz。

第二个参数TIM1_COUNTERMODE_UP,这个是向上计数模式,除了向上计数模式还有向下计数与中央对齐模式TIM1_COUNTERMODE_CENTERALIGNED1,TIM1_COUNTERMODE_CENTERALIGNED2,TIM1_COUNTERMODE_CENTERALIGNED3和TIM1_COUNTERMODE_DOWN可选。

第三个参数800是指这个计数器将每50us中断一次,跳转到stm8s_it.c中的中断处理函数。这一个数值的计算方法:  定时器溢出值 =  预计定时时间/( 1/频率 ),16bit最大值为65535。

第四个参数是重装载的开始时间这里再装载时候从0开始


中断配置与使能函数

 TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);


自动预装载使能

TIM1_ARRPreloadConfig(ENABLE);//每次中断后会自动装载之前配置的指定数值


使能定时器函数

 TIM1_Cmd(ENABLE);



定时器的初始化函数参考

void InitTIM1(void)
{
   TIM1_TimeBaseInit(0,TIM1_COUNTERMODE_UP,1600,0);
   TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);  
   TIM1_ARRPreloadConfig(ENABLE);
   TIM1_Cmd(ENABLE); 
   
}


三、TIM中断设置与应用


打开stm8s_it.c文件找到tim1的中断处理函数部分



之前我已经在主函数中添加了u8 g_timer这一个变量用于计算 ,现在在中断处理函数下面添加函数用于每次增加timer ,这一个数值主要用于计算次数,按照我们的设定是100us中断一次,则10次为1ms,当变量为5000时就为0.5s。


增加g_timer数值的函数,在中断处理函数中调用

void timerAdd()
{
  g_timer += 1;
}




中断处理函数

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
  timerAdd();
  TIM1_ClearITPendingBit(TIM1_IT_UPDATE);  
}





之后再设置  根据这一个数值进行延时等待的函数,以1ms为单位 设计delay函数


void delay(int ms)
{
   	while(g_timer<ms*10);
          g_timer = 0;
}



整体以上一篇文章为基础进行修改增加定时器函数,工程文件打包下载:


http://download.csdn.net/detail/u012388993/9906394



评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值