历史上的今天
返回首页

历史上的今天

今天是:2025年02月04日(星期二)

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

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

推荐阅读

史海拾趣

EUCHNER公司的发展小趣事

随着全球化的发展,EUCHNER公司开始实施国际化战略,加强在全球市场的布局。公司在世界各地设立了多个分销处和办事处,以便更好地满足不同国家和地区的市场需求。同时,公司还积极与国际知名企业建立合作关系,共同推动工业自动化领域的进步。通过国际化战略和全球布局,EUCHNER公司的品牌影响力得到了进一步提升。

AZ Displays公司的发展小趣事

随着公司规模的扩大和市场份额的提升,AZ Displays开始实施全球化战略。公司在全球范围内建立销售网络和分支机构,积极开拓国际市场。通过与国际知名企业的合作,AZ Displays成功将产品打入国际市场,进一步提升了公司的品牌影响力和市场竞争力。

Avasem公司的发展小趣事

在电子行业的初创期,Avasem公司以其独特的技术创新而崭露头角。创始人团队在半导体材料领域拥有深厚的研究背景,他们成功研发出了一种新型的、性能卓越的芯片材料。这一突破不仅大幅提升了电子设备的运算速度和能效,还降低了生产成本。随着市场对该材料的需求日益增长,Avasem公司迅速获得了风险投资的青睐,并通过与各大电子制造商的合作,将产品推向全球市场。公司因此实现了快速扩张,并在行业中建立了良好的口碑。

台湾奇力(Chip)公司的发展小趣事

奇力公司一直致力于环保和社会责任。在生产过程中,奇力公司采用环保材料和工艺,减少对环境的影响。同时,奇力公司还积极参与社会公益活动,回馈社会。这种环保和社会责任的理念也赢得了客户和社会的认可和支持。

以上五个故事分别从不同角度展现了台湾奇力(Chip)公司的发展过程。这些故事不仅体现了奇力公司的技术实力和市场策略,也展现了其持续创新、绿色环保和社会责任的企业形象。

C&D公司的发展小趣事

C&D公司深知品质是企业的生命线,因此始终坚守品质至上的原则。公司建立了严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都严格把控,确保产品的品质达到最高标准。同时,C&D公司还注重品牌建设,通过广告宣传、社交媒体营销等方式,提升品牌知名度和美誉度。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

ACP Optoelectronic Technology Co Ltd,在创立初期便专注于光电技术的研发。某年,公司研发团队成功开发出一种新型光电传感器,其性能远超当时市场上的同类产品。这一技术突破迅速吸引了行业内的关注,公司因此获得了大量订单,业绩迅速攀升。随着技术的不断完善和市场的不断拓展,ACP Optoelectronic Technology Co Ltd逐渐在光电领域崭露头角。

问答坊 | AI 解惑

关于阻抗匹配的理解(转发)

阻抗匹配是指信号源或者传输线跟负载之间的一种合适的搭配方式。阻抗匹配分为低频和高频两种情况讨论。        我们先从直流电压源驱动一个负载入手。实际的电压源总是有内阻的,我们可以把一个实际电压源,等效成一个理想的 ...…

查看全部问答>

IO pad里面的high-volt tolerant 是什么意思?

是新手,刚刚接触PAD,我看有的IO pad介绍里面有“high-volt tolerant”这个内容,“high-volt tolerant” 是什么意思?      是说这个IO pad可以在PAD端的电压很高的情况下也能正常工作还是说PAD端的电压的变化范围可以很大 ...…

查看全部问答>

Vxworks下MPC8247的bootrom开发

我目前向开发一款CPU为MPC8247的BOOTROM,操作系统为vxwokrs5.5,我不想改动过大,请问这个可以参考vxworks提供的哪个开发模板? 有牛人开发过这款CPU的bootrom软件吗?麻烦指导下,谢谢! 我的邮箱,wangxm1983@sina.com …

查看全部问答>

新手问一个对话框的问题

刚开始学windows mobile编程,最近在做编程的时候碰到一个问题,我用mfc smart device建了一个对话框工程,然后在对话框上加了几个按钮,没有其他操作,但是模拟的时候手机屏幕上却一片空白,没有显示按钮,这是为什么呢?之前做了一个hello的win32 ...…

查看全部问答>

关于DXP中ERC检查的一些问题,谢谢大家的帮忙了!!急急急~~

我在画好原理图后进行了DXP的ERC检查,检查完后,出现了以下几个问题,帮忙解决一下吧~~ 1. 例如NetU1_15 contains IO pin and output pin objects(pin U1_15) 2. 例如GND contains IO pin and Power pin objects(pin U4-4、16、20、21、22等) 3 ...…

查看全部问答>

WINCE环境配置 如何开启WINCE开发之门

如题所示,本人想知道如何构造WINCE环境, 即 1. 采用什么语言开发产品是恰当的?有什么要求,比如和CE的匹配问题。 2. 开发出的产品如何才能转嫁到WINCE上运行? 3. 在CE上,内存的分配又是如何完成的?我们可能开发了多个应用程序,   ...…

查看全部问答>

keil 编译是提示c129错误的求助

我用keil 在编译一个c语言工程的时候,总是提示error c129: missing  \";\" before \'typedef\'; 但是我的源程序根本就没有语法方面的错误,后来我在网上搜了一下,说是因为keil 对中文的支持问题,程序中可能出现全角的;或者空格等等 ...…

查看全部问答>

关于bit和sbit的区别问题

以前有人提过这个问题,但我还是没有看太明白.有这样一段代码: sbit P_4=P^4; P_4=0x03&0x10; 不知道这里P_4究竟被赋了八位中的哪一位呢? …

查看全部问答>

用单片机做数据采集,传感器是0.5级,1毫米的,是否可以做到精度10的-4次方,还有在采集时,电压老是不到满,是否会影响精度。

用单片机做数据采集,传感器是0.5级,1毫米的,是否可以做到精度10的-4次方,还有在采集时,电压老是不到满,是否会影响精度。 在线等啊,搞定马上给分。…

查看全部问答>

有用过TSC2046或STM8SPI的兄弟帮忙解答

大家好,我现在用STM8与TSC2046 进行SPI通信,读触摸屏的坐标。 现在我要端口模拟SPI已与TSC2046进行正常通信,但现在想用自有的SPI模块与其通信,但是老是不行。请教一下各位大虾。最好能提供代码供学习,谢谢!!! 我的SPI初始化:MCU为 ...…

查看全部问答>