访问电脑版页面

导航:老古开发网手机版单片机STM8S单片机

基于STM8SF103定时器的使用方法解析

导读:
关键字:
rc振荡器,STM8S,定时器,

看了网上的资源,都不怎么好用,于是决定总结总结,记录下定时器的简单实用方法。

环境: STM8SF103 ,仿真器为:STLINK

TIM4 属于8位定时器,最大128分频。

这个定时器的时钟源是系统时钟源(fMaster),然后直接通过预分频器分频后供CK_CNT使用。如:系统频率为4MHz,经过128分频后,提供给定时器使用的频率就为 31250Hz

因为项目需要,我这里使用的内部RC 16MHz振荡器,并进行LSI 4分频,所以主频为4MHz。

//main.c

voidInit_TIm4(void)

{

/*很多人都是在这里装填0xFF,其实是为了让PSC尽快生效,对于PSC的设置,需要在下一个更新事件时才会生效*/

TIM4_CNTR=0;//计数器值

TIM4_ARR=0xFA;//自动重装寄存器250,产生125次定时1S

TIM4_PSCR=0x07;//预分频系数为128

TIM4_EGR=0x01;//手动产生一个更新事件,用于PSC生效注意,是手动更新

TIM4_IER=0x01;//更新事件中断使能

TIM4_CR1=0x01;//使能计时器,TIM4_CR0停止计时器

}

voidmain(void)

{

_asm(“rim”);//这是必须的,因为系统重启后,软件中断级别为3级,处于最高级,除了TRAP,TLI,RESET三个中断外不响应其他中断。

//rim将软件级别更改为0级别,这样其他中断就能得到相应。

Init_Tim4();

while(1);

}

//中断向量表必须将TIM4的中断处理函数填写进去

{0x82,TIM4_UPD_OVF_IRQHandler},/*irq23*/

//处理函数如下:

/*定时器4用作看门狗喂狗定时,因为看门狗最大延时510ms,

定时器频率为4MHz/128=31250=250*125,125/5=25(200ms)*/

@far@interruptvoidTIM4_UPD_OVF_IRQHandler(void)

{

t4++;

TIM4_SR=0;//清除中断标志

//t4==125//定时1S

if(t4==25)//25*250定时200ms

{

FREE_IWDG;//喂狗,如果单纯定时用,可以拿掉

//可以尝试点亮LED灯

t4=0;

}

return;

}

定时器延时计算过程,如主频4MHz,预分频为128,定时器频率等于 4000000 / 128 = 31250 (Hz),周期为32us。4分频时周期为1us。

如:主频8MHz,预分频为128,定时器频率等于 8000000 / 128 = 62500 (Hz),周期为16us。

整个代码没有使用库函数,诸如TIM4_SR TIM4_CR1之类的定义在stm8s103k.h,其他的头也可以。

定时器2 (16位计时器) 的简单实用与此类似,但需要注意设置初值的方法,如:

voidInit_Tim2(void)

{

TIM2_EGR=0x01;//手动产生更新事件,重新初始化计数器,并允许产生一个更新事件

//设置定时器初值

TIM2_CNTRH=0;//不能使用TIM2_CNTR直接设值,TIM2_CNTRL=0;

//设定自动重装寄存器值

//这里得注意不能使用TIM2_ARR的方式进行设值,TIM2是十六位的。

//如TIM2_ARR=0xFA,实际上是赋给高字节了,TIM2_ARRH=0xFA,而不是想象中的赋给低字节。

TIM2_ARRH=0x7A;//312504MHz/128=31250Hz(1S)

TIM2_ARRL=0x12;//0x7A1231250意味着每产生一次中断时间为1S

TIM2_PSCR=0x07;//分频128

TIM2_IER=0x01;//中断允许位使能

TIM2_CR1=0x01;//使能计时器

}

整个使用需要注意几点:

第一、总中断的开启 _asm(“rim”)

第二、中断向量表对应位置的中断处理过程改写

第三、定时器自身的使能,包括中断使能和计时器使能

第四、默认情况下,TIM4的外设时钟是开启的,CLK_PCKENR为0xFF,外设TIM4时钟如果关闭,时钟是运行不起来的。

来源:未知   作者:工程师周亮  2018/11/19 16:17:00
栏目: [ STM8S单片机]

相关阅读

如何在STM8S单片机上实现一键式的开关机功能

STM8S的通用异步收发器UART的原理解析

STM8S单片机开发的过程及方法

STM8S单片机外部中断唤醒

STM8S的GPIO主要功能以及操作方法解析

stm8s开发(六) EXIT的使用:做一个外部中断的按钮!

如何利用STM8S单片机实现一键式的开关机功能

STM8S单片机通过蓝牙与智能手机实现串口通讯的设计

STM8SF103单片机的ADC采样电压设计

STM8s(3) GPIO引脚功能设置

STM8S_001_GPIO基础知识

STM8S系列单片机是如何控制机器人的

STM8S电源管理-重点活跃停机模式

基于stm8s103k3单片机串口UART的正确使用分享

stm8s的UBC参数问题

STM8S PWM输出停止后 IO口电平输出

STM8S 与 STM32F IO口输出速率测试

意法半导体(ST)的STM8S系列微控制器为工业应用提供先进的8位内核和可伸缩的设计平台

STM8S_002_TIM精确延时(阻塞式)

STM8S程序常见错误解决方案