历史上的今天
今天是:2024年08月31日(星期六)
2018年08月31日 | STM32软件定时器的设计
2018-08-31 来源: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
史海拾趣
|
有归属、没宗派,有尊重、没辈分,有针对、没争竞,有奉献、没名利 相互尊重、友好交流、扩大共识,倡导不同文化间增进了解、相互借鉴 电子工程师,结构工程师,软件工程师,硬件工程师,FPGA研发。另有数码产品,影音视听产品,手机,微型硬盘播放机,R ...… 查看全部问答> |
|
我用的LPC2378,使用H-JTAG几乎都可以查询到芯片,再用H-FLASHER时大多数只能查到\"Target:ARM7TDMI-S Little-Endian\",而在\"Flash:ERROR\"。在H-FLASHER里选芯片选过LPC 2378和LPC2378_A都不好用。我的并口设置的是SPP模式。… 查看全部问答> |
|
◆ 全面替代S3C2440,且性价比更优 ◆ 模块背面无任何器件,方便直接贴焊或通过插针与底板相连 ◆ 商业级(0°~70°)、工业级(-40°~85°) ◆ 微尺寸(40x40x4mm)、低价格(千片价… 查看全部问答> |
|
MARVELL PXA310+WM6.0(littleton的BSP)下添加usb mass storage 功能: 以便设备连接到PC上时,能使SD卡像U盘一样在“我的电脑”里呈现出一个盘符, 不通过ActiveSync而是通过usb直接访问。 现在注册表设置好了(99%没错),usbmsfn.dll也已经 ...… 查看全部问答> |
|
紧急求救!!用c开发手机或PDA需要看什么方面的书籍资料!!谢谢各位拉 本人用vc写过应用程序,用c写过mp3的程式,但是c++不太好,在vc里面基本用的都是c,现在想转做手机或pda方面,请教需要看哪些书啊?我看些资料,一般都是在用WinCE或在Linux下开发,哪个发展更好些?不知道这方面薪水待遇怎么样?敢请各位不啬赐教 ...… 查看全部问答> |




