STM8S——8位基本定时器(TIM4)

简介:该定时器由一个带可编程预分频器的8位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。

主要功能:

(1)8位向上计数的自动重载计数器;

(2)3位可编程的预分配器(可在运行中修改),提供1、2、4、8、16、32、64、128这8种分频比例;

(3)中断产生:更新中断(溢出,计数器初始化)。

代码实现:

 1 /* Includes ------------------------------------------------------------------*/
 2 #include "stm8s.h"
 3 
 4 /* Private define ------------------------------------------------------------*/
 5 #define TIM4_PERIOD       124
 6 /* Private variables ---------------------------------------------------------*/
 7 __IO uint32_t TimingDelay = 0;
 8 /* Private function prototypes -----------------------------------------------*/
 9 void Delay(__IO uint32_t nTime);
10 void TimingDelay_Decrement(void);
11 static void TIM4_Config(void);
12 
13 /**
14   * @brief  Main program.
15   * @param  None
16   * @retval None
17   */
18 void main(void)
19 {
20   /* TIM4 configuration -----------------------------------------*/
21   TIM4_Config();    
22   
23   /* Insert 50 ms delay */
24   Delay(50);
25   }
26 }
27 
28 /**
29   * @brief  Configure TIM4 to generate an update interrupt each 1ms 
30   * @param  None
31   * @retval None
32   */
33 static void TIM4_Config(void)
34 {
35   /* TIM4 configuration:
36    - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
37    clock used is 16 MHz / 128 = 125 000 Hz
38   - With 125 000 Hz we can generate time base:
39       max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms
40       min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
41   - In this example we need to generate a time base equal to 1 ms
42    so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */
43 
44   /* Time base configuration */
45   TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
46   /* Clear TIM4 update flag */
47   TIM4_ClearFlag(TIM4_FLAG_UPDATE);
48   /* Enable update interrupt */
49   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
50   
51   /* enable interrupts */
52   enableInterrupts();
53 
54   /* Enable TIM4 */
55   TIM4_Cmd(ENABLE);
56 }
57 
58 
59 /**
60   * @brief  Inserts a delay time.
61   * @param  nTime: specifies the delay time length, in milliseconds.
62   * @retval None
63   */
64 void Delay(__IO uint32_t nTime)
65 {
66   TimingDelay = nTime;
67 
68   while (TimingDelay != 0);
69 }
70 
71 /**
72   * @brief  Decrements the TimingDelay variable.
73   * @param  None
74   * @retval None
75   */
76 void TimingDelay_Decrement(void)
77 {
78   if (TimingDelay != 0x00)
79   {
80     TimingDelay--;
81   }
82 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

漫谈可视化Prefuse(三)---Prefuse API数据结构阅读有感

  前篇回顾:上篇《漫谈可视化Prefuse(二)---一分钟学会Prefuse》主要通过一个Prefuse的具体实例了解了构建一个Prefuse applic...

19410
来自专栏Pythonista

Golang之(for)用法

地鼠每次选好了一块地,打洞,坚持半个月发现地下有块石头,然后他就想绕路了。。。殊不知绕路只会让它离成果越来越远

754
来自专栏陈满iOS

iOS框架·Masonry源码深度解析及学习启示:设计模式与链式编程思想

可见,系统传统的代码布局有点繁琐。为了简化上述传统布局代码,被广泛应用的第三方框架 Masonry 对AutoLayout 进行了封装,Swift版则是 Sna...

662
来自专栏技术之路

精典算法之详解 河内之塔

河内之塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内为越战时北越的首都,即现在的胡志明市;1883年...

1808
来自专栏mukekeheart的iOS之旅

iOS学习——布局利器Masonry框架源码深度剖析

  iOS开发过程中很大一部分内容就是界面布局和跳转,iOS的布局方式也经历了 显式坐标定位方式 --> autoresizingMask --> iOS 6....

3749
来自专栏ShaoYL

OC 实现一个TODO宏

34012
来自专栏Flutter入门到实战

老司机带你重构Android的v4包的部分源码

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/a08d754944c4

731
来自专栏小灰灰

利用crypto++库实现AES加密算法

利用crypto++库实现AES加/解密字符串,文件 MyAES.h: /* * MyAES.h * * Created on: 2013-3-...

2256
来自专栏iOS122-移动混合开发研究院

Masonry -- 使用纯代码进行iOS应用的autolayout自适应布局

简介 简化iOS应用使用纯代码机型自适应布局的工作,使用一种简洁高效的语法替代NSLayoutConstraints. 最新示例: 点击下载 项目简议: 如果再...

1945
来自专栏陈满iOS

iOS数据埋点统计方案(附Demo): 运行时Method Swizzling机制与AOP编程(面向切面编程)

工程说明,首页Test1ViewController,其中有4个按钮,点击第一个按钮打印,第二个到第四个按钮分别跳转到Test2ViewController,T...

421

扫码关注云+社区