定时器分为硬件定时器和软件定时器,几乎所有的微控制器上都配备了数量有限的硬件定时器,即控制器本身有专门实现定时的模块。几乎所有的硬件定时器的工作原理都是一样的:定时器在外部时钟提供的周期脉冲下进行计数工作,当计数到用户指定的次数时,就产生一次中断。这个过程完全由微控制器内部的定时器硬件电路实现,不需要 CPU 干预。
  相比之下,软件定时器则需要 CPU 的介入来实现了。实现软件定时器一般有两种方法:一种是纯粹依赖 CPU 指令的堆积来实现;另一种是以硬件定时器产生的时间片为基准单位,CPU 基于这个基准单位进行累积来实现。
  显然,硬件定时器的精度取决于驱动的时钟脉冲,一般情况下可以达到很高的精度(纳秒级),而软件定时器的实现由于引入了非硬件因素,精度必然有所下降。
  
  在嵌入式应用中,经常使用定时器进行定时,当定时时间到达之后执行预定的操作。一个具体的嵌入式系统可能有几个甚至数十个定时应用,而这些应用对定时器的精度、最大周期等要求往往都是不同的。比如使用定时器产生一个准确频率的方波是对定时精度比较高的应用,而使用定时器定时翻转一个用户指示灯以表示当前设备的工作状态,则对定时器精度的要求大为下降,这时如果启用硬件定时器无疑是一种资源的浪费。所以,在一个具体的嵌入式系统中,硬件定时器和软件定时器配合使用,是提高性能和降低成本的有效方法。
  那么,在 STM32 中如何利用一个硬件定时器构建多个软件定时器呢?
  我们来分析软件定时器的基本需求:在嵌入式应用中,对定时器的使用模式一般是“定时时间到达后执行预定的操作”。所以需要解决如下一些问题:
  1、 定时多久?——定时时间必须是可配置修改的;
  2、 定时时间到达后做什么?——需要指定执行函数;
  3、 定时器如何工作?——可以选择单次执行或循环执行。

  具体实现如下:
【头文件 softtimer.h】

#ifndef __SOFT_TIMER_H__
#define __SOFT_TIMER_H__#include "stm32f10x.h"/* 单次执行 */
#define TIMER_ONESHOT   0
/* 循环执行 */
#define TIMER_PERIOD    1/* 软件定时器结构体信息块 */
typedef struct __TIMER
{u32 Timeoutcnt;  // 表示定时器软件计数变量u32 Timeout;     // 表示定时器单次定时周期void (*Timeoutfunc)(void *parameter); // 定时到达后的执行函数void *Parameter; // 执行函数的参数u8 Timerflag;    // 表示定时器处于单次执行模式还是循环执行模式
}Timer_typedef;extern Timer_typedef TimerList[10];
/* 初始化软件定时器 */
extern void TIMER_TimerInitialisation(void);
/* 启动一个软件定时器 */
extern void \
TIMER_TimerStart(u8 TimerIdent, \u32 Timeout, \void (*Timeoutfunc)(void *parameter), \void *parameter, \u8 flag);
/* 用于判断定时时间是否到达,并执行对应函数 */
extern void TIMER_Execute(void);#endif

