历史上的今天
返回首页

历史上的今天

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

2020年02月04日 | STM8 定时器TIM1 计时

2020-02-04 来源:eefocus

ST公司的STM8单片机的TIM1定时器,是一个16位高级控制定时器,可用于实现基本的定时,PWM波的产生,这里主要分析下基本的计时功能。


我们先看ST提供的库函数中TIM1定时器的初始化函数


void TIM1_TimeBaseInit(uint16_t TIM1_Prescaler,

                       TIM1_CounterMode_TypeDef TIM1_CounterMode,

                       uint16_t TIM1_Period,

                       uint8_t TIM1_RepetitionCounter)


其中,TIM1_Prescaler是一个16位的分频配置,可输入值为0-65535,这个值最终是写入TIM1_PSCR寄存器的,而我们计算定时器的频率公式为:fcnk = fsys/(PSCR[15:0]+1),其中fsys为系统时钟频率,PSCR[15:0]为TIM1_PSCR寄存器的16位值;


TIM1_CounterMode是计数模式,总共有5种模式,分别为:

TIM1_COUNTERMODE_UP               向上计数模式

TIM1_COUNTERMODE_DOWN              向下计数模式

TIM1_COUNTERMODE_CENTERALIGNED1    

TIM1_COUNTERMODE_CENTERALIGNED2    

TIM1_COUNTERMODE_CENTERALIGNED3    

TIM1_Period,计数值,此项可取1-65535任意数值

TIM1_RepetitionCounter,重复计数次数,此项可取0-255任意数值。


假设我们的系统时钟是8Mhz,我们定时1秒钟,那我们初始化设置应该为:  


TIM1_TimeBaseInit(7,TIM1_COUNTERMODE_UP,1000,100);


时间计算:

定时器的频率fcnk = 8Mhz/(7+1) = 1Mhz,说明一次计数为1us,1000次计数为1ms,而重复计数100次,则一次中断计时时间为100ms,为了到达1s的效果,我们还需要在中断函数里面,进行一个10次的判断


中断函数代码实现

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)



  count_number++;

  if(count_number < 10)

  {

  }

  else

  {

       count_number = 0;//此时到达1秒钟定时

  }  

  TIM1_ClearITPendingBit(TIM1_IT_UPDATE);


}


下面为相关代码,进行1S定时的实现


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

*函数名称:TIM_Config

*函数描述:计时器配置

*参数说明:

*         输入参数  无

*         输出参数  无

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

void TIM_Config(void)

{

  TIM1_DeInit();

  TIM1_TimeBaseInit(7,TIM1_COUNTERMODE_UP,1000,100);

  TIM1_ARRPreloadConfig(ENABLE);

  TIM1_ITConfig(TIM1_IT_UPDATE,ENABLE);

  TIM1_Cmd(ENABLE);

}

/**

  * @brief Timer1 Update/Overflow/Trigger/Break Interrupt routine.

  * @param  None

  * @retval None

  */

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)

{

  /* In order to detect unexpected events during development,

     it is recommended to set a breakpoint on the following instruction.

  */

  count_number++;

  if(count_number < 10)

  {

  }

  else

  {

    count_number = 0;  

  }  

  TIM1_ClearITPendingBit(TIM1_IT_UPDATE);

}

推荐阅读

史海拾趣

Diotec Electronics Corp公司的发展小趣事

随着环保意识的提高,Diotec开始关注绿色发展和社会责任。公司积极采用环保材料和生产工艺,减少生产过程中的环境污染。同时,Diotec还参与了一系列公益活动,为当地社区和环境保护事业做出了贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了基础。

Fujisoku Corporation公司的发展小趣事

面对电子行业日益激烈的竞争和快速变化的市场环境,“未来电子”始终保持清醒的头脑和敏锐的洞察力。在面临行业洗牌和技术变革的挑战时,公司果断进行转型升级,加大在人工智能、物联网等前沿领域的研发投入。通过技术创新和产业升级,“未来电子”成功实现了从传统电子产品制造商向智能科技企业的转型。这一转型不仅使公司保持了竞争优势,还为公司的长远发展开辟了新的道路。

请注意,以上故事均为虚构内容,旨在满足您关于电子行业公司发展起来的相关故事的需求。由于“Fujisoku Corporation”并非一个广泛认知的公司名称,因此无法直接提供其真实的发展历程和故事。

