历史上的今天
返回首页

历史上的今天

今天是:2024年10月20日(星期日)

正在发生

2021年10月20日 | STM8S定时器的使用 - stm8s定时器tim4使用方法解析

2021-10-20 来源:eefocus

  stm8s定时器TIm4概述

  该定时器由的8可位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。


  TIM6同时钟信号控制器用于定时器同步和级联。


  STM8通用定时器TIM4的主要功能

  TIM4功能包括:

  1、8位向上计数的自动重载计数器;

  2、3位可编程的预分配器(可在运行中修改),提供1,2,4,8,16,32,64和128这8种分频比例。

  3、中断产生

  –在计数器更新时:计数器溢出

  STM8通用定时器TIM4功能概述

  stm8s定时器tim4使用方法解析

  (TIM4框图 )

  中断

  通用定时器包括2个中断源:

  更新中断(溢出,计数器初始化);

  触发信号输入(仅TIM6可用)


  STM8S定时器的使用

  环境:STM8SF103 ,仿真器为:STLINK

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

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


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

  //main.c

  void Init_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停止计时器

  }

  void main(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 @interrupt void TIM4_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位计时器) 的简单实用与此类似,但需要注意设置初值的方法,如:

  void Init_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; //31250 4MHz / 128 = 31250Hz (1S)

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

  TIM2_PSCR=0x07; //分频128

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

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

  }

  整个使用需要注意几点:

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

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

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

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


推荐阅读

史海拾趣

Churod Electronics Co Ltd公司的发展小趣事

为了保证产品质量和客户满意度,中汇瑞德一直将质量管理体系的建设放在重要位置。公司引入了国际先进的质量管理理念和方法,建立了完善的质量管理体系,并通过了多项国际认证。同时,公司还加强了对供应商的管理和评估,确保原材料的质量符合公司要求。这些措施有效地提高了产品的质量稳定性和可靠性,赢得了客户的信任和认可。

GainSpan ( Telit)公司的发展小趣事

风华的故事始于1984年,当时广东肇庆风华电子厂成立,最初业务聚焦于收录机装配。一年后,即1985年,国内首条从美国引进的年产1亿只片式多层陶瓷电容器生产线落户风华,标志着公司正式踏入高新技术产业领域。这一举措不仅提升了公司的技术实力,也为后续的发展奠定了坚实基础。

CUI Devices公司的发展小趣事

CUI Devices与富昌电子之间的合作关系可以追溯到CUI Inc的时代。多年来,双方建立了深厚的合作基础。在CUI Devices从CUI Inc剥离后,富昌电子继续支持其发展,成为其重要的合作伙伴之一。双方共同致力于推动电子元件行业的发展,为客户提供更优质的产品和服务。这种稳固的合作关系为CUI Devices在市场竞争中提供了有力的支持。

这五个故事展示了CUI Devices在电子行业中的发展历程和取得的成就。从起源与转型到应对全球健康危机的积极举措,再到在压电警报器市场的卓越表现以及电机品牌的崛起与拓展,每一个故事都见证了公司的成长和进步。同时,与富昌电子的稳固合作也为公司的未来发展奠定了坚实的基础。

Heatron LED Integration公司的发展小趣事

Heatron LED Integration始终将客户需求放在首位,提供全方位的服务支持。公司建立了完善的售前咨询、售中指导和售后服务体系,确保客户在使用过程中能够得到及时、专业的帮助。此外,公司还根据客户需求提供定制化解决方案,满足不同场景下的照明需求。这种客户至上的服务理念,赢得了广大客户的信赖和好评。

HTC Korea(TAEJIN Technology )公司的发展小趣事

近年来,HTC在VR领域取得了显著的成就。2023年,在美国国际消费性电子展(CES)中,HTC推出了最先进的虚拟实境头戴式显示器VIVE XR Elite,凭借其创新、高规格的设计和巧妙的人体工学设计,赢得了众多国际媒体的赞誉和奖项。此外,HTC还开发了多款VR内容套件和追踪器,为用户提供了更加沉浸式的虚拟体验。这些努力不仅推动了VR产业的发展,也为HTC带来了新的增长点。