STM32软件定时器的设计相关推荐

  1. 高效软件定时器的设计

    摘要 软件定时器在协议栈等很多场景都有广泛的应用,有时候会有大量的定时器同时处于工作状态,它们的超时时间各异,要高效的保证每个定时器都能够较为准确的超时并执行到其回调函数并不是一件易事.本文分析嵌入式 ...

  2. stm32软件定时器

    /*在此定义若干个软件定时器全局变量注意,必须增加__IO 即 volatile,因为这个变量在中断和主程序中同时被访问,有可能造成编译器错误优化. */ #define TMR_COUNT 4 /* ...

  3. STM32的定时器详解(嵌入式学习)

    STM32的定时器详解 0. 前言 1. Systick定时器 概念 工作原理 时钟基准 Systick练习 2. HAL_Delay函数分析 3. 定时器 基本概念 定时器分类 定时器组成 计数器 ...

  4. FreeRTOS软件定时器 基于STM32

    文章目录 一·.软件定时器的基本概念 二.软件定时器应用场景 三.软件定时器的精度 四.软件定时器的运作机制 五.软件定时器函数接口讲解 1.软件定时器创建函数 xTimerCreate() 2.软件 ...

  5. 基于STM32的函数信号发生器设计(下:软件设计)

    转载请注明出处:http://blog.csdn.net/sctu_vroy/article/details/46279817 下篇将介绍整个STM32函数信号发生器系统软件设计部分,将着重介绍设计逻 ...

  6. c语言定时器原理,软件定时器实现原理、测试及应用设计

    分析μC/OSII操作系统软件定时器的算法,以及影响定时器精度的抖动问题产生的原因:提出定时器管理任务处理器占用率的计算公式,并进行了实验测试.实验结果表明,μC/OSII软件定时器具有ms级的最小分 ...

  7. STM32 FreeRTOS (三) 软件定时器

    简介: 基本概念 ReeRTOS中加入了软件定时器这个功能组件,是一个可选的.不属于freeRTOS内核的功能,由定时器服务(其实就是一个定时器任务)来提供. 软件定时器是当设定一个定时时间,当达到设 ...

  8. 关于软件定时器的一些讨论

    1.简介 这里先介绍下软件定时器和硬件定时器的区别 硬件定时器: CPU内部自带的定时器模块,通过初始化.配置可以实现定时,定时时间到以后就会执行相应的定时器中断处理函数.硬件定时器一般都带有其它功能 ...

  9. 【毕业设计】基于STM32的智能路灯设计与实现 - 物联网 嵌入式 单片机

    文章目录 1 简介 2 绪论 2.1 项目背景 2.2 需求分析 3 系统设计 3.1 功能设计 3.1.1 系统角色分析 3.1.2 开发环境 3.2 总体设计 3.3 硬件部分 3.3.1 整体架 ...

最新文章

  1. ddr3ddr4 lpddr4速率_金泰克LPDDR3/LPDDR4内存新增特性解读
  2. res.status === 200含义
  3. ubuntu linux下执行.sh文件
  4. [水池] 灌水专用:搜狗输入法里收集的纯文字表情
  5. 轻轻松松的记住Linux系统目录结构
  6. Red5流媒体服务器初探——Red5服务器的搭建
  7. 3dB带宽的概念解释
  8. 数组按照字母顺序排序
  9. CSS基础——看这一篇就够了
  10. sqlserver Month()函数取日期不足两位的加 0
  11. 74HC04六通道反相器介绍
  12. 1-5(中文版)听力积累
  13. 数据分析 - 关于彩票中奖结果的数据分析猜想(一)
  14. partial correctness and total correctness部分正确性和整体正确性
  15. 安全设计:加速传输软件镭速传输安全技术解读
  16. it计算机职业评估,最新澳洲技术移民评估ACS 职业评估(计算机IT类)
  17. 查询优化:SQL优化,关于连多表查询
  18. 浏览器开发者工具菜鸡相谈
  19. 指数基金将嵌入百度搜索大数据 银行图谋独家代销权
  20. swing入门教程(五) Swing概念

热门文章

  1. 出生小镇、高考不顺、复旦执教、闯荡硅谷,59 岁陆奇为何如此“幸运”?
  2. 【PHP】break跳出多层循环用法
  3. 就在刚刚,陆奇博士演讲《正视挑战把握创业创新机会》
  4. linux 命令 kps,ps命令
  5. 嵌入式端音频开发(基础篇)之2021-2022年国内主流语音识别芯片科普(1)
  6. 【小米机试】厨艺大赛奖金
  7. 【华为OD机试真题2023 JAVA】硬件产品销售方案
  8. java请求url加密_SpringCloud-Config通过Java访问URL对敏感词加密解密
  9. CSR8675的DSP学习笔记——a2dp_sink工程的matlab仿真
  10. 针对某软件系统的测试论文,计算机软件论文:软件可靠性及其测试分析