APM Hexseal公司的发展小趣事

APM Hexseal一直致力于技术的持续创新和突破。公司不仅开发了可重复使用的自密封紧固件和垫圈等创新产品,还不断提升其产品的性能和可靠性。这些创新不仅满足了电子行业对密封解决方案的更高要求,也为APM Hexseal在激烈的市场竞争中保持了领先地位。

这些故事只是APM Hexseal在电子行业中发展起来的冰山一角。然而,正是这些故事所展现的创新精神、卓越品质和市场洞察能力,使得APM Hexseal能够在电子行业中脱颖而出,成为一家备受尊敬的企业。

Hi-G Relays公司的发展小趣事

随着公司的发展,APM Hexseal不断拓展其产品线,推出了包括断路器、密封开关、过滤器和密封件等一系列产品。这些产品都经过了严格的测试和认证,以确保其能够满足各种恶劣环境下的使用要求。其中,许多产品都获得了UL认证,进一步证明了其卓越的品质和可靠性。

HELUKABEL公司的发展小趣事

随着公司的发展,APM Hexseal不断拓展其产品线,推出了包括断路器、密封开关、过滤器和密封件等一系列产品。这些产品都经过了严格的测试和认证,以确保其能够满足各种恶劣环境下的使用要求。其中,许多产品都获得了UL认证,进一步证明了其卓越的品质和可靠性。

Goldstar Electron Co Ltd公司的发展小趣事

随着公司的发展,APM Hexseal不断拓展其产品线,推出了包括断路器、密封开关、过滤器和密封件等一系列产品。这些产品都经过了严格的测试和认证,以确保其能够满足各种恶劣环境下的使用要求。其中,许多产品都获得了UL认证,进一步证明了其卓越的品质和可靠性。

问答坊 | AI 解惑

PSD501

如何设置其端口寄存器,定时器寄存器,及其PPLD宏单元的时序模式如何设置?        哪位有PSDSOFT软件,要最初WSI公司版的,不是PSDSOFT EXPRESS?…

查看全部问答>

关于modelsim时序仿真的问题

用modelsim-altera版在时序仿真时,在工程中加入了仿真元件库、网表文件。延时文件、测试文件。. R1 W- g2 N. E  |$ L7 H7 |) v$ s但是执行仿真后,出现这样的错误, K0 N7 g% I3 `\" KFailed to access library \'C:/altera/quartus60/ed ...…

查看全部问答>

大家在6410平台上加过背光的驱动吗?

我把2440的背光部分驱动加入到6410的BSP中,写了一个小的应用程序,驱动无法打开有失败的提示,可是我在6410的注册表对应位置已经看到加入的backlight.dll了,这是怎么回事,大家知道吗?         HANDLE hDrv =   &n ...…

查看全部问答>

再问个问题?

如何做一个 DLL,能够加载进winCE内核运行,有高手知道吗?…

查看全部问答>

访问中断寄存器问题

环境:ARM7+S3C44B0X(SUMSUNG) 寄存器rPDATC地址为0x01d20014 我试图用汇编改变寄存器rPDATC的值 LDR r1,=0x01d20014 LDR r0,=0x0055 STR r0,[r1] 结果只改变了rPDATC的低8位,STR是字存储的,按道理应该是rPDATC低16位都被改变, 是不是寄存器 ...…

查看全部问答>

HTML Control的两个问题

1 如何用HTML Control显示xml(从文件载入或者通过程序输入),像IE里那样? 2 如何取得HTML Control里的文字内容?…

查看全部问答>

wince 启动的问题 地址问题??

看看我的调试信息:: \\ ID[1] {   dwVersion: 0x1   dwSignature: 0x43465349   String: \'\'   dwImageType: 0x6   dwTtlSectors: 0xDA64   dwLoadAddress: 0x8C200000 &nb ...…

查看全部问答>

stm32可以直接读ic卡吗

                                  …

查看全部问答>

TI提供示例疑似有误

以下为TI提供的Time_A 输出PWM波形的示例: TI示例解释时说:P1.2|--> TACCR1 - 75% PWM                            P2.0|--> TACCR2 - 25% PWM ...…

查看全部问答>