资源简介
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
- 上一篇:ltc1860 ad程序
- 下一篇:数据挖掘与机器学习.pdf
相关资源
- DAC0832波形发生器幅值及频率都精确可
- 数字频率合成dds正弦波基于FPGA的DDS产
- SG3525频率PWM控制均可调模块
- fpga实现频率测量
- 51单片机频率计(很简单)
- 一个适用的虚拟声卡频率计
- 脉冲频率对脉冲激光重熔Zr55Cu30Al10N
- 锁相环PLL偏离整数通道的频率点杂散
- 的频率依赖性
- 分布式管理控制式计热表
- 短时傅立叶变换与Wigner-Ville分布联合
- 电源设计小贴士 8:通过改变电源频率
- 光纤布拉格光栅应变传感在振动状态
- 基于Simulation的涡旋压缩机支架体动态
- 压路机橡胶减振系统动态参数
- MSP430控制AD9850产生频率可调的方波及
- GW150914的频率依赖性违反Shapiro延迟的
- 论文研究 - 婴儿市场的交易频率异常
- 2.4G直接下变频接收机射频前端的设计
- 硬件课程设计-频率发生器
- 请2020年9月版最新频率2020年3月航空管
- 请2020年9月频率表2019年7月航空管制频
- 基于FPGA的双通道幅度相位频率可调节
- 基于STM32的信号频率测量
- stm32输出频率幅值可调SPWM
- 通过STM32F103单片机高级定时器TIM8同时
- 通过STM32F103单片机通用定时器TIM2,同
- STM32f103zet6脉冲周期检测间接的频率
- 简易数字频率计课程设计报告
- 数字频率计 VHDL代码
评论
共有 条评论