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

    xiaoxiao2021-12-13  67

    本篇博文最后修改时间: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。或者用示波器观察更为准确。

    因此实验成功。

    转载请注明原文地址: https://ju.6miu.com/read-950293.html

    最新回复(0)