历史上的今天
今天是:2024年11月10日(星期日)
2021年11月10日 | STM8定时器TIM1-TIM6使用详解与实验程序
2021-11-10 来源:eefocus

STM8定时器概述
STM8S提供三种类型的 TIM定时器:高级控制型(TIM1)、通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6)。它们虽有不同功能但都基于共同的架构。此共同的架构使得采用各个定时器来设计应用变得非常容易与方便(相同的寄存器映射,相同的基本功能)。
16位高级控制定时器(TIM1)
● 16位向上、向下、向上/下自动装载计数器
● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器
● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
● 同步电路,用于使用外部信号控制定时器以及定时器互联 (某些型号的芯片没有定时器互联功能)
● 多达4个独立通道可以配置成:
─ 输入捕获
─ 输出比较
─ PWM 生成(边缘或中间对齐模式)
─ 六步 PWM 输出
─ 单脉冲模式输出
─ 三个支持带互补输出,并且死区时间可编程的通道
● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态
● 产生中断的事件包括:
─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
─ 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
─ 输入捕获
─ 输出比较
─ 刹车信号输入
TIM1预分频器
TIM1的预分频器基于一个由16位寄存器(TIM1_PSCR)控制的16位计数器。由于这个控制寄存器带有缓冲器,因此它能够在运行时被改变。预分频器可以将计数器的时钟频率按1到
65536之间的任意值分频。
计数器的频率可以由下式计算:
f CK_CNT = f CK_PSC / (PSCR[15:0] + 1)
向上计数模式
在向上计数模式中,计数器从0计数到用户定义的比较值(TIMx_ARR寄存器的值),然后重新从0开始计数并产生一个计数器溢出事件,同时,如果TIM1_CR1寄存器的UDIS位是0,将会产生一个更新事件(UEV)。
向下计数模式
在向下模式中,计数器从自动装载的值(TIMx_ARR寄存器的值)开始向下计数到0,然后再从自动装载的值重新开始计数,并产生一个计数器向下溢出事件。如果TIM1_CR1寄存器的UDIS位被清除,还会产生一个更新事件(UEV)。
中央对齐模式( 向上/ 向下计数)
在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到0并且产生一个计数器下溢事件;然后再从0开始重新计数。
定时器TIM1例子
说明:16分频,向上计数,1000次=1毫秒 触发一次中断
TIM1_TimeBaseInit(15,TIM1_COUNTERMODE_UP,1000,0);
TIM1_ARRPreloadConfig(ENABLE);//使能自动重装
TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);//数据更新中断
TIM1_Cmd(ENABLE);//开定时器
INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{
TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
}
单片机源程序如下:
/***********************************************************************
* 说 明: STM8定时器
* 开发平台: 剑齿虎STM8开发板
* 作 者: 刘洋 张殿东
* 版 本: V1.0
*
* IAR开发环境 版本 V2.20.1
* ST库函数 版本 V2.2.0
***********************************************************************/
#include "pbdata.h"//引入自定义公共头文件
void BSP_Configuration(void);//硬件初始化函数声明
/***********************************************************************
* 函 数 名: main
* 功能说明: c程序入口
* 形 参:无
* 返 回 值: 错误代码(无需处理)
***********************************************************************/
int main(void)
{
BSP_Configuration();//硬件驱动初始化函数
while(1)//主程序循环,反复执行循环体里的语句
{
//LED_Demo1();//在主程序中调用LED_Demo1()函数
//LED_Demo2();//在主程序中调用LED_Demo2()函数
}
}
/***********************************************************************
* 函 数 名: BSP_Configuration
* 功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
* 形 参:无
* 返 回 值: 无
***********************************************************************/
void BSP_Configuration(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//时钟速度为内部16M,1分频,
LED_Init();//调用LED初始化函数
Tim1_Init();
rim();//打开总中断
}
/*断言函数:它的作用是在编程的过程中为程序提供参数检查*/
#ifdef USE_FULL_ASSERT
void assert_failed(u8* file,u32 line)
{
while(1)
{
}
}
#endif
史海拾趣
|
安崴提供低压差600MA输出电流的LDO,AP1735做到600MA/350MV, AP6256做到600MA/500MV 需要样品请联系13537795709 梁生,QQ 291426765 邮箱:LY158@TOM.COM … 查看全部问答> |
|
图中,7805的输入1脚接12V外加电源,3脚输出5V电压,这个用万用表的电压档一测就知道了,但是它的输出电流最大是多少呢? 答案是输出电流随负载的变化而变化,可是电流不能无限小和无限大吧?所以输出电流必定有个最小值和最大值。 ...… 查看全部问答> |
|
VISTA系统下安装 Tornado2.0后,运行时总出现 gdb error,是什么原因? 运行Tornado时,总弹出好几个错误的对话框,标题为 gdb error! 内容为:Failed to register COM Server. Error code = ox8002801c 将对话框点掉之后 Tornado 就启动起来了,运行还算正常,但每次一启动就出 ...… 查看全部问答> |
|
本报讯: 日前,记者从国内著名的IT培训公司北大青鸟APTECH获悉,进入9月份以来,在一些城市出现了大量刚入学大学新生前来咨询职业培训,甚至已有人报名参加相关课程培训,在某些培训中心,这类刚入学大学新生在本阶段招生中已占到相当比例。IT职业 ...… 查看全部问答> |
|
大家好: 我想知道 TI 的 MSP-FET430UIF 仿真器能不能支持 两线 BSL 仿真模式? 如果可以能不能把这个方法用于 430F21X1系列的MCU 上.… 查看全部问答> |
|
MSP430F5438 是属于哪个系列的? 手头有一个正宗的MSP-EXP430F5438 开发板 CPU上印字 X430F5438 在TI CCE软件中,设备选项名列最后一个,即选择 XMS430F5438(这是培训手册上指导的) 看了一下随带光盘资料: 1xx Users Guide,手册封面写着 ...… 查看全部问答> |
|
【MSP430共享】 MC430F224例程:Keys+LED演示 【例 程】://基于MC430F224开发板实验例程//软件:IAR Embedded Workbench Version: 3.42A//编写:微控设计网 www.Microcontrol.cn DC//目标板: MC430F224开发板 V1.0#include \"msp430x22x4.h\"//初级用户要习惯采用宏定义,以方便的编写 ...… 查看全部问答> |




