STM32软件定时器的设计

发布者:SerendipitySoul最新更新时间:2021-12-27 来源: eefocus关键字:STM32  软件定时器  控制器 手机看文章 扫描二维码
随时随地手机看文章

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

上一篇:STM32网络丢包问题分析
下一篇:STM32 硬件I2C 到底是不是个坑?

推荐阅读最新更新时间:2024-11-07 05:58

VGA图形控制器的FPGA实现
VGA(视频图形阵列)作为一种标准的显示接口得到广泛的应用。利用FPGA 芯片和EDA 设计方法,可以因地制宜,根据用户的特定需要,设计出针对性强的VGA 显示控制器,不仅能够大大降低成本,还可以满足生产实践中不断变化的用户需要,产品的升级换代方便迅速。   在本设计中采用了Altera 公司的EDA 软件工具Quartus II ,并以ACEX系列FPGA 的器件为主实现硬件平台的设计。   1 基于FPGA 的VGA 图形控制器系统框图   根据自顶向下的程序设计思想,采用模块化设计,我们对VGA 图形控制器进行功能分离并按层次设计。利用VHDL 硬件描述语言逐一对每个功能模块进行描述,并逐个通过编译仿真,最后下载到硬
[工业控制]
VGA图形<font color='red'>控制器</font>的FPGA实现
Linear推出多相高效率同步DC/DC控制器LTC3731H
    凌力尔特公司 (Linear Technology Corporation) 推出多相 (PolyPhase®) 高效率 (高达 95%) 同步 DC/DC 控制器 LTC3731H,该器件采用 5mm x 5mm QFN 封装,在结温高达 140ºC 时保证工作。这个坚固的 DC/DC 控制器可从 3 相扩展到 12 相工作,用于 60A 至 240A 电源设计。通过在各输出级均匀地分散热量,精准的 ±5% 输出相位电流匹配简化了热量管理。应用包括大电流 ASIC 和 FPGA 电源、电源分布式总线、汽车引擎控制单元和网络服务器。                     LTC3731 可以配置为降压型或升压型
[电源管理]
Linear推出多相高效率同步DC/DC<font color='red'>控制器</font>LTC3731H
QuickLogic推出可提供MDDI Type 2的显示控制器解决方案
QuickLogic公司已经成功地推出第一个完整的显示控制器解决方案,它提供移动显示数据接口(MDDI)Type 2,适用于采用Qualcomm平台的智能本( Smartbook )、 智能手机 和平板电脑等应用系统。此外,QuickLogic公司已证实它可以在MDDI Type 2(双通道)接口端上在Full Wide VGA(FWVGA)的分辨率下以60帧/秒(fps)的速度进行画面刷新。这个解决方案是在ArcticLink II VX4C解决方案平台上实现的,其中包括QuickLogic的视觉效果增强引擎( VEE )和显示器电源优化器( DPO ),进而使得开发人员可以在多媒体和高分辨率游戏内容中提供更细腻、更流畅的
[工业控制]
基于STM32控制器处理先进电机控制方法
   变频器的问世和先进的电机控制方法让三相无刷电机(交流感应电机或永磁同步电机)曾经在调速应用领域取得巨大成功。这些高性能的电机驱动器过去主要用于工厂自动化系统和机器人。十年来,电子元器件的大幅降价使得这些电机驱动器能够进入对成本敏感的市场,例如:家电、空调或个人医疗设备。本文将探讨基于ARM的标准微控制器如何在一个被DSP和FPGA长期垄断的市场上打破复杂的控制模式,我们将以意法半导体的基于Cortex-M3 内核的STM32系列微控制器为例论述这个过程。     首先,我们回顾一下电机控制的基本原理。在电机控制系统内,为什么处理器非常重要?我们为什么需要非常好的计算性能?毕竟,Nicolas Tesla在一个世纪前发明交流电机
[嵌入式]
基于STM32设计的指针式电子钟与日历
1. 项目简介 这是基于STM32设计的一个指针式电子钟+万年历小项目,采用3.5寸的LCD屏显示时钟,日历、温度、天气,支持触摸屏调整设置时间,设置闹钟,查看日历等等。整体项目主要是技术点就是LCD屏的图形绘制。比如: 时钟的时针绘制、分针、秒针、表盘、日历绘制等等。 时钟的时间是直接采用STM32本身的RTC时钟,室内的室温数据采用DS18B20温度传感器获取,STM32芯片的具体型号是STM32F103ZET6,只要是STM32F1系列的开发板,代码都是可以通用的 LCD显示屏采用的正点原子的3.5寸TFT显示屏,支持8080时序,自带触摸屏功能,触摸屏是电阻屏,驱动芯片是XPT2046,SPI接口,通信非常方便。
[单片机]
基于<font color='red'>STM32</font>设计的指针式电子钟与日历
stm32高低电平置位
高定平置1,低电平置0. void Crush_Scan(){ delay_ms(10); if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==0 ||GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==0){ Upload_Crash=1; }else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_9)==1||GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_10)==1){ Upload_Crash=0; } }
[单片机]
JZ2440开发笔记(6)——存储控制器
  存储控制器与CPU及其它外设的关系   我们看到cpu上集成了一个存储管理器,外围的存储设备都接在这个存储管理器上。cpu负责发出命令,其它的一切工作都交给了存储管理器。那么存储管理器是如何来管理这些外设的呢?   首先地址空间被分为8个bank(bank0-bank7),每个bank对应128m空间。每个bank都对应一个选通位(nGCS0-nGCS7),选通位为低电平是表示该bank选通。这样的话,虽然地址线只有27条,但是总的地址空间可以达到了1G。s3c2440的地址空间组织如下图所示:      我们看到地址空间是0-0x40000000,果然是1G。那么s3c2440的cpu是32位的,他可以使用的地址理
[单片机]
JZ2440开发笔记(6)——存储<font color='red'>控制器</font>
STM32启动文件选择说明
startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32F107xx startup_stm32f10x_hd.s 大容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_hd_vl.s 大容量的STM32F100xx startup_stm32f10x_ld.s 小容量的STM32F101xx,STM32F102xx,STM32F103xx startup_stm32f10x_ld_vl.s 小容量的STM32F100xx startup_stm32f10x_md.s 中容量的STM32F101xx,STM32F102xx,STM3
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved