历史上的今天
返回首页

历史上的今天

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

正在发生

2021年11月10日 | STM8L的TIM4定时功能详解

2021-11-10 来源:eefocus

TIM4是STM8最简单的定时器,忽略掉级联同步的功能,TIM4就只具有定时功能.非常适合刚刚接触STM8定时器的初学者学习.
从上图可以看到,TIM4由一个分频器,自动重装寄存器和计数器组成,结构非常简单.
系统主时钟fsysclk经TIM4分频器分频后,提供给TIM4作为计数时钟.
TIM4是一个向上计数的定时器.从0开始计数,当计数到与自动重载寄存器的值相等时,产生溢出,重新从0开始计数.

定时器溢出时,如果TIM4_CR1中的UDIS位为0,则产生一个更新事件,若此时打开了TIM4的中断,则进入中断.如果溢出时,UDIS为1,则不会进入中断.


本文利用TIM4的定时功能,实现LED闪烁.TIM4周期性的进入中断,翻转LED控制IO,控制LED闪烁.
在程序中有对定时时间计算的过程,这里再重复一遍.
系统时钟频率默认为:16M/ 2^3 =2M
本例程中TIM4的分频器分频值为10,则最终提供给TIM4的频率为:2M/2^10=2M/1024=1953.125Hz.
本例程TIM4的重装值为200,所以TIM4的溢出频率为:1953.125Hz/200=9.76Hz.
溢出周期为:1000ms/9.76=102.4ms
所以每隔102ms,会进入一次定时器中断.
下图是,使用逻辑分析仪,测到的LED的控制IO的输出波形,可以看到,LED亮和灭的时间都为102.8ms.与理论计算值一致,误差是由于使用的是内部时钟,这个时钟不准.



/*硬件连接*/


// PC7---->LED


/****************************************************************************************


*开发环境:IAR for stm8 v6.5.3


*硬件平台:STM8L-DISCOVERY


*功能说明:配置TIM4定时器,实现定时进入TIM4中断,反转LED电平,测量LED的IO得到频率,与理论计算时间比对,验证定时功能


*作    者:茗风


****************************************************************************************/


#include"iostm8l152c6.h"


#include"stdint.h"


/******************************************************************************************************


*  名    称:void GPIO_Init(void)


*  功    能:初始化PC7为高速推挽输出


*  入口参数:无


*  出口参数:无


*  说    明:测量系统时钟频率的IO,测量到的频率有定时器配置决定


*  范    例:无


******************************************************************************************************/


void GPIO_Init(void)


{


   PC_CR1_C17  =1;//推挽输出


   PC_CR2_C27  =1;//高速输出


   PC_DDR_DDR7 =1;//PC4输出


//   PC_ODR_ODR7 =0;//输出低电平


}


/******************************************************************************************************


*  名    称:void TIMER4_Init(void)


*  功    能:stm8的TIM4定时器初始化


*  入口参数:无


*  出口参数:无


*  说    明:TIM4被此函数配置为204ms进入一次TIM4中断,由于使用的是内部RC时钟,实际时间会有一定偏差


*  范    例:无


******************************************************************************************************/


void TIMER4_Init(void)


{


  //-------打开TIM4外设时钟-------


  CLK_PCKENR1_PCKEN12=1;//打开定时器1时钟


  


  //----禁用预装载寄存器----


  TIM4_CR1_ARPE =0;//不经过缓存,分频值和重装值立即被写入.


  //除非需要频繁的在定时器运行时,改变分频值和重装值,否则没必要使用预装载寄存器


  


  //------设置TIM4时钟分频值------


  TIM4_PSCR_PSC=10;//分频值  2M/2^10=2M/1024=1953.125Hz



  


  //-重装值,TIM4从0计数到此值,发生溢出-


  TIM4_ARR=200;//自动重装值    1953.125Hz/200=9.76HZ


  //1000ms/9.76=102ms


  //TIM4定时器每隔102ms进入一次中断


  //本程序,每次进入中断后会反转接LED的IO电平,所以LED闪烁周期为2*102ms=204ms


  //LED闪烁频率为 1000ms/204ms=4.9Hz


  


  //读者可以改变ARR值和PSC值,根据上面计算过程,验证定时器的这种功能


  


  TIM4_CR1_URS=1;//仅当计数器溢出时才发生中断请求


  TIM4_CR1_UDIS=0;//允许更新中断



  TIM4_CR1_CEN=1;//开启计数器


  TIM4_IER_UIE=1;// update interrupt enable


}


/******************************************************************************************************


*  名    称:int main(void)


*  功    能:通过PC4输出选择的时钟


*  入口参数:无


*  出口参数:无


*  说    明:因为STM8l discovery没有接外部高速晶振,所以没办法输出HSE,不要


*  范    例:无


******************************************************************************************************/


void main( void )


{


  GPIO_Init();


  TIMER4_Init();


  asm("rim");               //开启全局中断


  while(1)


  {


  //   asm("wfi");


  }


}


#pragma vector=TIM4_UIF_vector


__interrupt void TIM4_UIF_ISR (void)


{


   PC_ODR_ODR7 ^=1;//控制LED1的亮灭


   TIM4_SR1_UIF=0;//清除中断标志位


}


推荐阅读

史海拾趣

常州能动(ENDRIVE)公司的发展小趣事

