历史上的今天
今天是:2025年04月25日(星期五)
2020年04月25日 | STM8S——8位基本定时器(TIM4)
2020-04-25 来源:eefocus
简介:该定时器由一个带可编程预分频器的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 }
TIM4
上一篇:stm8S毫秒定时器
史海拾趣
|
引 言 SMS(Short Message Service)短信息服务是GSM(Global System for Mobile Communication)系统中提供的一种GSM终端(手机)之间,通过服务中心(Service Center)进行文本信息收发的应用服务,其中服务中心完成信息的存储和转发功能。短 ...… 查看全部问答> |
|
在DM9000所给的web例子中,设定DM9000的IP地址为: 172,20,24,42,然后将对接的PC的IP也设在该网段就行了,我想问的是,是不是DM9000的IP可以任意设置,只要保证同和它连接的PC的IP在一个网段就行了?… 查看全部问答> |
|
我用了max232cpe做了个串口烧录器,主要烧录STC51单片机,但是就是不行,我在max232里看到max232周围的电容用的是1u的,max232A用的电容是0.1U的,我想问一下max232可以用0.1u的电容吗?我的就是无法烧录,你们谁有完整的线路图给我个,谢谢。… 查看全部问答> |
|
我的dsp里设置HPIC寄存器为0x0B0B,即产生HINT中断,但用表测HINT脚一直是高电平。难道是要在HPI_CSR里的Interrupt Event Register和Interrupt Mask Register这两个寄存器进行相关设置?还是其他什么要设置?我调了一个礼拜了,还是老样子,现在快疯 ...… 查看全部问答> |
|
我的开发环境是VS2005,用的是PocketPC2003, 代码如下: #include \"ddraw.h\" #pragma comment(lib,\"ddraw.lib\") ...... IDirectDraw* pclDirectDraw; if (FAILED(DirectDrawCreate(NULL, &pclDirectDraw, N ...… 查看全部问答> |
|
初学FPGA (4)不完整条件语句与时序电路(EEFPGA学习计划) …… BEGIN IF CLK’EVENT AND CLK=’1’ THEN Q1<=D; END IF; 不完整的条件语句:即在条件语句中,没有将所有可能发生的情况给出对应的处理方式。对于这种现象,VHDL综合器理解为:对于不满足的条件,跳过Q1<=D不执行,但是需要保 ...… 查看全部问答> |




