• 大小: 21KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: 频率  

资源简介

STM32利用输入捕获模式测量频率,利用上升沿和下降沿的差值

资源截图

代码片段和文件信息

/***************
利用定时器TIM1的CH2捕获通道测量外部输入信号频率(根据引脚,决定所使用的TIMx寄存器)
定时器TIM1设为输入捕获模式,外部信号从通道CH2进入,并相应串口设为浮空输入,
高电平有效,在捕获中断中计算2次捕获值的差值,从而计算信号频率
*******************/
#include “stm32f10x.h“
#include “stm32f10x_tim.h“

void RCC_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);

float TIM1_FREQ;


int main(void)
{
/* System Clocks Configuration */
    RCC_Configuration();

    //SysTick_Configuration();

/* NVIC configuration */
NVIC_Configuration();

/* Configure the GPIO ports */
GPIO_Configuration();
// TIM_Configuration( );//TIM初始化函数 
 
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; //选择通道2
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //输入上升沿捕获
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; // 通道方向选择(相位)
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //每次检测到捕获输入就触发一次捕获
//(预分频系数)
TIM_ICInitStructure.TIM_ICFilter = 0x0; //滤波系数
TIM_ICInit(TIM1 &TIM_ICInitStructure);

TIM_ITConfig(TIM1 TIM_IT_CC2 ENABLE); //打开中断

TIM_Cmd(TIM1 ENABLE); //启动TIM1
while(1);
Tim1_SetupNVIC();
 
}

void RCC_Configuration(void)
{
/* TIM1 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM1 ENABLE);
 /* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE);
}

void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable the TIM1 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void GPIO_Configuration(void)
{
/* TIM1 channel 2 pin (PA.06) configuration */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC &GPIO_InitStructure);

}

/***********中断配置*************/
void Tim1_SetupNVIC(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM

NVIC_SetVectorTable(NVIC_VectTab_RAM 0x0);
#else

NVIC_SetVectorTable(NVIC_VectTab_FLASH 0x0);
#endif

NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

/************中断里面做的事情**************/
void TIM1_IRQHandler(void)// 用相应的定时器中断 
{
if (TIM_GetITStatus(TIM1 TIM_IT_CC2) != RESET)//是TIM1CH2
{
TIM_ClearITPendingBit(TIM1 TIM_IT_CC2);//清空捕获标志
//第一次捕获
if(capture_number==0 )
{
  Ic1_readvalue1 = TIM_GetCapture2(TIM1);//保留捕获值
  capture_number=1;//设置标志
}
//第二次捕获
else if(capture_number==1)
{
   Ic1_readvalue2 = TIM_GetCapture2(TIM1);//保留捕获值
}
//若脉宽较长时,定时器可能溢出,需对溢出进行处理
//考虑是否溢出,计算两次的差值
if(Ic1_readvalue1>Ic1_readval

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-02-03 10:36  输入捕获模式测量频率\
     文件        3509  2015-02-03 10:36  输入捕获模式测量频率\capture_frequency.c
     目录           0  2015-01-26 19:57  输入捕获模式测量频率\参考一\
     目录           0  2015-02-02 15:22  输入捕获模式测量频率\参考一\PWM_Input\
     目录           0  2015-02-02 15:07  输入捕获模式测量频率\参考一\PWM_Input\Debug\
     文件       33792  2015-02-02 15:07  输入捕获模式测量频率\参考一\PWM_Input\Debug\vc60.idb
     文件       28672  2015-02-02 15:07  输入捕获模式测量频率\参考一\PWM_Input\Debug\vc60.pdb
     文件        7486  2015-02-02 15:07  输入捕获模式测量频率\参考一\PWM_Input\main.c
     文件        3375  2015-02-02 15:07  输入捕获模式测量频率\参考一\PWM_Input\main.dsp
     文件         516  2015-02-02 15:22  输入捕获模式测量频率\参考一\PWM_Input\main.dsw
     文件       33792  2015-02-02 15:22  输入捕获模式测量频率\参考一\PWM_Input\main.ncb
     文件       48640  2015-02-02 15:22  输入捕获模式测量频率\参考一\PWM_Input\main.opt
     文件         886  2015-02-02 15:07  输入捕获模式测量频率\参考一\PWM_Input\main.plg
     文件        2781  2009-05-07 14:50  输入捕获模式测量频率\参考一\PWM_Input\readme.txt
     文件        6305  2009-05-07 14:50  输入捕获模式测量频率\参考一\PWM_Input\stm32f10x_conf.h
     文件       29566  2009-05-07 14:50  输入捕获模式测量频率\参考一\PWM_Input\stm32f10x_it.c
     文件        3842  2009-05-07 14:50  输入捕获模式测量频率\参考一\PWM_Input\stm32f10x_it.h
     文件        2703  2015-02-02 15:49  输入捕获模式测量频率\参考三定时器输入捕获.txt
     文件        3413  2015-02-02 15:22  输入捕获模式测量频率\参考二.c

评论

共有 条评论