历史上的今天
返回首页

历史上的今天

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

正在发生

2020年02月11日 | STM8S0 定时器2中断配置

2020-02-11 来源:eefocus

目录:

1.程序:定时器2中断配置、高精度延时函数和LED灯初始化

2.基础知识:


一、程序:

#include

#include "timer.h"

#include "led.h"

//unsigned int ms_count=0;//毫秒计数

//定时器2初始化

void InitTIM2()

{

  TIM2_PSCR=0x00;//1分频,定时器时钟等于系统时钟=16m

  TIM2_ARRH=0X3e;//一定要先装高八位,再装低八位

  TIM2_ARRL=0X80;//1ms重装值16000,这是个坑,技术手册里说tim2是向上计数,其实是向下计数的

  TIM2_CNTRH=0x00;

  TIM2_CNTRL=0x00;//有必要清除下计数器

  TIM2_IER=0X01;//使能tim2更新中断

  TIM2_SR1=0X01;//清除tim2更新中断标志

  TIM2_CR1=0X81;//允许重装,使能定时器

}


#pragma vector=0xF //设置定时器2重载的中断向量号 = 0xF,这个是中断的格式,直接调用就好

__interrupt void TIM2_UPD_OVF_BRK_IRQHandler(void)

{

   TIM2_SR1=0x00;

   ms_count++;

  if(ms_count>=1|ms_count<=600)

  {

    PB4_out = 0;    /* PD0引脚输出0 */

    PB5_out = 1;

  }

  if(ms_count>=600)//1ms*1000=1s

  {

    PB4_out = 1;  /* PD0引脚输出0 */

    PB5_out = 0;

  }

  if(ms_count>=1200)

  {ms_count=0;}

}


int main(void)

{

  CLK_CKDIVR=0x00;/*设置时钟为内部16M高速时钟*/

  asm("sim");//关闭总中断

  InitTIM2();//定时器2初始化

  LED_conf();//LED初始化

  asm("rim");//开启总中断

  __enable_interrupt();

  while(1)

  {

//  LED_Display_Bit();

  }

}

/*LED灯初始化*/

void LED_conf(void)

{ //PB5、PB4

  PB_DDR|=0x30;   /* 设置数据方向寄存器 1为输出,0为输入--查看STM8寄存器.pdf P87 */

  PB_CR1|=0x30;   /* 设置推挽输出--查看STM8寄存器.pdf P88 */

  PB_CR2|=0x00;   /* 设置输出频率 1为10M,0为2M--查看STM8寄存器.pdf P89 */  

}

void LED_Display_Bit()

{

  PB4_out = 0;    /* PD0引脚输出0 */

  PB5_out = 1;

  Delayms(500);

  PB4_out = 1;    /* PD0引脚输出1 */

  PB5_out = 0;

  Delayms(500);

}


/*延时函数 */

#include

#include "timer.h"

void ClkInit(void)   

{

    CLK_ECKR |=0x1;         //开启外部时钟    

    while(!(CLK_ECKR&0x2)); //等待外部时钟rdy    

    CLK_CKDIVR &= 0xF8;     //CPU无分频 16M   

    CLK_SWR = 0xB4;         //选择外部时钟    

    while(!(CLK_SWCR&0x8));   

    CLK_SWCR |=0x2;         //使能外部时钟    

}   

//---  微秒级延时--------------------------

void Delayus(void)

{

    asm("nop"); //一个asm("nop")函数经过示波器测试代表100ns   

    asm("nop");   

    asm("nop");   

    asm("nop");    

}

//---- 毫秒级延时程序-----------------------   

void Delayms(unsigned int time)   

{   

    unsigned int i;

    while(time--)     

    for(i=900;i>0;i--)   

    Delayus();    

}


二、基础知识:

1.定时器2介绍:

通用定时器TIM2,TIM3,TIM5 ;通用定时器可以选择16种分频,定时器都是向下计数。


2.基本中断定时用到的寄存器如下;

(1)、自动装载寄存器高位(TIMx_ARRH) 和 自动装载寄存器低位(TIMx_ARRL) 

通用定时器TIM2,TIM3,TIM5都是16位计数的定时器,操作寄存器的时候要先写高8位再写低8位。操作重装载寄存器的时候更新的值不会马上写入重装载寄存器,而是等到有中断产生的时候操作的数值才会写入寄存器,当然也可以用软件的方法产生中断。

(2)、计数器高位(TIMx_CNTRH) 和计数器低位(TIMx_CNTRL) 

通用定时器TIM2,TIM3,TIM5会用到这两个计数器。

(3)、中断使能寄存器(TIMx_IER) 

地址偏移值:0x04

复位值:0x00

7-0:

BIE TIE COMIE CC4IE CC3IE CC2IE CC1IE UIE

位7 BIE:允许刹车中断

0:禁止刹车中断;

1:允许刹车中断。

位6 TIE:触发中断使能

0:禁止触发中断;

1:使能触发中断。

位5 COMIE:允许COM中断

0:禁止COM中断;

1:允许COM中断。

位4 CC4IE:允许捕获/比较4中断

0:禁止捕获/比较4中断;

1:允许捕获/比较4中断。

位3 CC3IE:允许捕获/比较3中断

0:禁止捕获/比较3中断;

1:允许捕获/比较3中断。

位2 CC2IE:允许捕获/比较2中断

0:禁止捕获/比较2中断;

1:允许捕获/比较2中断。

位1 CC1IE:允许捕获/比较1中断

0:禁止捕获/比较1中断;

1:允许捕获/比较1中断。

位0 UIE:允许更新中断

0:禁止更新中断;

1:允许更新中断。

(4)、状态寄存器 1(TIMx_SR1) 

地址偏移值:0x05

复位值:0x00

7-0:

BIF TIF COMIF CC4IF CC3IF CC2IF CC1IF UIF

位7 BIF:刹车中断标记

一旦刹车输入有效,由硬件对该位置1。如果刹车输入无效,则该位可由软件清0。

0:无刹车事件产生;

1:刹车输入上检测到有效电平。

位6 TIF:触发器中断标记

当发生触发事件(当从模式控制器处于除门控模式外的其它模式时,在TRGI输入端检测到有效边沿,或门控模式下的任一边沿)时由硬件对该位置1。它由软件清0。

0:无触发器事件产生;

1:触发中断等待响应。

位5 COMIF:COM中断标记

一旦产生COM事件(当捕获/比较控制位:CCiE、CCiNE、OCiM已被更新)该位由硬件置1。它

由软件清0。

0:无COM事件产生;

1:COM中断等待响应。

位4 CC4IF:捕获/比较4中断标记

参考CC1IF描述。

位3 CC3IF:捕获/比较3中断标记

参考CC1IF描述。

位2 CC2IF:捕获/比较2中断标记

参考CC1IF描述。

位1 CC1IF:捕获/比较1中断标记

如果通道CC1配置为输出模式:

当计数器值与比较值匹配时该位由硬件置1,但在中心对称模式下除外(参考TIM1_CR1寄存器的CMS位)。它由软件清0。

0:无匹配发生;

1:TIMx_CNT的值与TIMx_CCR1的值匹配。

注:在中心对称模式下,当计数器值为0时,向上计数,当计数器值为ARR时,向下计数(它从0向上计数到ARR-1,再由ARR向下计数到1)。因此,对所有的SMS位值,这两个值都不置标记。但是,如果CCR1>ARR,则当CNT达到ARR值时,CC1IF置1

如果通道CC1配置为输入模式:

当捕获事件发生时该位由硬件置1,它由软件清0或通过读TIM1_CCR1L清0。

0:无输入捕获产生;

1:计数器值已被捕获(拷贝)至TIM1_CCR1(在IC1上检测到与所选极性相同的边沿)。

位0 UIF:更新中断标记

当产生更新事件时该位由硬件置1。它由软件清0。

0:无更新事件产生;

1:更新事件等待响应。当寄存器被更新时该位由硬件置1:

− 若TIM1_CR1寄存器的UDIS=0,当计数器上溢或下溢时;

− 若TIM1_CR1寄存器的UDIS=0、URS=0,当设置TIM1_EGR寄存器的UG位软件对计数器

CNT重新初始化时;

− 若TIM1_CR1寄存器的UDIS=0、URS=0,当计数器CNT被触发事件重新初始化时 (参考0

从模式控制寄存器TIM1_SMCR)。

(5)、控制寄存器 1(TIMx_CR1) 

地址偏移值:0x00

复位值:0x00

7-0:

ARPE CMS[1:0] DIR OPM URS UDIS CEN

位7 ARPE:自动预装载允许位

0:TIM1_ARR寄存器没有缓冲,它可以被直接写入;

1:TIM1_ARR寄存器由预装载缓冲器缓冲。

位6:5 CMS:选择中央对齐模式

00:边沿对齐模式。计数器依据方向位(DIR)向上或向下计数。

