【STM8L】STM8L之定时器3的精确延时

本篇博文最后修改时间:2017年07月05日,10:37。


一、简介

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

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


二、实验平台

编译软件:IAR for STM8 1.42.2

硬件平台:stm8l101f3p6开发板

仿真器:ST-LINK

库函数版本:STM8L_STMTouch_Lib_V1.1.0


版权声明

博主:甜甜的大香瓜

声明:喝水不忘挖井人,转载请注明出处。

原文地址:http://blog.csdn.NET/feilusia

联系方式:897503845@qq.com

香瓜BLE之CC2541群:127442605

香瓜BLE之CC2640群:557278427

香瓜BLE之Android群:541462902

香瓜单片机之STM8/STM32群:164311667
香瓜单片机之Linux:512598061
香瓜单片机之职场交流:450154342
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i


四、实验步骤

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。或者用示波器观察更为准确。

因此实验成功。




  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值