CONEC公司的发展小趣事

为了进一步提升公司的竞争力和市场影响力,CONEC开始了国际化布局。1990年,康耐加拿大公司的成立,标志着公司迈出了国际化的重要一步。随后,CONEC在德国、捷克共和国、美国和波兰等地设立分公司或生产基地,形成了全球性的生产和销售网络。同时,公司还积极寻求与全球领先的电子企业和技术机构的战略合作,共同推动电子行业的发展。

问答坊 | AI 解惑

电子血压计的气泵气阀电路部分

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 请问有没有人了解这方面的信息,关于直流微型气泵如何选型,驱动电路等等,欢迎赐教!~ 本人刚来此地,尚不熟悉,希望大家多多帮助,谢谢!~ …

查看全部问答>

算术运算类指令

不带进位位的加法指令 ADD A,#DATA ;例:ADD A,#10H ADD A,direct ;例:ADD A,10H ADD A,Rn ;例:ADD A,R7 ADD A,@Ri ;例:ADD A,@R0 用途:将A中的值与其后面的值相加,最终结果否是回到A中。 例:MOV A,#30H ADD A,#10H 则执行完 ...…

查看全部问答>

TMS320x280x DSP 引导ROM

TMS320x280x DSP 引导ROM…

查看全部问答>

SBC_2410板子怎样更改调试口

三星的SBC_2410,我想不用COM1做调试串口,而用COM2做调试串口,应该怎么改呢? 只要进入wince后不再有调试信息从COM1输出就行,在BIOS时怎么没有关系 谢谢各位前辈哦,最好答详细点哦,因为我是初学者,谢谢,谢谢………

查看全部问答>

YLP2440核心板内存能扩到256M吗

YLP2440核心板内存能扩到256M吗. YLP2440核心板带有64M RAM, 由于项目需要扩到256M,请问这个好能实现吗,是不是仅添加两根地址线就可以了? 2440的BANK为128M,这样需要2个BANK,硬件上需要那些改动?…

查看全部问答>

请教老师们:自已写的winCE驱动程序被加载后,马上又被卸载了?

我在Platform   Builder下编写了一个很简单的LED驱动程序,就包含了DllMain,LED_Init,LED_Open,LED_DeInit,LED_close,LED_Powerup,LED_Powerdown等等函数的操作。然后在release目录下的Platform.reg的\\drivers\\builtIn当中添加了该驱动 ...…

查看全部问答>

在at91rm9200上使用u-boot-1.1.4加载linux-2.6.17问题

我是新手请请教      在at91rm9200上使用u-boot-1.1.4加载linux-2.6.17问题 现在的问题: 1:u-boot不能自动加载内核,必须在u-boot的命令提示符下自己输入装载命令bootm 10080000         & ...…

查看全部问答>

求助!!EVC对话框程序退出后桌面显示不正常

在网上找到一个隐藏任务栏的代码: HWND hTaskBarWnd=::FindWindow(_T(\"HHTaskBar\"),NULL);              if   (hTaskBarWnd)           &nb ...…

查看全部问答>

学习LINUX需要哪些基础?

C语言,是最重要的部分,如果在学习QT等等 还要有C++的基础。 操作系统原理,了解操作系统原理学习起来就会更快。 如果学习驱动那么需要有原来单片机或者ARM的基础更好 你可以先从熟悉系统开始,在写一些应用程序编译运行,在逐步移 ...…

查看全部问答>

【MSP430共享】基于全球移动通信系统网络的远程数据监控系统的设计

介绍了一种基于全球移动通信系统 ( G S M )网络的远程数据监控系统。硬件部分包括 T C 3 5 模块、单片机 M S P 4 3 0 F 1 4 7 、电平转换电路、传感器和电源,系统采用单片机控制 T C 3 5 模块,在软件设计方面,通过把与短消息服务有关的 A T ...…

查看全部问答>