STM8单片机定时器驱动的深度解析

发布者:快乐之源最新更新时间:2021-09-01 来源: eefocus关键字:STM8  单片机  定时器驱动 手机看文章 扫描二维码
随时随地手机看文章

上一节给大家介绍了基于标准库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口的驱动深度解析

推荐阅读最新更新时间:2024-11-09 12:04

【51单片机快速入门指南】4: 软件 I2C
普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》 I2C 介绍 I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单, 器件封装形式小,通信速率较高等优点。I2C 总线只有两根双向信号线。一根是数据线 SDA,另一根是时钟线 SCL。由于其管脚少,硬件实现简单,可
[单片机]
【51<font color='red'>单片机</font>快速入门指南】4: 软件 I2C
用51单片机定时计数器控制LED1s闪烁一次
#include reg51.h //头文件 sbit LED=P2^0;//位定义LED灯 void Timer0()//使用定时计数器所做的处理函数,用做定时器 { TMOD=0x01;//定时器0,方式1 TH0=0xFC;//定时1ms的初值 TL0=0x18;//定时1ms的初值 ET0=1;//打开定时计数器0使能控制位 EA=1;//打开总中断 TR0=1;//打开定时计数器0的启动控制位 } void main()//主函数 { Timer0();//调用函数 while(1); } void ledxs()interrupt 1//中断执行内容函数,用定时器
[单片机]
STM8】串口数据一直卡在读中断
▪ 现象 STM8 UART1 开启了读中断,初始化代码如下: // 配置串口参数为:波特率115200,8位数据位,1位停止位,无校验,禁止同步传输,允许接收发送 UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); // 启用 UART1 中断 // UART1_IT_RXNE_OR 表示 接收数据寄存器非空或者溢出错误时 触发中断 UART1_ITConfig(UART1_IT_RXNE_OR, ENA
[单片机]
STM32单片机开发环境安装与工程搭建
一、认知STM32 1、STM32概念 STM32: 意法半导体基于ARM公司的Cortex-M内核开发的32位的高性能、低功耗单片机。 ST:意法半导体 M:基于ARM公司的Cortex-M内核的高性能、低功耗单片机 32:32位单片机 2、STM32开发的产品 STM32开发的产品:无人机、扫地机器人、3D打印机、平衡机、智能手环等 3、学习STM32对应的招聘职位 招聘职位:单片机开发工程师、单片机软件工程师、STM32开发工程师、嵌入式开发工程师、嵌入式软件工程师。 二、ARM与STM32 嵌入式系统 以应用为中心,以计算机技术为基础,软硬件可裁减,以适应应用系统对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统
[单片机]
STM32<font color='red'>单片机</font>开发环境安装与工程搭建
基于LPC11C24微控制器组成的CAN网络,实现对节点MCU的软件更新
0引言 分散型控制系统中的现场终端一般由控制器和各检测模块构成,它们之间通过一定的通信网络建立数据的交换链路。这种系统具有高可靠、开放性、灵活性、协调性、易维护等优点。然而,该分散型系统也具有终端数量多、分布范围广的特点。一旦终端系统软件存在缺陷或用户提出新的功能和指标要求时,其升级、维护的工作量和成本都非常大。本文针对上述情况,设计了一种方便、灵活、快速及稳定地对MCU节点进行在线更新的机制。基于LPC11C24微控制器组成的CAN网络,采用IAP编程技术(In Application Programming),实现了对目标节点MCU的软件更新功能。 1 LPC11C24单片机和CAN总线 恩智浦半导体(NXP)推出业界首款
[单片机]
基于LPC11C24<font color='red'>微控制器</font>组成的CAN网络,实现对节点<font color='red'>MCU</font>的软件更新
51单片机点亮一盏LED灯的原理解析
首先应该了解51单片机最小系统:51最小系统也称为51最小应用系统,是指用最少的元件组成的51单片机可以工作的系统。如图2.1.1所示,51最小系统一般应该包括:单片机、晶振电路、复位电路。 晶振电路的原理及组成,作用: 在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周
[单片机]
单片机】第2章:DIY最小化系统
一、元件布放 有:PCB、洞洞板、面包板 目前流行的PCB设计软件:Altium Designer 和PowerPCB 面包板 :上下红蓝细线,两旁有+-符号。表明细线位置横向孔是相通的,且每一个纵列都用数字表示。 每个纵列中,A~E是导通的,F~J也是导通的,之间有凹槽隔开。 单片机下载方式:ISP下载(通过串行口COM作为下载接口) 没有串口则用USB接口模拟串口。转换芯片:CH340G和PL2303HX等。 ISP下载电路: USB转换电路 开机检测P3.0/RXD是否有下载命令流,有则执行,无则运行用户程序 最小系统电路图 使用ISP下载程序时,单片机需要断电冷启动
[单片机]
【<font color='red'>单片机</font>】第2章:DIY最小化系统
GD32单片机的工作原理和内部结构 GD32单片机怎么烧写程序?
GD32单片机是一种基于ARM Cortex-M3核心的嵌入式处理器,由国内芯片厂商GigaDevice公司开发和生产。它是一种高性能、低功耗、成本合理的微控制器,广泛应用于智能家居、智能穿戴、消费电子、汽车电子、电力电子、医疗设备等领域。 GD32单片机在工作原理上与其他单片机基本相同,主要包括外设控制器、CPU核心、内存、时钟、复位电路等部分组成。不同的是,GD32单片机采用了ARM Cortex-M3的高性能处理器,拥有更高的运算速度和更强的计算能力,同时具备低功耗、低噪声、高可靠性等特点。 GD32单片机的内部结构主要包括CPU核心、中断控制器、系统控制器、时钟控制器、Flash存储器、SRAM存储器、DMA控制器
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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