历史上的今天
返回首页

历史上的今天

今天是:2024年12月27日(星期五)

正在发生

2021年12月27日 | STM32软件定时器的设计

2021-12-27 来源:eefocus

  定时器分为硬件定时器和软件定时器,几乎所有的微控制器上都配备了数量有限的硬件定时器,即控制器本身有专门实现定时的模块。几乎所有的硬件定时器的工作原理都是一样的:定时器在外部时钟提供的周期脉冲下进行计数工作,当计数到用户指定的次数时,就产生一次中断。这个过程完全由微控制器内部的定时器硬件电路实现,不需要 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

推荐阅读

史海拾趣

Engelking Elektronik GmbH公司的发展小趣事

作为一家有社会责任感的企业,Engelking Elektronik始终关注环保和可持续发展问题。公司积极采用环保材料和清洁能源,减少生产过程中的污染排放和资源浪费。此外,Engelking Elektronik还积极参与公益活动和慈善捐赠,回馈社会。公司坚信只有关注社会责任和可持续发展才能实现企业的长期繁荣和稳定。

Captive Fastener公司的发展小趣事

Captive Fastener公司深知产品质量是企业生存和发展的关键。公司建立了严格的质量管理体系,从原材料采购到生产加工、产品检验等各个环节都进行严格把关。此外,公司还定期对员工进行质量意识和技能培训,确保每一道工序都符合质量标准。这些措施有效提升了公司的产品质量和客户满意度。

HM International公司的发展小趣事

随着环保意识的日益增强,Captive Fastener公司积极响应国家环保政策,推动生产方式的绿色转型。公司引进先进的环保生产设备和技术,减少生产过程中的污染排放。同时,公司还研发出可回收再利用的紧固件产品,为电子行业的可持续发展做出了贡献。

First Silicon Co., Ltd公司的发展小趣事

随着全球电子市场的不断扩张,First Silicon公司意识到单一市场已无法满足其长远发展需求。于是,公司制定了全球化战略,通过设立海外研发中心、生产基地和销售网络,实现了从研发、生产到销售的全球化布局。这一战略不仅有效降低了公司的运营成本,还极大地提升了其品牌影响力和市场份额。在全球化进程中,First Silicon还积极与当地企业开展合作,共同推动电子技术的进步和应用。

APX Technologies公司的发展小趣事

面对日益激烈的市场竞争,APX Technologies积极寻求与其他企业的合作。公司与一家知名的电子设备制造商达成战略合作协议,共同开发一款具有创新功能的新型智能手机。这款手机的成功上市不仅提升了APX Technologies的品牌知名度,也为其带来了可观的利润。

Daito Communication Apparatus Co Ltd公司的发展小趣事

随着微电子学的快速发展,电子设备对元器件的要求也越来越高。Daito公司敏锐地捕捉到了这一市场趋势,决定对保险丝进行进一步的创新。在1995年,他们成功开发出了适用于电路板安装的高精度小型报警保险丝。这一产品的推出,不仅满足了市场对小型化、高精度保险丝的需求,也进一步巩固了Daito公司在电子行业中的领先地位。

随后,Daito公司又针对微电子学的进一步发展,推出了可以连续自动安装的方形微型保险丝。这一产品的推出,大大提高了生产效率,降低了成本,同时也为客户提供了更加便捷的使用体验。近年来,随着面安装技术的兴起,Daito公司又迅速推出了适用于面安装技术的片状保险丝,再次展示了他们在电子行业中的创新实力。

请注意,由于篇幅限制,以上仅为两个故事示例。如果需要更多故事,可以进一步深入研究和探索Daito公司在电子行业中的发展历程和创新实践。

问答坊 | AI 解惑

DC/DC模块电源选型的7大考虑因素

选择使用DC/DC模块电源除了最基本的电压转换功能外,还有以下几个方面需要考虑: 1.0额定功率    一般建议实际使用功率是模块电源额定功率的30~80%为宜,这个功率范围内模块电源各方面性能发挥都比较充分而且稳定可靠。负载太轻造成资源浪费 ...…

查看全部问答>

十天学会 51视频教程 免费下载

十天学会 51视频教程 免费下载 地址:http://www.verycd.com/groups/mcu/392145.topic#post2203424…

查看全部问答>

全方位解析万用表在电子系统测试测量中的使用技巧

“万用表”是万用电表的简称,它是我们电子制作中一个必不可少的工具。用途多,量程广,使用方便是万用表的优点。万用表能测量电流、电压、电阻、有的还可以测量三极管的放大倍数,频率、电容值、逻辑电位、分贝值等。万用表有很多种,现在最流行的 ...…

查看全部问答>

AT45DB021B问题

在AT4DB021B的Datasheet中说的Inactive Clock Polarity Low or Inactive Clock Polarity High 是个什么模式,和SPI Mode 0 or SPI Mode 3有什么区别, 在这两种模式下的opcode都不一样,比如读register的前者模式下是0x57,在后者模式下是0xD7,我 ...…

查看全部问答>

win CE开发如何入门

最近要在EP9315的芯片上做win ce的驱动,但是我没有win ce的开发经验,请问如何下手学习啊?有哪些win ce开发较好的入门级的书,请牛人给推荐一下。 能否说的细致一些,比如如何搭建开发环境,在没有硬件的情况下如何模拟开发(驱动程序)。 摆脱 ...…

查看全部问答>

显卡相关

请问各位有知道显卡自身可不可以处理鼠标移动函数的么? 有话的哪款显卡有此类的功能呢? 谢谢…

查看全部问答>

关于UPS蓄电池六大充电模式的详细介绍

一、恒压充电  恒压充电是指每只单格UPS电源蓄电池均以一恒定电压(一般取单格电池数乘以2.5v)进行充电。特点是:初始充电电流相当大,UPS蓄电池电动势和电解液体相对密度上升较快,随着充电的延续,充电电流逐渐减小,在充电终期只有很小的电流通 ...…

查看全部问答>

2407DSK与仿真器例程下载不了

刚买的2407DSK与仿真器,有几点不明:CCS不知应该装哪个,应该如何设置,感觉装上后的有点错误。USB仿真器连上了,例程下不进去,修改了CMD文件后有一些能下,但似乎跑不了,断点也不能用。…

查看全部问答>

线路板上很多松香怎么清理干净

谁能告诉我焊接电容、电阻(贴片)后,线路板上很多松香怎么清理干净?…

查看全部问答>

好好学习

要好好学习…

查看全部问答>