STM8S103之tim1捕获周期及占空比

发布者:Jinyu2022最新更新时间:2019-11-26 来源: eefocus关键字:STM8S103  tim1  捕获周期  占空比 手机看文章 扫描二维码
随时随地手机看文章

本文以STM8S103F3P6编程为例,介绍STM8S103F3P6定时器1捕获周期及占空比


电脑平台:Windows7 64位旗舰

编译软件:IAR

硬件平台:STM8S103F3P6


1.系统时钟初始化为内部16M


CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);    //时钟   初始化时钟为1分频 16M   2分频8M


2.初始化定时器1设置PC6为捕获输入


void Init_Timer1(void)

{

    GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_FL_NO_IT);   //输入浮动,没有外部中断  

      

    TIM1_DeInit();                                         //tim1 定时器寄存器全部复位  

    TIM1_TimeBaseInit(0x0f, TIM1_COUNTERMODE_UP, 50000-1, 0);//  50ms  最小捕获50hz      设置时间分频  向上计数    捕捉50Hz及 以上的周期和占空比

    TIM1_PWMIConfig(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV1, 0x00); //选择TI1输入上升沿触发 选择TI2输入下降沿触发 输入捕捉预定标器  无滤波

    TIM1_SelectInputTrigger(TIM1_TS_TI1FP1);   //滤波后输入TI1

    TIM1_SelectSlaveMode(TIM1_SLAVEMODE_RESET);//复位输入

    TIM1_ClearFlag(TIM1_FLAG_CC1);                         //指定要清除的标志

    TIM1_ClearFlag(TIM1_FLAG_CC2);                         //指定要清除的标志

    TIM1_ITConfig( TIM1_IT_CC1, ENABLE);                  //去掉是查询方式,否则是中断方式

    TIM1_ITConfig( TIM1_IT_CC2, ENABLE);                  //去掉是查询方式,否则是中断方式

    TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);                   //使能输入捕获通道1

    TIM1_CCxCmd(TIM1_CHANNEL_2, ENABLE);                   //使能输入捕获通道2

    TIM1_Cmd(ENABLE);                                      //使能定时器

}


3.编写主函数


void main(void)

{

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);    //内部时钟16M

  Init_UART1();

  Init_Timer1();

  enableInterrupts();

  while(1);

}


4、编写中断服务函数


INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler, 12)

{

  uint16_t num = 0;

  static uint16_t num1;

  static float num2;

  uint8_t data[11]={0};

  uint8_t len = 0;

 if(TIM1_GetITStatus(TIM1_IT_CC1) != RESET) //如果CH1边沿触发  

  {  

      num1 = TIM1_GetCapture1();  

      TIM1_ClearITPendingBit(TIM1_IT_CC1);    //清除标志位  

  }  

 else if(TIM1_GetITStatus(TIM1_IT_CC2) != RESET) //如果CH2边沿触发  

  {  

      num2 = TIM1_GetCapture2();             //

      TIM1_ClearITPendingBit(TIM1_IT_CC2);    //清除标志位  

      num = (uint16_t)((num2 / num1) * 100.0); //计算占空比

     

     data[len++] = num1 / 10000 % 10 + '0';

     data[len++] = num1 / 1000 % 10 + '0';

     data[len++] = num1 / 100 % 10 + '0';

     data[len++] = num1 / 100 % 10 + '0';

     data[len++] = num1 / 10 % 10 + '0';

     data[len++] = num1 % 10 + '0';

     data[len++] = 'n';         //输出周期时间  单位us

     data[len++] = num / 100 % 10 + '0';

     data[len++] = num / 10 % 10 + '0';

     data[len++] = num  % 10 + '0';

     data[len++] = 'n';         //输出占空比   单位 50% = 50

     Set_UART1Interrupt(data,len);

  }

 

}

 

5、结果

输入100Hz,占空比为50%,结果输出周期10000us 占空比为50% 结果正确,实验成功。

