TIM1输入捕获测量方波信号周期

发布者:温馨家园最新更新时间:2021-09-24 来源: eefocus关键字:TIM1  输入捕获 手机看文章 扫描二维码
随时随地手机看文章

//main.c


#include"stm8s.h"

#include"main.h"

#include"tm1638.h"

extern volatile u16 captureValue1,captureValue2;//存放俩次捕获的值

volatile u8 successFlag=0;//连续俩次成功捕获将该位置一

extern volatile u16 numberOfCapture;//捕获次数

u32 frequency=0;//频率

int main(void)

{

CLK->CKDIVR=0X00;//主时钟HSI一分频,即为16MHz

GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);//PC4 COO输出引脚

GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT);//TIM1_CH1通道引脚

Tim1_Init();//TIM1初始化

init_TM1638();//该模块用以将频率值显示在数码管上

rim();//开总中断

CLK_CCOConfigCLK_CCOConfig(CLK_OUTPUT_LSI);//输出LSI时钟128KHz

CLK_CCOCmd(ENABLE);//开启CCO

while(1)

  {

if(successFlag==1)

    {

frequency=(8*16000000UL)/(captureValue2-captureValue1);

frequency/=100;//以KHz为单位,小数点后一位

successFlag=0;

Display(frequency);    //显示频率值

successFlag=0;

    TIM1_CCxCmd(TIM1_CHANNEL_1,ENABLE);//开启TIM1_CH1通道的输入捕获

    }

}

}


#ifdef USE_FULL_ASSERT

void assert_failed(u8* file,u32 line)

{

while(1)

  {

  }

}

#endif


//main.h

#ifndef    _MAIN_H

#define   _MAIN_H

#include"stm8s.h"

#include"tm1638.h"

u8 qian,bai,shi,ge,wan;

extern u32 frequency;

extern unsigned char tab[];

void Tim1_Init(void)

{

TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING,TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV8,0x00);

//TIM1_CH1通道,上升沿,八分频

TIM1_UpdateRequestConfig(TIM1_UPDATESOURCE_REGULAR);//更新事件中断

TIM1_GenerateEvent(TIM1_EVENTSOURCE_UPDATE);//产生一个更新事件,更新寄存器

TIM1_ITConfig(TIM1_IT_UPDATE, ENABLE);//使能更新中断

TIM1_ITConfig(TIM1_IT_CC1, ENABLE);//开启捕获中断

TIM1_Cmd(ENABLE);//开TIM1

  TIM1_CCxCmd(TIM1_CHANNEL_1,ENABLE);//开捕获

}

void Display(u32 frequency)

wan=frequency/10000;

  qian=frequency%10000/1000;

bai=frequency%1000/100;

shi=frequency%100/10; 

ge=frequency%10; 

Write_DATA(0<<1,tab[wan]);

Write_DATA(1<<1,tab[qian]);

  Write_DATA(2<<1,tab[bai]); 

Write_DATA(3<<1,tab[shi]|0x80);//带小数点

Write_DATA(4<<1,tab[ge]);

}


#endif


//stm8s_it.c

#include"stm8s_it.h"

extern volatile u16 count;//用于TIM4计数

volatile u8 numberOfCapture;

volatile u16

captureValue1=0,captureValue2=0;

extern volatile u8 successFlag;

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.

  */

TIM1_ClearITPendingBit(TIM1_IT_UPDATE);//清除溢出中断标志

numberOfCapture=0;//捕获过程发生中断则重新捕获

}

 

INTERRUPT_HANDLER(TIM1_CAP_COM_IRQHandler,12)

{

  /*

In order to detect unexpected events during development,

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

  */

if((TIM1->SR1&TIM1_FLAG_CC1)!=0)

  {

if(numberOfCapture==0)//第一次捕获

    {

  captureValue1=TIM1_GetCapture1();    

numberOfCapture=1;

    }

  else//第二次捕获

   {

    TIM1_CCxCmd(TIM1_CHANNEL_1,DISABLE);

    captureValue2=TIM1_GetCapture1();

      numberOfCapture=0;    

      successFlag=1;

    }

  }   

}

关键字:TIM1  输入捕获 引用地址:TIM1输入捕获测量方波信号周期

上一篇:STM8S专题之GPIO输入输出
下一篇:基于STM8S的无感方波BLDC控制

推荐阅读最新更新时间:2024-11-04 20:53

