历史上的今天
返回首页

历史上的今天

今天是:2025年03月15日(星期六)

2020年03月15日 | STM8定时器1的四种触发同步说明

2020-03-15 来源:eefocus

这里说明下,我这边的最小系统版的芯片型号是105K系列的,定时器部分没有TIM5TIM6,只有TIM4,所以不讲解TIM1与TIM5/6的同步,想要了解这部分可以看官方手册。


TIM1的计数器使用三种模式与外部的触发信号同步:标准触发模式、复位触发模式和门控触发模式。


标准触发模式:

说白了就是使用外部信号触发内部计数器启动,然而如何配置呢,看手册:

在这里插入图片描述
在这里插入图片描述

下面根据官方给出的步骤配置寄存器:


void Tim1_trigger_standard_mode_Init(void){//tim1标准触发模式初始化

  

   PC_DDR_DDR2 =0;//输入

  //PD_CR1_C14  =0;//浮空输入

  PC_CR1_C12  =1;//上拉输入

  PC_CR2_C22  =0;//禁止外部中断功能


  TIM1_CCMR2_CC2S=0x01;//CC2通道被配置为输入, IC2映射在TI2FP2上;

  TIM1_CCMR2_OC2M=0x00;//无滤波器,以fMASTER采样

  TIM1_CCER1_CC2P=0;//捕获发生在TI2F的上升沿

  TIM1_SMCR_SMS=0x06;//触发模式:计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控的

    TIM1_SMCR_TS=0x06;//选定TI2作为输入源

  TIM1_IER_TIE=1;//触发中断使能

  Send_String("rntim1标准触发模式初始化完成rn");

}


#pragma vector=TIM1_OVR_TIF_vector//计数上升沿触发中断

  __interrupt void Tim1_trigger_standard_mode_IRQHandler(void){

    

    if(TIM1_SR1_TIF){

        

        TIM1_SR1_TIF=0;

         Send_String("rn");

        Send_String("计数触发中断rn");


    }

    

  }


串口输出:

在这里插入图片描述

复位触发模式:

这个模式就是使计数器清零:

在这里插入图片描述

void Tim1_Trigger_reset_mode_Init(void){//tim1复位触发模式初始化

  

   PC_DDR_DDR1 =0;//输入

  //PD_CR1_C14  =0;//浮空输入

  PC_CR1_C11  =1;//上拉输入

  PC_CR2_C21  =0;//禁止外部中断功能


 TIM1_CCMR1_CC1S=0x01;//CC1通道被配置为输入, IC1映射在TI1FP1上;

  TIM1_CCMR1_OC1M=0x00;//无滤波器,以fMASTER采样

  TIM1_CCER1_CC1P=0;//捕获发生在TI1F的上升沿

  TIM1_SMCR_SMS=0x04;//复位模式:

    TIM1_SMCR_TS=0x05;//选定TI1作为输入源

    TIM1_CR1_CEN=1;//使能计数器

  TIM1_IER_TIE=1;//触发中断使能

  Send_String("rntim1复位触发模式初始化完成rn");

}


#pragma vector=TIM1_OVR_TIF_vector//计数上升沿触发中断

  __interrupt void Tim1_trigger_standard_mode_IRQHandler(void){

    

    if(TIM1_SR1_TIF){

        

        TIM1_SR1_TIF=0;

         Send_String("rn");

        Send_String("计数触发中断rn");


    }

    

  }


串口调试输出:

在这里插入图片描述

门控触发模式:

这个模式是当TI1电平保持低时,计数器才继续计数,高的时候不计数。

在这里插入图片描述
在这里插入图片描述

void Tim1_Trigger_gated_mode_Init(void){//tim1门控触发模式初始化

  

   PC_DDR_DDR1 =0;//输入

  //PD_CR1_C14  =0;//浮空输入

  PC_CR1_C11  =1;//上拉输入

  PC_CR2_C21  =0;//禁止外部中断功能


   

  TIM1_CCMR1_CC1S=0x01;//CC1通道被配置为输入, IC2映射在TI1FP1上;

  TIM1_CCMR1_OC1M=0x00;//无滤波器,以fMASTER采样

  TIM1_CCER1_CC1P=1;//捕获发生在TI1F的上升沿

  TIM1_SMCR_SMS=0x05;//门控模式

    TIM1_SMCR_TS=0x05;//选定TI1作为输入源

    TIM1_CR1_CEN=1;//使能计数器

  TIM1_IER_TIE=1;//触发中断使能

  Send_String("rntim1门控触发模式初始化完成rn");

}


#pragma vector=TIM1_OVR_TIF_vector//计数上升沿触发中断

  __interrupt void Tim1_trigger_standard_mode_IRQHandler(void){

    

    if(TIM1_SR1_TIF){

        

        TIM1_SR1_TIF=0;

         Send_String("rn");

        Send_String("计数触发中断rn");


    }

    

  }


串口调试输出:

在这里插入图片描述

按键保持为低时计数器继续计数。

外部时钟模式2+触发模式

这个模式使用ETR作为计数器计数信号,触发模式用于控制计数器计数、复位,这里选择的出发模式为标准触发模式。

在这里插入图片描述
在这里插入图片描述

void Tim4_Init(void){//tim4初始化

  

  TIM4_CR1_ARPE=0;//预装载使能

  TIM4_CR1_OPM=0;//计数器在更新事件时不停止

  TIM4_CNTR=0;//计数器初始化

  TIM4_PSCR_PSC=0x03;//8分频,8M/8=1M

  TIM4_ARR=0xFA;//初始化自动装载值

  TIM4_EGR_UG=1;//手动产生更新事件

  TIM4_IER_UIE=1;//更新中断使能

    TIM4_CR1_CEN=1;//使能计数器

  

}

void GPIO_PE5_Init(){//PE5端口初始化

  

    PE_DDR_DDR5=1;//配置PD0为输出模式

    PE_CR1_C15=1;//配置PD0为推挽模式

    PE_CR2_C25=1;//配置PD0输出最大为10Mhz

    PE_ODR_ODR5=0;

   

}

unsigned int i=0;

#pragma vector=TIM4_OVR_UIF_vector//TIM4更新中断

  __interrupt void TIM4_OVR_UIF_IRQHandler(void){

    

    if(TIM4_SR_UIF) {

      i++;

      TIM4_SR_UIF=0;//清除更新中断标志



      if(i>=4000){

        i=0;                

        PE_ODR_ODR5=!PE_ODR_ODR5;



      }

    }


}


void Tim1_Count_mode2_Init(void){//tim1计数模式2初始化

  

  PB_DDR_DDR3 =0;//输入

  //PB_CR1_C14  =0;//浮空输入

  PB_CR1_C13  =1;//上拉输入

  PB_CR2_C23  =0;//使能外部中断功能

  

  TIM1_ETR_ETF=0x00;//无滤波器,以fMASTER采样

  TIM1_ETR_ETPS=0x00;//无分频

  TIM1_ETR_ETP=0;//ETR不反相,即高电平或上升沿有效

  TIM1_ETR_ECE=1;//使能外部时钟模式2,计数器的时钟为ETRF的有效沿

 // TIM1_IER_TIE=1;//触发中断使能

  //TIM1_CR1_CEN=1;//使能计数器


  Send_String("tim1模式2计数初始化完成rn");

}


void Tim1_trigger_standard_mode_Init(void){//tim1标准触发模式初始化

  

   PC_DDR_DDR1 =0;//输入

  //PD_CR1_C14  =0;//浮空输入

  PC_CR1_C11  =1;//上拉输入

  PC_CR2_C21  =0;//禁止外部中断功能


   

  TIM1_CCMR1_CC1S=0x01;//CC1通道被配置为输入, IC1映射在TI1FP1上;

  TIM1_CCMR1_OC1M=0x00;//无滤波器,以fMASTER采样

  TIM1_CCER1_CC1P=0;//捕获发生在TI2F的上升沿

  TIM1_SMCR_SMS=0x06;//触发模式:计数器在触发输入TRGI的上升沿启动(但不复位),只有计数器的启动是受控的

    TIM1_SMCR_TS=0x05;//选定TI1作为输入源

  TIM1_IER_TIE=1;//触发中断使能

  Send_String("rntim1标准触发模式初始化完成rn");

}

在这里插入图片描述

推荐阅读

史海拾趣

GSG公司的发展小趣事
检查电源是否正常,传感器是否损坏,信号调理电路是否有问题,以及微处理器或DSP是否工作正常。
AINFO Inc公司的发展小趣事

AINFO Inc公司在初创期便明确了其在电子行业中的技术发展方向和市场定位。公司注重技术积累,投入大量资源进行研发,逐步在某一领域取得了技术突破。同时,公司对市场进行了深入调研,确定了目标客户群体和市场需求,为后续的产品开发和市场推广打下了坚实基础。

Electric Imp Inc.公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,Electric Imp Inc.公司始终保持着敏锐的市场洞察力和持续的创新精神。公司不断推出新产品、新技术,以满足不同客户的需求。同时,公司还加强了内部管理和团队建设,提高了员工的专业素质和工作效率。这些努力使得公司能够保持持续的发展态势,并在电子行业中保持领先地位。

ACE [ACE Technology Co., Ltd.]公司的发展小趣事

面对日益激烈的市场竞争和不断变化的市场需求,Electric Imp Inc.公司始终保持着敏锐的市场洞察力和持续的创新精神。公司不断推出新产品、新技术,以满足不同客户的需求。同时,公司还加强了内部管理和团队建设,提高了员工的专业素质和工作效率。这些努力使得公司能够保持持续的发展态势,并在电子行业中保持领先地位。

长运通(CYT)公司的发展小趣事

在市场竞争日益激烈的背景下,长运通积极拓展市场,加强品牌建设。公司不仅在国内市场取得了良好的销售业绩,还积极开拓国际市场,与多家国际知名企业建立了合作关系。同时,长运通也注重品牌形象的塑造和传播,通过参加各种展会、论坛等活动,提升公司的知名度和影响力。这些努力使得长运通在电子行业中树立了良好的品牌形象。

HellermannTyton公司的发展小趣事

Heimann Optoelectronics Gmbh深知人才是企业发展的核心动力。公司建立了完善的人才培养体系,通过内部培训、外部交流等多种方式提升员工的专业技能和综合素质。同时,公司还注重营造开放、包容的企业文化,鼓励员工创新思维和团队合作。这种良好的企业文化氛围吸引了大量优秀人才加入公司,为公司的持续发展提供了有力的人才保障。

以上五个故事虽然基于虚构的“Heimann Optoelectronics Gmbh”公司构建,但反映了电子行业中企业发展的一般规律和趋势。

问答坊 | AI 解惑

TI电源管理指南

TI的电源管理芯片及应用介绍。…

查看全部问答>

KEIL PDF教程,二,三,四

KEIL PDF教程,二,三,四…

查看全部问答>

怎样搭建基于wince系统的手机游戏开发环境

   怎样搭建基于wince系统的手机游戏开发环境     哥哥姐姐弟弟妹妹们 帮个忙哈 谢谢哦…

查看全部问答>

求助:软件外包公司

有哪位朋友知道从事手机软件开发的中小型公司吗?能否提供一些,或者是我该如何才能查到这方面的公司信息?多谢。…

查看全部问答>

问一个连接错误!大家来看看

错误内容: JiuArmDlg.obj : error LNK2001: unresolved external symbol CLSID_DataLinks JiuArmDlg.obj : error LNK2001: unresolved external symbol IID_IDBPromptInitialize ARMV4IDbg/JiuArm.exe : fatal error LNK1120: 2 unresolved ext ...…

查看全部问答>

iesample与iesimple浏览器问题!

嘿各位!     在CE5.0上通过GPRS连接上网,当设置APN为CMNET的时候,WWW和WAP网站都能上,但是如果设置为CMWAP用我们的浏览器(仿照iesimple做的)就不能浏览网站,如果用微软自带的浏览器(iesample),设置代理服务器地址为10.0.0.172就 ...…

查看全部问答>

Vxworks 中 tcp链接 client 端 recv时 如何设置超时等待?

最近做嵌入式网络通信 客户端在等待接受信息时 如果 服务器端 异常断开 无法判断已断开网络 recv函数一直傻等 如何设置才可以避免 其陷入等待 ?谢谢…

查看全部问答>

求助:www.micrium.com上的ucos谁移植成功过?

自己试了一次,很多问题,没成功。那位在real view下成功过,请发一份代码到checkcode@126.com我想参考一下,第一次接触ucos,有点吃力。…

查看全部问答>

2.4G方向性问题

现在国内2.4G的方案还不是太成熟,想讨论下2.4G方向性的问题,现在有什么好的办法能让2.4G方向性做的很精确,传输距离可调…

查看全部问答>