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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?