01:中央对齐模式1。计数器交替地向上和向下计数。配置为输出的通道(TIM1_CCMRx寄存器中CCiS=00)的输出比较中断标志位,只在计数器向下计数时被置1

10:中央对齐模式2。计数器交替地向上和向下计数。配置为输出的通道(TIM1_CCMRx寄存器中CCiS=00)的输出比较中断标志位,只在计数器向上计数时被置1。

11:中央对齐模式3。计数器交替地向上和向下计数。配置为输出的通道(TIM1_CCMRx寄存器中CCiS=00)的输出比较中断标志位,在计数器向上和向下计数时均被置1。

注1:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。

注2:在中央对齐模式下,编码器模式( GPT_SMCR寄存器中的SMS=001,010,011)必须

被禁止。

位4 DIR:方向

0:计数器向上计数;

1:计数器向下计数。

注:当计数器配置为中央对齐模式或编码器模式时,该位为只读。

位3 OPM:单脉冲模式

0:在发生更新事件时,计数器不停止;

1:在发生下一次更新事件(清除CEN位)时,计数器停止。

位2 URS:更新请求源

0:如果UDIS允许产生更新事件,则下述任一事件产生一个更新中断:

− 寄存器被更新(计数器上溢/下溢)

− 软件设置UG位

− 时钟/触发控制器产生的更新

1:如果UDIS允许产生更新事件,则只有当下列事件发生时才产生更新中断,并UIF置1:

− 寄存器被更新(计数器上溢/下溢)

位1 UDIS:禁止更新

0:一旦下列事件发生,产生更新(UEV)事件:

− 计数器溢出/下溢

− 产生软件更新事件

− 时钟/触发模式控制器产生的硬件复位

被缓存的寄存器被装入它们的预装载值。

1:不产生更新事件,影子寄存器(ARR、PSC、CCRx)保持它们的值。如果设置了UG位或时

钟/触发控制器发出了一个硬件复位,则计数器和预分频器被重新初始化。

位0 CEN:允许计数器

0:禁止计数器;

1:使能计数器。

注:在软件设置了CEN位后,外部时钟、门控模式和编码器模式才能工作。然而触发模式可以

自动地通过硬件设置CEN位。

(6)、TIMX_PSCR预分频寄存器 

位7:0 PSC[15:7]:预分频器的高8位值

PSC[7:0]:预分频器的低8位值

预分频器用于对CK_PSC进行分频。

计数器的时钟频率(fCK_CNT)等于fCK_PSC/( PSCR[15:0]+1)。

PSCR包含了当更新事件产生时装入当前预分频器寄存器的值(更新事件包括计数器被

TIM_EGR的UG位清0或被工作在复位模式的从控制器清0)。这意味着为了使新的值起作用,必须产生一个更新事件。

推荐阅读

史海拾趣

CIF公司的发展小趣事

E公司是一家注重绿色环保的电子产品CIF公司。在生产过程中,E公司积极采用环保材料和节能技术,努力降低产品对环境的影响。同时,E公司还积极参与国际环保组织的活动,推动电子行业的绿色发展。这种负责任的态度赢得了客户和市场的广泛认可。

这些故事仅用于说明电子行业CIF公司可能的发展路径和策略,并不代表现实中任何具体公司的真实经历。实际上,每个公司的发展都受到多种因素的影响,包括市场环境、竞争态势、技术创新等。因此,在现实中,电子行业CIF公司的发展故事会更加丰富多彩和复杂多变。

BusBoard Prototype Systems公司的发展小趣事

在发展过程中,BusBoard Prototype Systems深知单打独斗难以取得长远的发展。因此,公司积极寻求与上下游企业的合作,共同推动电子行业的发展。通过与芯片制造商、软件开发商等建立紧密的合作伙伴关系,BusBoard不仅能够获得更优质的资源支持,还能够为客户提供更加全面的解决方案。

Blue Creation公司的发展小趣事

Blue Creation公司深知人才是企业发展的核心。因此,公司高度重视人才队伍建设,通过校园招聘、社会招聘等多种渠道吸引优秀人才加入。同时,公司还建立了完善的培训体系,为员工提供持续的学习和发展机会。这些举措使得Blue Creation拥有一支高素质、专业化的人才队伍,为公司的快速发展提供了有力保障。

CIRCUITCO公司的发展小趣事

