上一节给大家介绍了基于标准库STM8单片机GPIO的驱动,本节课主要给大家介绍一下STM8定时器的驱动。


我们先打开STM8L10x单片机的规格书,简单的了解一下STM8L10X单片机的定时器功能。


如果所示,STM8L10x单片机共有3个定时器,分别是TIM2、TIM3、TIM4.

其中TIM2和TIM3是16位的基本定时器,TIM4是8位定时器。

因TIM2和TIM3是16位,所以定时时间更长,功能更加强大,所以我们今天主要给大家介绍一下TIM2和TIM3;

我们以TIM2为例给大家介绍一下定时器功能。

  1. STM8打开标准库文件夹,打开定时器例程

如上图所示,是标准库中定时器2的例程。

我们打开TIM2文件夹可以看到,总共包含5个例程。

STM8单片机的定时器功能比51单片机复杂很多,和STM32有点类似,包括输入捕获,OCA激活模式,OC激活模式,PWM输出,正弦波输出等功能。

2.在例程里面我们找不到最基本的定时功能的例程,这里我们选择最后一个文件夹,TIM2_SinewaveGeneration,并将文件夹中的4个文件复制到ProjectSTM8L10x_StdPeriph_Templates 下,如图所示。

3.进入ProjectSTM8L10x_StdPeriph_TemplatesEWSTM8,打开工程

本例程的主要功能是输出正弦波波形。我们需要实现的是基本的定时功能。打开通过例程可以看到,程序代码有点小复杂,研究起来不怎么容易。

4.我们在打开stm8l10x_tim2.h文件,看定时器2相关的函数.

如图所示,TIM2的头文件声明的函数非常多,要研究完这些函数需要比较久的时间,而且我们项目暂时上都用不到,所以我们就就先不研究这个例程,如果大家时间比较充沛的话,可以花点时间自行研究一下。

5.那如何高效的实现我们的定时器功能呢。我们可以通过百度,来了解一下别人是怎么说实现的。

通过百度“stm8定时器”关键词,找到以下下的例程:

如上图,GUA_timer2_Init(void) 就是单片机的初始化程序代码


INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19) 是定时器2的中断服务函数。


6.我们研究一下定时器2的初始化程序代码:


CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);//  /* Enable TIM2 clock */

TIM2_DeInit();

TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, 16*13); 

TIM2_ARRPreloadConfig(ENABLE);

TIM2_ITConfig(TIM2_IT_Update , ENABLE);

TIM2_Cmd(ENABLE);


①我们先看第一句代码:

CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);


①我们先看第一句代码:

CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,ENABLE);

打开定时器TIM2的时钟,官网提供的例程也有,也就是TIM2初始化,首先要打开定时器时钟,关于本函数的参数在这里就给大家不逐个解释了。

②第二句: TIM2_DeInit();

TIM2_DeInit(); 复位定时器2功能。我们打开stm8l10x_tim2.h 和stm8l10x_tim2.c文件查看本函数的说明,如下图所示。

③我们研究一下第三句TIM2_TimeBaseInit(TIM2_Prescaler_1, TIM2_CounterMode_Up, 16*13);

这句比较重要,是TIM2的初始化函数,我们比较详细的研究一下本函数,我们先在stm8l10x_tim2.c参看一下本函数的原型。

通过截图可以看到,本函数3个参数变量的解释。

第一个参数:TIM2_Prescaler_TypeDef TIM2_Prescaler

用来配置TIM2的分频参数的。共支持8个参数,单片机默认的工作频率是16M,如果我们先选择TIM2_Prescaler_1,表示TIM2的工作频率是16M,选择TIM2_Prescaler_16,表示16分频,16M/16 =1M. TIM2用定时器功能一般选择TIM2_Prescaler_16.

第二个参数:TIM2_CounterMode_TypeDef TIM2_CounterMode

用来配置定时器的计数模式,TIM2共有5种技术模式。 我们最常用的第一种TIM2_CounterMode_Up,表示向上计数。

