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

发布者:快乐航程最新更新时间:2020-06-10 来源: elecfans关键字:STM8SF103  定时器  使用方法 手机看文章 扫描二维码
随时随地手机看文章

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


环境: STM8SF103 ,仿真器为:STLINK


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

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

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

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

//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时钟如果关闭,时钟是运行不起来的。

关键字:STM8SF103  定时器  使用方法 引用地址:基于STM8SF103定时器的使用方法解析

上一篇:你该了解的单片机复位电路
下一篇:如何利用单片机和C语言来设计数字滤波系统

推荐阅读最新更新时间:2024-11-17 18:10

AD8361—0.1~2.5GHz真功率有效值响应器件及其使用方法
    摘要: AD8361是ADI公司最表推出的一种射频(RF)真功率检测集成电路,综是一个在单片IC上实现用有效值度量RF功率的器件。介绍了它的检测原理及使用方法。     关键词: 有效值 射频 CDMA 正交幅度调制 凡是检测一个信号的真功率有效值(RMS)都要雪结到检测该信号的电压有效值上来。而检测电压有效值的传统方法是通过二极管平方律检波电路或热电耦合热装置来完成的。这两种方法各自都有较多的缺点,很难做到精确测量,而且线性和温度稳定性都不高,尤其在检测小功率射频信号时更是如如。二极管平方律特性范围很窄,信号过小或过大时检测性能都很差,造成较大测量误差;热电耦发热装置工艺复杂,器件脆弱,信号过大极易
[应用]
利用STM32的定时器输出PWM
使用芯片:STM32F103ZET6 目的:利用stm32的定时器3输出PWM 所用寄存器及相应位(参考STM32参考手册): (1)控制寄存器1(TIM1_CR1) 第0位CEN:计数器使能位;通过函数void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) 来实现。 第4位DIR:计数方式,默认向上,也可以设置为向下计数; 第5、6位CMS:设置计数对齐方式; 第7位ARPE:自动重装载预装载允许位,为0时TIMx_ARR没有缓冲,为1时TIMx_ARR被装入缓冲器 第8、9位CKD:设置定时器的时钟分频因子为1、2、4。 (2)DMA/中断使能寄存器(TIM
[单片机]
(STC12 默认12分频)定时器用法
#include reg52.h #define uchar unsigned char #define uint unsigned int uchar num,LED; void TR0_()interrupt 1 { TMOD=0x01; //定时器0的工作方式1 TH0=(65535-50000)/256;//计时50ms一次 TL0=(65535-50000)%256; num++; } void main() { TMOD=0x01; //定时器0的工作方式1 TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; //开总中断 ET0=1; //开定时器0 TR
[单片机]
STM32定时器中断
STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。 TIM1和TIM8是能够产生3对PWM互补输出的高级定时器,常用于三相电机的驱动,时钟由APB2的输出产生;TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 通用TIMx定时器特性包括: ●16位向上,向下,向上/向下自动装载计数器 ● 16位可编程预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值 ●4个独立通道:(定时器通道是什么意思?在PWM一节中有提到...)
[单片机]
STM32<font color='red'>定时器</font>中断
【STM32】定时器TIM触发ADC采样,DMA搬运到内存
TIM+ADC+DMA原理 一般情况下,当我们需要进行采样的时候,需要用到ADC。例如:需要对某个信号进行定时采样(也就是隔一段时间,比如说2ms)。 本文提供的解决方案是:使用ADC的定时器触发ADC单次转换的功能,然后使用DMA进行数据的搬运! 这样只要设置好定时器的触发间隔,就能实现ADC定时采样转换的功能(即采样速率),然后可以在程序的死循环中一直检测DMA转换完成标志,然后进行数据的读取,或者使能DMA转换完成中断,这样每次转换完成就会产生中断。 主要需要解决的一个问题:定时器触发ADC采样,如何实现? 定时器触发ADC采样,是属于外部触发转换的一种方式。在《STM32中文参考手册》中,找到了关于这部分的
[单片机]
【STM32】<font color='red'>定时器</font>TIM触发ADC采样,DMA搬运到内存
模拟式万用表的使用方法
1. 使用方法 (1)零位调整。将仪表水平放置,使用时先检查指针是否在标度尺的起始点上。若移动了,可调节零位调节器,使它回到标度尺起始点上。 (2)直流电压的测量,将范围选择开关旋至直流电压 V 的范围所需测量电压最程上,然后测量,电流方向必须遵守在端钮上标志的极性。量程选择应尽可能选择接近被测之量,使指针有较大偏转角,以减少误差。 (3)交流电压的测量。方法与直流相似,将范围选择开关旋至欲测量的交流电压量程上即可。测量交流电压的额定频率为45-1500Hz,扩大频率至5000Hz.为取的准确结果,仪表的公共 *应与信号发生器负极(接机壳端)相连。 (4)直流电流的测量。将范围选择开关旋至直流电流 uA 或 A 范围内,并选
[测试测量]
西门子PLC定时器简单电路的编程
S7—200的定时器有三种:接通延时定时器(TON)、有记忆接通延时定时器(TONR)和断开延时定时器(TOF)。      图1 梯形图和语句符号 ◆ TON和TONR的工作: 当使能输入接通时,接通延时定时器和有记忆接通延时定时器开始计时,当定时器的当前值(Txxx)大于等于预设值时,该定时器位被置位。当使能输入断开时,清除接通延时定时器的当前值,而对于有记忆接通延时定时器,其当前值保持不变。可以用有记忆接通延时定时器累计输入信号的接通时间,利用复位指令(R)清除其当前值。  ◆ TOF的工作 TOF用来在输入断开后延时一段时间断开输出。当使能输入接通时,定时器位立即接通,并把当前值设为0。当输入断开时,定时器开
[嵌入式]
s3c2440中PWM应用
s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,因此用s3c2440可以很容易地实现PWM功能。下面就具体介绍如何实现PWM功能。 1、PWM是通过引脚TOUT0~TOUT3输出的,而这4个引脚是与GPB0~GPB3复用的,因此要实现PWM功能首先要把相应的引脚配置成TOUT输出。 2、再设置定时器的输出时钟频率,它是以PCLK为基准,再除以用寄存器TCFG0配置的prescaler参数,和用寄存器TCFG1配置的divider参数。 3、然后设置脉冲的具体宽度,它的基本原理是通过寄存器TCNTBn来对寄存器TCNTn(内部寄存器)进行配置计数,TCNTn是递减的,如果减到零,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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