随着环保意识的日益增强,常州能动积极响应国家政策,加大环保投入。公司引进了先进的环保设备和技术,对生产过程中的废弃物进行无害化处理。同时,公司还注重节能减排和资源循环利用,推动公司向绿色、低碳、可持续发展的方向迈进。这些努力不仅提升了公司的社会形象,也为公司的长远发展打下了坚实基础。

Elec & Eltek公司的发展小趣事

Elec公司成立于20世纪初,最初只是一家小型电子元件生产商。创始人李明(化名)对电子技术有着深厚的兴趣和独到的见解。在他的带领下,Elec公司逐步研发出具有竞争力的电阻、电容等基础元件,并逐渐在市场中崭露头角。随着电子技术的不断发展,Elec公司敏锐地捕捉到半导体技术的潜力,开始投入巨资研发。经过数年的努力,Elec公司成功研发出具有自主知识产权的半导体芯片,这一突破让Elec公司在电子行业中声名鹊起。

B&K Precision公司的发展小趣事

在1948年,当美国民众开始大量购买电视机时,电视机的维修需求也随之增加。芝加哥的企业家卡尔·科恩(Carl Korn)和菲利普·班(Philip Ban)注意到了这一市场机会。他们发现,当时缺乏能够轻松测试电视组件的设备,于是决定自己动手制作。两位创业者从车库起步,开始制造自己的测试设备,并成立了中央电视服务公司。他们的业务迅速扩展,开始向其他电视维修店销售CRT再生器和真空管测试仪,为公司的后续发展奠定了坚实的基础。

达方(DARFON)公司的发展小趣事

面对日益严峻的环境问题,达方电子积极响应国家号召,将绿色发展理念融入公司战略。公司加大了对环保技术的研发力度,推出了多款绿色、节能的产品。同时,达方电子还积极参与公益事业,为社会做出了积极贡献。这一阶段的努力,不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

Alps Alpine Co Ltd公司的发展小趣事

为了进一步拓展市场份额,达方电子开始在全球范围内布局生产基地和研发中心。同时,公司加强了对供应链的管理,确保原材料的稳定供应和产品质量的持续提升。这一阶段的努力,使达方电子在全球电子行业中的地位得到了进一步提升。

FARNELL公司的发展小趣事

FARNELL公司成立于1937年,由创始人在英国利兹创建。起初,公司专注于电子元器件的分销,凭借其优质的产品和可靠的供货能力,逐渐在电子行业中崭露头角。在那个时代,电子产品正处于快速发展阶段,FARNELL公司凭借其前瞻性的市场洞察力和灵活的供应策略,赢得了众多客户的信赖。

问答坊 | AI 解惑

matlab信号处理详解

《Matlab信号处理详解》详细介绍Matlab在数字信号处理中的应用实例,各种数字滤波器的设计,包含源程序…

查看全部问答>

H-FLASHER查询不到Flash怎么回事啊。

我用的LPC2378,使用H-JTAG几乎都可以查询到芯片,再用H-FLASHER时大多数只能查到\"Target:ARM7TDMI-S Little-Endian\",而在\"Flash:ERROR\"。在H-FLASHER里选芯片选过LPC 2378和LPC2378_A都不好用。我的并口设置的是SPP模式。…

查看全部问答>

高性能低成本S3C2416微型ARM9嵌入式模块

◆ 全面替代S3C2440,且性价比更优 ◆ 模块背面无任何器件,方便直接贴焊或通过插针与底板相连 ◆ 商业级(0°~70°)、工业级(-40°~85°) ◆ 微尺寸(40x40x4mm)、低价格(千片价…

查看全部问答>

vs2005 用VC++建立的基于对话框的智能设备MFC应用程序,当包含afxinet.h头文件时,出现下面的错误,是什么原因呀?高手进,在线等之

如题:我想在winCE里写一个FTP上传文件的程序,vs2005 用VC++建立的基于对话框的智能设备MFC应用程序,当包含afxinet.h头文件时,出现下面的错误,是什么原因呀?高手进,在线等之 错误        1        ...…

查看全部问答>

usb mass storage 问题

MARVELL PXA310+WM6.0(littleton的BSP)下添加usb mass storage 功能: 以便设备连接到PC上时,能使SD卡像U盘一样在“我的电脑”里呈现出一个盘符, 不通过ActiveSync而是通过usb直接访问。 现在注册表设置好了(99%没错),usbmsfn.dll也已经 ...…

查看全部问答>

pwm电路控制的直流电机

做了个PWM电路来控制直流电机,用C语言编译后,在keil中运行时有5个警告,不知错在何地方,请内行指点下,本人不胜感激!见原图: …

查看全部问答>

初学嵌入开发,请问看哪些书籍会比较合适

大家好,我是初学嵌入开发,请问看哪些书籍会比较合适。 谢谢。 …

查看全部问答>

关于assert的错误

在有些时候,建好工程后调试会出现assert的错误,这个错误不知道是怎么回事,好象跟设置和程序都没关系.请问这个错误怎么处理的…

查看全部问答>

跪求MSP430的开发实例

小弟初来乍到,是MSP430的初学者,跪求适合初学者做的案例来作参考,请各位大神多多照顾 …

查看全部问答>

最菜鸟的msp430 1602 三位数自加程序

最菜鸟的msp430 1602 三位数自加程序 刚入门的菜鸟们请借鉴!!…

查看全部问答>