历史上的今天
返回首页

历史上的今天

今天是:2025年06月10日(星期二)

正在发生

2020年06月10日 | 基于STM8SF103定时器的使用方法解析

2020-06-10 来源:elecfans

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


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

推荐阅读

史海拾趣

晨晶电子(Chenjing Electronics)公司的发展小趣事

晨晶电子的前身是始建于1958年的国营第七O七厂。作为一家具有深厚历史底蕴的企业,它在中国电子行业的发展历程中扮演了重要角色。然而,随着时代的变迁和市场环境的转变,国营第七O七厂逐渐面临着体制僵化、市场竞争力下降等问题。为了适应现代企业制度的要求,该厂在2000年进行了转制,成立了北京晨晶电子有限公司。这一转制不仅为企业注入了新的活力,也为其后续的发展奠定了坚实基础。

ETI Systems公司的发展小趣事

ETI Systems深知在电子行业中,单打独斗很难取得长远的发展。因此,公司积极寻求与行业内外的合作伙伴建立战略合作关系。通过与多家知名企业和研究机构的合作,ETI Systems不仅获得了宝贵的技术支持,还拓展了市场渠道和客户资源。这种合作与共赢的伙伴关系,为ETI Systems的快速发展奠定了坚实的基础。

台湾凯励(Carli)公司的发展小趣事

随着技术的不断成熟和市场的不断拓展,凯励公司开始在全球范围内布局。1997年,公司在广东省东莞市设立“东莞凯励电子有限公司”,进一步扩大生产规模。2002年,又在浙江省嘉兴市设立“浙江嘉兴凯励电子有限公司”,进一步完善了公司的产业布局。这些举措不仅提升了凯励公司的产能和效率,也使其能够更好地满足全球客户的需求。

中科银河芯(GXCAS)公司的发展小趣事
电源电压决定了输出信号的高电平值。
Cygnal Integrated Products Inc公司的发展小趣事

随着市场的不断发展和竞争的加剧,Cygnal意识到需要通过收购来加速其技术和市场的布局。经过一系列谈判和协商,Cygnal成功收购了另一家专注于嵌入式系统技术的公司。这次收购不仅为Cygnal带来了更多的技术和市场资源,还使其能够更好地满足客户的需求并提供更全面的解决方案。收购后,Cygnal通过内部整合和优化,将两家公司的优势融合在一起,形成了更强大的市场竞争力。

DEMMELPRODUCTS公司的发展小趣事

DEMMELPRODUCTS公司深知人才是企业发展的根本。因此,公司始终注重人才培养和团队建设。通过制定科学的培训计划和激励机制,公司吸引了一批优秀的研发、生产和销售人才。同时,公司还鼓励员工之间进行知识和经验的分享与交流,形成了积极向上的团队氛围。这些优秀的人才和团队为公司的发展提供了有力的支持。

问答坊 | AI 解惑

IGBT失效原因分析

引起IGBT失效的原因有: 1) 过热损坏集电极电流过大引起的瞬时过热及其它原因,如散热不良导致的持续过热均会使IGBT损坏。如果器件持续短路,大电流产生的功耗将引起温升,由于芯片的热容量小,其温度迅速上升,若芯片温度超过硅本征温度(约250℃ ...…

查看全部问答>

模拟器黑屏!

请问我下载image到模拟器,怎么是黑屏啊? 还有我的Network设置里面怎么不能选CS8900啊(选择框是灰色的),所以我选的NE2000. 谢谢!…

查看全部问答>

有关电厂燃料运输PLC硬件设计

最近毕业设计的课题,希望哪位高人帮帮忙,不胜感激!!! 主要是电气原理图, 要求如下: 某电厂燃料运输需要用到12条胶带机拖动12条皮带进行运输(1-12号),其中单号和双号皮带是并行进行的,相当于是双备份,现需设计整个燃料运输控制系统, ...…

查看全部问答>

declaration lacks type/storage-class(assuming 'int'):'class'这是什么原因

我在ADS的text file中定义如下的基类: //消息处理基类 #ifndef _OBJECT_H_ #define _OBJECT_H_ #include \"config.h\" class CObject{         public:                 virt ...…

查看全部问答>

关于安装的一些问题

我先装的VS2005然后打了SP1补丁包,最后装了试用160天的WinCE系统,我选的完全安装,用了我接近18G的硬盘就是害怕有问题。可是最后建立工程时pocket pc 和mobile都没有问题,但是WinCE的就说无法找到头文件。简直毫死人了,各位谁以前出现过这样的 ...…

查看全部问答>

探讨:系统软复位与冷启动的不同

对系统软复位的流程不清楚。不知道软复位开始运行的地址和冷启动是不是一样。。。。…

查看全部问答>

【求助】

请教一下,我从P1.2输出一定频率的脉冲(如500Hz),为什么其输出频率不稳呢??会一直减小,成499,498这样子,而且输出频率越大越不稳定??我使用TimerA,选SMCLK为时钟.…

查看全部问答>

时钟频率设置小问题求助

RSEL2~RSEL0:选择某个内部电阻以决定标称频率(0最低,7最高) 1什么叫其标称频率? 2最低是多少?最高多少? 3设置不同的标称频率对单片机工作什么影响? 4一般怎么设置?如果不设置默认是多少?   对于DCOCTL 1.DCO0~DCO2:DCO Se ...…

查看全部问答>

PC 机和多个单片机通信解决方案(超简单和实用)

      前段时间,做了一个小项目,十路继电器的控制方面,要用一台电脑通过串口控制两块单片机板子,每块板子有10路继电器。我是用的STC12C5A32S2芯片。用的RS485通信。       这个是一个 ...…

查看全部问答>

哪里能找到IAR FOR 430的官方例程代码?

我在CCS5上面看msp430g2553的例程,上面有句话“//   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10”,,,,是不是除了CCS上430的例程外,IAR的软件也有啊?我在IAR官网上找了一下,怎奈语言不是很好没有找 ...…

查看全部问答>