STM8输入捕获
最近在用STM8的过程中需要用到一个频率检测的功能,还好STM8S207的定时器中自带有输入捕获功能,之前还想着用定时器计数方式来实现的,但既然人家提供了该功能,那就试试吧,由于硬件里面接的是PC1引脚就只看了Timer1,其他的定时器应该也是类似的,看了资料之后发现STM8的输入捕获其实与STC12C5A60S2中的PCA捕获模式很类似,但是看资料没有后者清晰易懂。。。 在捕获模式中,基本上只用到了读进程,在STM8中有一个影子寄存器,但对于我们来说是看不到的,我们仅操作预装载寄存器即可。而且需要注意的是无论是计数器还是捕获/比较寄存器都是先读/写高8位,后读/写低8位数据。 在文档中给出了一个输入捕获模式的流程
[单片机]
STM8<font color='red'>输入</font><font color='red'>捕获</font>
TIM1_ETR和TIM1_CH有什么差别,要进行输入捕获
使用外部时钟源模式2 外部时钟源模式1并且输入配置为外部触发输入 这2种情况作ETR 其他情况为CH1
[单片机]
TIM1_ETR和TIM1_CH有什么差别,要进行<font color='red'>输入</font><font color='red'>捕获</font>
STM32F103ZET6 — PWM(TIM1
简介 首先聊聊 PWM 输出。脉宽调制(PWM,Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。尤其是电机控制。 PWM 的主要参数包括频率和占空比。 死区的概念是在 PWM 控制电机引入的。由于 H 桥的存在,每个桥的上半桥和下半桥是绝对不能同时导通的,但高速的PWM驱动信号在达到功率元件的控制端时,往往会由于各种各样的原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。 死区就是在互补的输出中,人为的插入 Delay,以致 H 桥不至于出现同时导通的情况。类似于 DTPHx 和
[单片机]
STM32F103ZET6 — PWM(<font color='red'>TIM1</font>)
stm8系列输入捕获
输入捕获分为两种,一种是正常的输入捕获,当检测到输入信号的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIM1_CCRx)中。当发生捕获事件时,相应的CCiIF标志(TIM1_SR寄存器)被置1 。如果使能了中断,则产生中断, 置位CCiIF寄存器或者读取捕获寄存器的值可以清除 CCiIF 。 配置步骤: 1.选择有效的输入信号,选择channel; 2. 输入信号TIi的特点,配置TIM1_CCMRi寄存器中的ICiF位来设置相应的输入滤波器的滤波时间。 3.选择触发方式,上升沿下降沿。 4.设置预分频器; 5.设置TIM1_CCER1寄存器的CC1E=1,允许捕获计数器的值到捕获寄存器中; 6.enable interru
[单片机]
STM32输入捕获实验示例详解
STM32输入捕获实验 寄存器部分讲解(以TIM5_CH1为例) TIMx_CCMR1.ICF 的作用 滤波器的作用就是“采集取样以便于确定准确的电平状态”。我们以ICIF = 0010为例: 实例应用:假设输入信号在最多5个内部时钟周期的时间内抖动,我们须配置滤波器的带宽长于5个时钟周期。因此我们可以(以fDTS频率)连续采样8次,以确认在TI1上一次真实的边沿变换,即在TIMx_CCMR1寄存器中写入IC1F=0011。 TIMx_CCER.CC1P的作用 这个寄存器很重要,它决定了“上升沿/下降沿触发输入捕获 “,而且最重要的是,它是用来配置极性的唯一寄存器,这说明输入极性与输出极性都要经过它进行配置,因此
[单片机]
STM32<font color='red'>输入</font><font color='red'>捕获</font>实验示例详解
stm32学习笔记(十)输入捕获实验
#include timer.h #include led.h #include usart.h #include sys.h ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK Mini STM32开发板 //PWM 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2010/12/03 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 正
[单片机]
stm32学习笔记(十)<font color='red'>输入</font><font color='red'>捕获</font>实验
STM32之通用定时器输入捕获模式
#include stm32f10x.h /* RCC时钟配置 */ void RCC_config() { ErrorStatus HSEStartUpStatus; /* RCC寄存器设置为默认配置 */ RCC_DeInit(); /* 打开外部高速时钟 */ RCC_HSEConfig(RCC_HSE_ON); /* 等待外部高速时钟稳定 */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { /* 设置HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_
[单片机]
STM8自带输入捕获功能学习
  最近在用STM8的过程中需要用到一个频率检测的功能,还好STM8S207的定时器中自带有输入捕获功能,之前还想着用定时器计数方式来实现的,但既然人家提供了该功能,那就试试吧,由于硬件里面接的是PC1引脚就只看了 TI mer1,其他的定时器应该也是类似的,看了资料之后发现STM8的输入捕获其实与STC12C5A60S2中的PCA捕获模式很类似,但是看资料没有后者清晰易懂。。。      在捕获模式中,基本上只用到了读进程,在STM8中有一个影子寄存器,但对于我们来说是看不到的,我们仅操作预装载寄存器即可。而且需要注意的是无论是计数器还是捕获/比较寄存器都是先读/写高8位,后读/写低8位数据。   在文档中给出了一个输入捕获
[单片机]
STM8自带<font color='red'>输入</font><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