STM8L之定时器3的精确延时

发布者:Blissful444最新更新时间:2019-12-18 来源: eefocus关键字:STM8L  定时器3  精确延时 手机看文章 扫描二维码
随时随地手机看文章

简介

本文介绍STM8L系列如何使用定时器3进行精确定时1S。

注:驱动外默认已启动16M晶振。


实验平台

编译软件:IAR for STM8 1.42.2

硬件平台:stm8l101f3p6开发板

仿真器:ST-LINK

库函数版本:STM8L_STMTouch_Lib_V1.1.0


实验步骤

1、工程中添加自己写的定时器3的驱动

1)写一个驱动GUA_Timer3.c (存放在工程的USER文件夹中)


//******************************************************************************                            

//name:             GUA_Timer3.c               

//introduce:        定时器3驱动        

//author:           甜甜的大香瓜                     

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.30      

//******************************************************************************    

#include "stm8l10x.h"  

#include "GUA_Timer3.h"  

  

/*********************内部变量************************/   

static u32 gGUA_Timer3_Delay; 

 

//******************************************************************************          

//name:             GUA_Timer3_Decrement          

//introduce:        定时器减1       

//parameter:        none         

//return:           none        

//author:           甜甜的大香瓜               

//email:            897503845@qq.com                  

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.30                        

//******************************************************************************    

void GUA_Timer3_Decrement(void)  

{  

  if(gGUA_Timer3_Delay != 0x00)  

  {   

    gGUA_Timer3_Delay--;  

  }  

}  

  

//******************************************************************************          

//name:             GUA_Timer3_Delay50Us          

//introduce:        定时器延时50微秒       

//parameter:        none         

//return:           none        

//author:           甜甜的大香瓜               

//email:            897503845@qq.com                  

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.30                        

//******************************************************************************    

void GUA_Timer3_Delay50Us(u32 nGUA_Time)  

{  

  gGUA_Timer3_Delay = nGUA_Time;  

  

  while(gGUA_Timer3_Delay != 0);  

}  

 

//******************************************************************************          

//name:             GUA_Timer3_Init          

//introduce:        定时器3初始化       

//parameter:        none         

//return:           none        

//author:           甜甜的大香瓜               

//email:            897503845@qq.com                  

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.30                        

//******************************************************************************    

void GUA_Timer3_Init(void)  

{  

  //时钟配置  

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM3,ENABLE);    

  

  //1分频,向上计数,每50us定时中断一次   

  TIM3_DeInit();  

  TIM3_TimeBaseInit(TIM3_Prescaler_1, TIM3_CounterMode_Up, 16*50);       

  TIM3_ARRPreloadConfig(ENABLE);  

  TIM3_ITConfig(TIM3_IT_Update, ENABLE);  

  TIM3_Cmd(ENABLE);  

}  


2)写一个定时器驱动头文件GUA_Timer3.h(存放在工程的USER文件夹中)

//******************************************************************************                            

//name:             GUA_Timer3.h            

//introduce:        定时器3驱动的头文件        

//author:           甜甜的大香瓜                     

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.30      

//******************************************************************************   

#ifndef _GUA_TIMER3_H_  

#define _GUA_TIMER3_H_  

   

/*********************外部函数声明************************/   

void GUA_Timer3_Decrement(void);

void GUA_Timer3_Delay50Us(u32 nGUA_Time);  

void GUA_Timer3_Init(void);  

  

#endif  


3)工程中添加GUA_Timer3.c

4)添加定时器驱动的路径


$PROJ_DIR$..USER  

注意USER文件夹是与“Project”、“FWlib”文件夹同级的自定义文件,用于存放香瓜写的代码。


2、添加库的驱动


1)添加库的驱动文件

3、写中断服务函数(stm8l10x_it.c中)

1)添加头文件

#include "GUA_Timer3.h" 


2)修改定时器3中断服务函数

//******************************************************************************          

//name:             GUA_Timer3_Decrement          

//introduce:        定时器3的Update/Overflow/Trigger/Break中断服务函数,定时器减1       

//parameter:        none         

//return:           none        

//author:           甜甜的大香瓜               

//email:            897503845@qq.com                  

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.30                        

//****************************************************************************** 

INTERRUPT_HANDLER(TIM3_UPD_OVF_TRG_BRK_IRQHandler, 21)

{

  GUA_Timer3_Decrement();

  TIM3_ClearITPendingBit(TIM3_IT_Update);   

}

进一次中断减一次静态变量的数值。


4、应用层中调用


1)添加头文件(main.c中)


#include "GUA_Timer3.h"