关键字:STM8S103  tim1  捕获周期  占空比 引用地址:STM8S103之tim1捕获周期及占空比

上一篇:stm8s io配置
下一篇:STM8S103之AD采样

推荐阅读最新更新时间:2024-11-09 05:58

如何采用STM32中的控制定时器Tim1实现计数器功能
STM32中的高级控制定时器(Tim1)是由一个16位的自动装载计数器组成,它由一个可编程预分频器驱动。 用途在于:测量输入信号的脉冲宽度(输入捕获),或者产生输出波形(输出比较,PWM,嵌入死区时间的互补PWM等)。 使用定时器预分频器和RCC时钟控制预分频器,可以实现脉冲宽度和波形周期从几个微秒到几个毫秒的调节。 具体如下: 16位上下,自动装载计数器。 16位可编程预分频器,计数器时钟频率的分频率的分频系数为1-65535之间任意数值,4个独立通道: 输入捕获 输出比较 PWM生成 单脉冲模式输出 死区时间可编程的互补输出 使用外部信号控制定时器和定时器互连的同步电路 在指定数目的计数器周期之后更新定时器寄存器
[单片机]
STM32CUBEMX开发GD32F303(13)----定时器TIM捕获PWM测量频率与占空比
概述 本章 STM32 CUBEMX配置STM32F103,并且在 GD32 F303中进行开发,同时通过开发板内进行验证。 本章STM32CUBEMX配置STM32F103输出PWM,同时使用 TI M测量PWM频率和正占空比。 最近在弄ST和GD的课程 。 生成例程 这里准备了自己绘制的开发板进行验证。 查看原理图,PA9和PA10设置为开发板的串口。 配置串口 查看原理图,PB0设置为PWM输出管脚,PB10设置为定时器输入捕获管脚。 配置时钟树 配置时钟为64M。 配置PWM 配置定时器1输出pwm的频率为1K。 配置输入捕获 开启中断 keil配置 microlib 进行了高度优化以
[单片机]
STM32CUBEMX开发GD32F303(13)----定时器TIM<font color='red'>捕获</font>PWM测量频率与<font color='red'>占空比</font>
MSP430G2553 频率、占空比、脉冲宽度测量
测量频率、占空比、脉冲宽度等信号数字量应该算是430中比较简单的一个实验,而且幸运的是TI官方的示例程序中有相关的内容。 传送门: https://dev.ti.com/tirex/explore/node?devices=MSP430G2553&node=AFB5DJx-bgFTI4ERhplnuw__IOGqZri__LATEST https://dev.ti.com/tirex/explore/node?devices=MSP430G2553&node=AFB5DJx-bgFTI4ERhplnuw__IOGqZri__LATEST 进行测量的重点是对信号上升沿和下降沿的捕获,这一点利用定时器的捕获功能就可以实现。
[单片机]
MSP430G2553 频率、<font color='red'>占空比</font>、脉冲宽度测量
(纯干货)使用STM32测量频率和占空比的几种方法
使用平台:官方STM32F429DISCOVERY开发板,180MHz的主频,定时器频率90MHz。 相关题目: (1)测量脉冲信号频率f_O,频率范围为10Hz~2MHz,测量误差的绝对值不大于0.1%。(15分) (2)测量脉冲信号占空比D,测量范围为10%~90%,测量误差的绝对值不大于2%。(15分) 思路一:外部中断 思路:这种方法是很容易想到的,而且对几乎所有MCU都适用(连51都可以)。方法也很简单,声明一个计数变量TIM_cnt,每次一个上升沿/下降沿就进入一次中断,对TIM_cnt++,然后定时统计即可。如果需要占空比,那么就另外用一个定时器统计上升沿、下降沿之间的时间即可。 缺点:缺陷显而易见,当频率提高,
[单片机]
(纯干货)使用STM32测量频率和<font color='red'>占空比</font>的几种方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved