切换到宽版
  • 4531阅读
  • 12回复

[STM]STM8学习之——TIMER4定时器 [复制链接]

上一主题 下一主题
离线zeze10000
 

发帖
2858
M币
8559
专家
35
粉丝
112
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-06-18
stm8的定时器比51的要复杂些,但基本原理都是相通的。
本质还是计数器。

计数器对时钟脉冲进行计数,当计数值和设定值相等时产生中断,完成一个定时周期。

原理就不多说了。stm8的定时器比51复杂的地方是可以设置事件更新时机,是实时更新还是产生计数溢出时更新。
当然这仅仅是最简单的TIMER4与51的差别,更高级的定时计数器功能将更加强大和复杂。

话不多说,今天就进行最简单的定时器实验。
闪烁灯。
之前用的软件延时实现闪烁,今天用定时器实现。

定时器的计数时钟来源于Fmaster主时钟。
为了提高精度使用外部晶体时钟。
外部时钟输入不能进行分频,因此是8M。
定时器可以进行预分频,这里设置成8分频,定时器计数时钟就是1M,方便计算。
计数器自动重装值设定为100。
8位定时计数器最高为255,也就是0xff;
定时器产生一次中断需要100us。
要获得1HZ的频率就需要LED每500ms进行一次翻转。
也就是需要5000*100us=500MS。

这里需要注意的是TIMx_SR这个状态寄存器需要软件清零,不然单片机会反复进入定时器中断,造成异常。

1HZ波形图


这里贴上程序代码

  1. /*定时器4***********/
  2. /*定时器4的简单应用*/
  3. /*******************/
  4. #include<iostm8s105k4.h>
  5. #define LED PE_ODR_ODR5 //LED引脚宏定义
  6. unsigned int i=0; //计数用
  7. #pragma vector=TIM4_OVR_UIF_vector //定时器中断
  8. __interrupt void timer4()
  9. {
  10.   TIM4_SR=0;    //标志位清零
  11.   if(i++==5000)
  12.   {
  13.     LED=!LED;
  14.     i=0;
  15.   }
  16. }
  17. void init()
  18. {
  19.   PE_DDR_DDR5=1; //输出模式
  20.   PE_CR1_C15=1; //推挽输出
  21.   PE_CR2_C25=0; //低速
  22.   
  23.   CLK_SWCR=0x02;//时钟切换使能
  24.   CLK_SWR=0xb4;//外部晶振
  25.   CLK_CKDIVR=0x00;//主时钟不分频 8M
  26.   
  27.   TIM4_PSCR=0x03; //主时钟8分频 1M
  28.   TIM4_ARR=0x64;  //计数100次溢出 100us
  29.   TIM4_IER=0x01;  //使能计数器中断
  30.   TIM4_EGR=0x01;  //触发事件更新
  31.   TIM4_CR1=0x01;  //开始计数
  32.   
  33. }
  34. int main( void )
  35. {
  36.   init(); //初始化
  37.   asm("rim");   //使能中断
  38.   while(1);
  39.   
  40. }


THE END!
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共4条打赏M币+63
2545889167 M币 +20 - 2018-06-19
66ok66 M币 +8 原創內容,请继续教下去;谢谢~ 2018-06-18
發騷友 M币 +26 以資鼓勵 2018-06-18
南湘小隐 M币 +9 原創內容 2018-06-18
离线kantu
发帖
60
M币
-12
专家
1
粉丝
4
只看该作者 1楼 发表于: 2018-06-18
请登录后查看
离线触景情伤

发帖
3862
M币
28
专家
4
粉丝
70
只看该作者 2楼 发表于: 2018-06-18
离线66ok66

发帖
1356
M币
860
专家
10
粉丝
21
只看该作者 3楼 发表于: 2018-06-18
请登录后查看
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 4楼 发表于: 2018-06-19
请登录后查看
本帖最近打赏记录:共1条打赏M币+8
66ok66 M币 +8 謝謝分享 2018-06-20
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 5楼 发表于: 2018-06-19
回 2545889167 的帖子
请登录后查看
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 6楼 发表于: 2018-06-20
回 zeze10000 的帖子
请登录后查看
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 7楼 发表于: 2018-06-20
回 2545889167 的帖子
请登录后查看
离线bg1trk

发帖
353
M币
48
专家
7
粉丝
48
只看该作者 8楼 发表于: 2018-06-20
回 zeze10000 的帖子
请登录后查看
离线2545889167

发帖
13268
M币
20754
专家
302
粉丝
4860
只看该作者 9楼 发表于: 2018-06-20
回 zeze10000 的帖子
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个