STM32频率计算——捕获方式
来源:互联网 发布:sai软件中文版 编辑:程序博客网 时间:2024/06/05 21:55
STM32采用定时器捕获的方法测低频信号很准确,我测高频100K-120K就误差太大了,大概200Hz,这儿的误差是个范围,不是某个值。有的人说两个定时器一个定时,一个计数,这样太浪费资源了吧。我项目要采集两个地感线圈的频率,所以用两个定时器捕获,这儿只说一个定时器的方法,用的是定时器3通道2,下面是用捕获的方法计算频率:
void Time3_Configuration(){ TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //RCC_ClocksTypeDef freq; //RCC_GetClocksFreq(&freq); /*TIM3时基*/ TIM_DeInit(TIM3); TIM_TimeBaseStructure.TIM_Period = 0xffff; TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // Time base configuration /*TIM3输入捕获*/ TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM_ICInitStructure.TIM_ICPolarity = TIM_CounterMode_Up; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; /*输入预分频*/ TIM_ICInitStructure.TIM_ICFilter = 0; TIM_ICInit(TIM3, &TIM_ICInitStructure); TIM_PWMIConfig(TIM3, &TIM_ICInitStructure); /* Select the TIM3 Input Trigger: TI2FP2 */ TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2); /* Select the slave Mode: Reset Mode */ TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); /* Enable the Master/Slave Mode */ TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable); /* TIM enable counter */ TIM_Cmd(TIM3, ENABLE); /* Enable the CC2 Interrupt Request */ TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);}中断部分计算频率:void TIM3_IRQHandler(void){ if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET) { /* Clear TIM5 Capture compare interrupt pending bit */ TIM_ClearITPendingBit(TIM3, TIM_IT_CC2); if(capture_number2 == 0) { /* Get the Input Capture value */ ic3_readvalue3 = TIM_GetCapture2(TIM3); capture_number2 = 1; } else if(capture_number2 == 1) { /* Get the Input Capture value */ ic3_readvalue4 = TIM_GetCapture2(TIM3); /* Capture computation */ if (ic3_readvalue4 > ic3_readvalue3) { CAPTURE2 = ic3_readvalue4 ; } /* Frequency computation */ Frequency2 = (u32)72000000 / CAPTURE2; capture_number2 = 0; } else { Frequency2=0; } }}
还有一种方法就是用外部中断计算频率,不过我没用过。更精确的计算方法我得慢慢研究。接触STM32也不是太久。
0 0
- STM32频率计算——捕获方式
- STM32 输入捕获的脉冲宽度及频率计算
- STM32定时器捕获PWM脉冲频率
- STM32中PWM频率捕获的相关配置(个人理解)
- 详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
- 详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
- 详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
- STM32采集频率-外部计数方式
- STM32F0xx_TIM输入捕获(计算频率)配置详细过程
- stm32定时器外部计数模式 最大频率计算。
- STM32——定时器TIME模块之输入捕获
- STM32-捕获
- STM32 F207的PWM输入捕获频率和占空比
- STM32 定时器(二)——定时器产生不同频率的PWM
- STM32——ADC采样时间、采样周期、采样频率计算方法
- STM32方波频率测量
- 捕获2-频率损耗因子
- STM32的定时器有两种捕获模式——PWM输入模式和普通输入模式
- POJ 2151 Check the difficulty of problems (概率DP)
- android事件如何分发给子view
- mini2440系统移植篇之kernel启动流程
- PHP3.2配置文件使ini文件配置
- 第十二周程序阅读5
- STM32频率计算——捕获方式
- centos7 下Apache服务器配置
- 用java开发学生信息管理系统(SIMS,三)
- 2015年百度测试开发实习生面试
- 多线程编程技术之NSThread、Cocoa NSOperation、GCD
- memset的坑
- Error met at attempts to write stored procedure in MySQL[SOLVED]
- 五大常用算法之一:分治算法
- 郁金香反汇编逆向与外挂(71)