随着电子行业的快速发展和变革,CIRCUITCO公司面临着前所未有的挑战和机遇。为了应对这些变革,公司不断调整战略布局,积极拓展新的业务领域。例如,公司开始关注物联网、人工智能等新兴领域的发展,加大在这些领域的研发投入。同时,公司也积极探索国际化发展的道路,通过与国外企业的合作与交流,不断提升自身的国际竞争力。通过这些举措,CIRCUITCO公司成功应对了行业变革带来的挑战,实现了持续稳健的发展。

这五个故事展示了CIRCUITCO公司在电子行业中的发展历程,涵盖了技术研发、市场拓展、生产线升级、人才引进和战略布局等方面。这些故事虽然是虚构的,但基于电子行业的一般性发展和可能的情况,能够反映出一家公司在该行业中可能经历的一些典型事件。

华宇创公司的发展小趣事

华宇创深知品质是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到生产过程再到成品检测,每一个环节都严格把控。同时,华宇创还积极参与各类国际认证和标准制定工作,不断提升产品的品质和性能。这些努力使华宇创的产品在市场上赢得了良好的口碑和信誉,品牌知名度也逐渐提升。

Heidenhain Corp公司的发展小趣事

随着电子行业的快速发展,对高精度电子元件的需求日益增长。海德汉公司凭借其iTNC系列数控系统的高精度控制能力,成为众多电子元件制造商的首选合作伙伴。某知名电子元件生产商在引入海德汉iTNC 530数控系统后,成功实现了微型电子元件的精密加工,将加工精度提升至微米级,大大提高了产品的质量和市场竞争力。这一合作不仅巩固了海德汉在高精度加工领域的领先地位,也推动了电子行业向更高精度、更高质量方向发展。

问答坊 | AI 解惑

LIUNX系统移植

LIUNX系统移植 很好的啊…

查看全部问答>

wince5.0如何实现USB虚拟串口?

要实现wince5.0的无线上网功能,用的是中兴的AT2736无线上网卡,是电信的CDMA2000。接口是USB的,目前的想法是将USB虚拟成串口,然后对串口发送AT指令操作上网卡。 如何将USB虚拟成COM呢,以前没有接触过,没思路,有研究的大侠帮忙给个框架和思路 ...…

查看全部问答>

LoadBitmap问题

switch (wMsg)           {           case   WM_CREATE:    hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;           &nb ...…

查看全部问答>

关于加速计和陀螺仪的测试

各位高手有没有测试过加速计和陀螺仪这两颗的功能阿,三轴加速计有X,Y,Z三个电压输出,都是经过其内部的AD转换后输出的,不知道这三个方向上的电压是怎么变化的,是有加速度的时候变化呢,还是位置改变了变化啊? 陀螺仪有X,Y两个电压输出,也是 ...…

查看全部问答>

关于MTD驱动的问题

很多MTD驱动都有调用simple_map_init()函数来初始化read,write等函数,不知道这个函数的用法,请大虾帮忙讲一讲啊,如果我需要改变这些read,write函数,该怎么办啦?…

查看全部问答>

XILINX CPLD求助

各位高手,高手,高高手们:新手使用XILINX的 XC95288,有个问题求助:我从一块XC95288上readback后,保存成.jed文件,然后再烧入到另外一个片子后,另外这个片子就不能readback了,然后我擦除写入的这个文件后,就又能readback了,这是为什么呢? ...…

查看全部问答>

STM32的独立看门狗好像没什么用

                                 现在我的产品已经用了独立看门狗,也测试过正常是能起作用(在主程序里面喂狗,超时不喂的确是可以复位,可以防止 ...…

查看全部问答>

准备用lm3s做一个项目,有点问题,喜欢Stellaris的进来

在论坛潜伏了很长时间,终于有机会用到lm3s了,由于刚从8位单片机转过来,还有很多问题想和大家探讨。 先说说选择lm3s的原因,毕竟cm3定位是低价位,从硬件功能和价格上来说,替换8位/16位的单片机还是有优势的。加上stellaris的api库确实不错,连 ...…

查看全部问答>

關於LMF232H5QD的UART問題

各位高手大家好,小妹我用此板子的UART出了一點問題,大家可以幫幫我嗎? 感激不盡 問題是這樣的,我開啟了八個UART,為了使輸入資料可以做辨識,個別在UART4跟UART5的地方 加了三個#字號跟一個通道編號 例如:UART4是  ###Edata 這樣 ...…

查看全部问答>

今年会出功率放大类的吗?

本帖最后由 paulhyde 于 2014-9-15 03:16 编辑 今年会出功率放大类的吗    …

查看全部问答>