第三个参数:uint16_t TIM2_Period, 用来配置TIM2工作的计数周期。如果配置成1M,如果给参数配置成1,表示TIM2定时器的计时周期为1/1M妙,1微妙。(系统时钟16M,TIM2工作频率16分频)。

④第四句: TIM2_ARRPreloadConfig(ENABLE);

我们先看一下本函数的原函数的函数说明:

如上图所示,本函数的主要功能就是 使能,关闭,分频参数的更新,因为我们的定时器配置之后,分频的参数不需要更改,所以这个打开,或者关闭,没有什么影响。

⑤第五句 TIM2_ITConfig(TIM2_IT_Update , ENABLE);

我们先看一下本函数的原始函数的说明:

如上图所示:本函数主要的功能就是打开TIM2的中断功能。

参数说明:

参数1:TIM2_IT_TypeDef TIM2_IT

表示中断方式选择,共有4种,我们选择TIM2_IT_Update 即可,表示向上计数中断。

参数2:FunctionalState NewState

表示中断功能打开还是关闭。 如果要打开中断,选择ENABLE,如果关闭中断,选择DISABLE。

⑥第六句:TIM2_Cmd(ENABLE);

函数原型如下:

本函数的功能就是打开或关闭定时器TIM2.

7.初始化程序代码就先介绍到这里,我们在和大家一起看一下中断服务函数:

INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19);

这个函数是定时器TIM2 向上计数中断服务函数,TIM2定时中断服务代码就在这里添加。

其中 TIM2_ClearITPendingBit(TIM2_IT_Update); 表示清除中断服务标志。

定时器实验测试:

1.我们先打开Lora模块的原理图如下:

2.定时器软件设计

实现功能:定时器TIM2实现1mS延时

实验效果:PC2 1ms 反转一次 PC3 1000ms反转一次

程序开发:


#include "stm8l10x.h"

__IO uint16_t counter = 0; ////TIM2 定时功能


void TIM2_Config(void);

void TIM2_OverHandle1(void);


void main(void)

  CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1); ///配置系统时钟1分频 16M HZ


  TIM2_Config(); ////定时器2初始化  

  GPIO_Init(GPIOC, GPIO_Pin_2|GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast); //  PC2 PC3 配置为输出

  enableInterrupts(); ////打开总中断     

 while(1)

 { 

 }


/* 配置定时器2    定时时间:1ms;

void TIM2_Config(void)

{  

  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);  /* Enable TIM2 clock */

  TIM2_DeInit();

  TIM2_TimeBaseInit(TIM2_Prescaler_16, TIM2_CounterMode_Up, 1000);

  TIM2_ITConfig(TIM2_IT_Update, ENABLE); /* Update Interrupt Enable */ 

  TIM2_ARRPreloadConfig(ENABLE); /* ARRPreload Enable */

  TIM2_Cmd(ENABLE); /* Enable TIM2 */

}


void TIM2_OverHandle1(void)////

{

  GPIO_ToggleBits(GPIOC, GPIO_Pin_2); 

  counter ++;

 if(counter>999)

 {

    counter = 0;

    GPIO_ToggleBits(GPIOC, GPIO_Pin_3);

 }

}


中断服务函数:

extern void TIM2_OverHandle1(void);

INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_IRQHandler, 19)

  TIM2_OverHandle1();

  TIM2_ClearITPendingBit(TIM2_IT_Update);

}


示波器测试效果如下:

测试操作图:

PC2 脚位输出效果图

PC3 脚位输出效果图。

3.最后我们打开TIM2定时器的硬件规格书,简单的了解一下TIM2相关的寄存器

从截图可以看出定时器TIM2的相关寄存器共22个寄存器,相对比较多,研究起来比较复杂,所以我们一般在软件程序开发过程中,尽量不要过多的研究单片机内部的相关寄存器,直接用库函数即可。如果碰到了相关问题再去找相应的寄存器分析。

关于定时器,我们就先讲到这里。

关键字:STM8  单片机  定时器驱动 引用地址:STM8单片机定时器驱动的深度解析

上一篇:手把手教你STM8单片机标准库移植
下一篇:STM8单片机GPIO口的驱动深度解析

