当前位置: 首页 > article >正文

STM8S003F定时器延时


文章目录

  • 一、前言
  • 二、定时器初始化
  • 三、定时器函数与中断处理


一、前言

本次使用STM8S003F芯片,编译环境为IAR,至于新建工程什么的教程很多,这里就不多叙述了。其实官方例程里是有定时器延时的,使用定时器4固定频率,在中断里运行,就可以像系统一样按毫秒延时。

二、定时器初始化

#define TIM4_PERIOD 124
__IO uint32_t TimingDelay = 0;

/**
 * @brief  Configure TIM4 to generate an update interrupt each 1ms
 * @param  None
 * @retval None
 */

static void TIM4_Config(void)
{
  /* TIM4 configuration:
   - TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
   clock used is 16 MHz / 128 = 125 000 Hz
  - With 125 000 Hz we can generate time base:
      max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms
      min time base is 0.016 ms if TIM4_PERIOD = 1   --> (  1 + 1) / 125000 = 0.016 ms
  - In this example we need to generate a time base equal to 1 ms
   so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */

  /* Time base configuration */
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_PERIOD);
  /* Clear TIM4 update flag */
  TIM4_ClearFlag(TIM4_FLAG_UPDATE);
  /* Enable update interrupt */
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);

  /* enable interrupts */
  enableInterrupts();

  /* Enable TIM4 */
  TIM4_Cmd(ENABLE);
}

三、定时器函数与中断处理

定时器函数初始化定时时间:

void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;

  while (TimingDelay != 0)
    ;
}

中断函数:

void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}

在中断里增加中断函数:

extern void TimingDelay_Decrement(void);

 INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
 {
   TimingDelay_Decrement();
  /* Cleat Interrupt Pending bit */
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
 }


http://www.kler.cn/a/326927.html

相关文章:

  • 双指针算法篇——一快一慢须臾之间解决问题的飘逸与灵动(2)
  • SpringBoot集成Shiro+Jwt+Redis
  • 【图论】——理论基础总结
  • 大模型的提示学习
  • 细谈 Linux 中的多路复用epoll
  • 【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师
  • 【华为HCIP实战课程二】OSPF基础介绍和OSPF RID NBMA配置详解
  • 软件测试学习笔记丨curl命令发送请求
  • 【机器学习】---异构数据融合
  • 【C语言】字符和字符串函数(2)
  • uniapp在线打包的ios后调用摄像头失败的解决方法
  • 51单片机的智能垃圾桶【proteus仿真+程序+报告+原理图+演示视频】
  • 数据库课程设计案例:在线图书管理系统
  • SpringBoot+Activiti7工作流入门实例
  • 2024年国外优质API:情绪识别口碑佳
  • fastapp-微信开发GPT项目第一课
  • CSV数据行(取值)的列数多于表头字段数-Pandas无法正常读取
  • 主成分分析法
  • 杨辉三角-C语言
  • ppt模板如何制作?建议试试这4招
  • golang学习笔记17-切片
  • 正则表达式和re模块
  • 递归算法介绍和【题解】——数楼梯
  • JS设计模式之享元模式:优化对象内存占用的利器
  • 新手教学系列——系统模块划分原则:如何让系统架构更加灵活与高效
  • 解决端口被占用