2)初始化(main.c的main函数中)

  //定时器3的初始化

  GUA_Timer3_Init(); 


3)测试延时1S(main.c的main函数中)

  //延时1S  

  GUA_Timer3_Delay50Us(20000);  


五、实验结果

仿真,在“GUA_Timer3_Delay50Us”函数前后设置断点,可发现执行时长为1S。或者用示波器观察更为准确。


因此实验成功。

关键字:STM8L  定时器3  精确延时 引用地址:STM8L之定时器3的精确延时

上一篇:STM8L之内部16M晶振
下一篇:STM8S之电量采集

推荐阅读最新更新时间:2024-11-11 15:45

关于PWM和精确延时输出的方波
绝大部分AVR单片机都会带有PWM硬件部分,今天小编来探测下PWM和精确延时产生的方波哪个更精准,欢迎讨论 小编就以输出4KHz的方波为例 1、下图是小编用PWM输出的4K方波 从图中,我们可以看到PWM输出的频率是4.03KHz; 2、下面小编带来精确延时的输出图形(小编精确延时用的是IAR编译器中intrinsic.h中的cycles函数) 从图中我们看到的精确延时产生的频率是4.01KHz,而且处于一个向4KHz跳变的状态
[单片机]
关于PWM和<font color='red'>精确</font><font color='red'>延时</font>输出的方波
keil c51程序设计中集中精确延时方法
1使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上
[单片机]
STC单片机精确延时参数测定方法
在使用STC单片机的时候,大家是不是会遇见一个问题:延时往往很难把握。当然可以使用延时函数产生波形输出到示波器观察来修改延时参数,但是没有示波器时有没有方法来确定延时参数呢。我这里自创了个办法,发到这与大家分享一下。 其方法是这样,首先设置好定时器的定时时间,在调用延时函数前打开定时器,定时器中断函数中读取出延时参数,然后通过串口将延时参数输出。具体代码如下: //程序说明:测试stc单片机延时常数,串口输出 //作者:mjx //注:程序测量精度高,适用stc这种指令不固定的单片机 #include STC12C5A60S2.h #include intrins.h int i,j,ii,jj;//ii,jj作为定
[单片机]
KEIL单片机C语言精确延时值的计算
关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。 共有三条延时函数说明如下: 函数调用分两级:一级是小于10US的延时,二级是大于10US的延时 // //----------微秒级延时--------- 延时时间=(3+5*X)/12 提示(单位us, X不能大于255) // { uchar data i; for(;Ms 0;Ms--) for(i=
[单片机]
[STM8L]TAB段式LCD液晶驱动程序
STM8L152XX系列带有片上段式LCD驱动程序,这为低成本应用和高密度系统设计提供了保证,利用片上LCD驱动模块,可以有效的控制系统整体功耗,简化系统结构,从整体来说可靠性得到提高。 此处不介绍LCD驱动模块的原理以及驱动时序,请参考STM8原版英文说明文档,已描述的很详细,以下介绍其寄存器的配置方法以及编程方法。 时钟,系统时钟同样用来产生LCD驱动时钟,通过时钟模块配置: CLK_PCKENR2|=S3; //LCD 使能LCD模块时钟 CLK_CRTCR=S7|S6|S5|S1; //RTC&LCD- FCLK/128 注意RTC和LCD是共同一路时钟 以上配置根据实际时钟进行调整,我
[单片机]
STM8s103F3p 16位定时器 STM2
/************************************************************************************ /* MAIN.C file * * Copyright (c) 2002-2005 STMicroelectronics */ //16位定时器2的中断方式 //周期为50ms #include stm8s103f.h main() { //端口初始化 PD_DDR=0x0f; PD_CR1=0x0f; PD_CR2=0x00; PD_ODR=0x0f;//端口D的前4位输出高电平 //定时器初始化 TIM2_IER=0x00;//
[单片机]
Stm8L系列单片机的低功耗
Stm8L系列单片机的低功耗有五种模式: wait模式 Low power run模式 Low power wait模式 Active-halt with full RTC模式 Halt模式 最低功耗的就是就是halt模式。这里也主要总结一下如何进入halt模式,进入以后可以通过什么方式唤醒,以及有很多客户会关心的如何自动唤醒。 Halt模式进入很简单,执行一条halt指令,调用库函数也就是halt()就行了。但是进入前要注意把所有的中断挂起标志给清除掉。要是不清零又恰巧有中断标志的时候进入该模式也会被立马唤醒。进入这种模式,所有的外设全都关闭了,所有时钟关闭。这时候它自己是醒不过来的,只能靠掐人中(给
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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