推荐阅读

今天要讲的是串口通信,个人觉得挺重要的,以后USART、蓝牙通信,485等等都要用到串口,面试官也喜欢问一些串口的问题,比如问你串口参数,数据位几位,波特率多少,还会问你怎样设置串口等等。一、串口概述1. 定义串口通信是一种设备间非常常用的串行,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。2. 开发板硬件用于串口跟PC相...
据外媒报道,奥迪正在与比亚迪进行谈判,将后者纳入其电池供应商之列。受此消息刺激,周五比亚迪港股一路上扬,收盘大涨逾6%,收报40.6元/股。据悉,比亚迪的电池将用于基于奥迪和保时捷共同开发的PPE(Premium Platform Electric)平台打造的高端车型,首批车型将于2021年左右进入市场。并且,二者还探讨了深化合作的可能性,奥迪可能将入股比亚迪电池...
首先是定时器定时器/计数器定时器很重要,单片机的心脏首先几个概念时钟频率:fosc(晶振提供,51一般是12Mhz,11.0592Mhz这两种)12分频:fosc/12(这里我设为fT)机器周期:T=1/fT定时器就配置两种,第一是工作模式:定时器/计数器第二是四种工作方式然后是两个寄存器TMOD&TCON工作方式寄存器和控制寄存器工作方式寄存器TMOD(1)GATE——门控位GATE=0时,仅由...
微型超级电容器可在85℃下提供更长的使用寿命、高功率密度、快速充电和高可靠性,从而满足汽车电子应用中的能量存储所需。国巨集团(Yageo)旗下全球领先电子元器件供应商——基美电子(KEMET),宣布推出其用于汽车电子的新型高性能超级电容器FMD和FU0H两个系列。这两个系列均可在85℃/85% RH额定电压范围内和-40℃至85℃的工作温度下提供1,000小时使用...

史海拾趣

问答坊 | AI 解惑

基于自适应模板匹配的红外弱小目标检测

复杂背景中弱小目标的检测一直是监视和告警系统的重要组成问题。要求监视和告警系统具备极度,就只有及时地发展目标、跟踪目标、捕获和锁定目标。而监视和告警系统为了增大其有效作用距远距离发现目标。因此在绝大部分时间内,目标在视场中是以小目 ...…

查看全部问答∨

纹波电流计算方法

纹波电流计算方法…

查看全部问答∨

单片机语言C51应用实战集锦

单片机语言C51应用实战集锦…

查看全部问答∨

linux 文件系统挂载点

media,mnt这两目录挂载文件系统有什么不同,挂在media下的能挂载在mnt下吗?除了这两目录,文件系统还能挂在其它目录下吗?如果不能那又是为什么呢?…

查看全部问答∨

将要进入嵌入软件开发 的人

各位大哥们,我还是一个大一的学生,现在听说嵌入开发还可以,所以就有一点想向这一方面发展,但是现在在我面前的一个问题就是 我不知道要学那些东西,我也是一个计算机班的学生,这是不是有很大的优点. 所以就想问一下大哥们的应该出什么方向入手好一 ...…

查看全部问答∨

请教找ST芯片供货?

我想问下,深圳的ST供应商这些怎么查,一级代理商怎么查? 像我们如果几天要1000PCS这样的量的,一级代理商会理吗?而且周期比较长。…

查看全部问答∨

vpm642的电源tps54310

我用vpm642开发板,的电源芯片tps54310坏了,自己换的,发现电流增大了300mA,现在是1A,一会cpu就烫手,程序很容易跑飞,时间久了cpu会不断的复位,只能歇会再用。好多程序要调几次才能成功,对于Date-copy指令,传送一次(720个数)可以,可是加 ...…

查看全部问答∨

LM3S811开发板小问题2

最近仔细看了看板子,开发板很多过孔,原本觉得是板子布线不好呢,但是怎么想都不对,有很多过孔并没有参加到电路之中啊,请论坛中的大牛或者管理员解释解释好吗???为什么设置那么多过孔呢,在我看来一定是有什么特殊的作用 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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