跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
精密电阻捷比信 · 专业器件主题站

嵌入式软件采集频率值的方法

单击上面的蓝色字母以跟随我〜01前言嵌入式软件输入收集更为常见,例如读取gpio的高电平和低电平,读取广告电压值等。但是,如果要收集频率信号的频率值,如何收集呢? 02收集频率值我们知道传感器的输出信号形式除了电压和电流外还具有频率。例如,一些加速度传感器和速度传感器输出频率信号。 stm32的定时器输入捕捉模式用于测量频率。与频率不同于PWM输出的矩形波相反,PWM输入捕获是对输入矩形波进行计数以测量频率。简而言之,通过检测TIMx_CHx上的边沿信号,当边沿信号发生变化(例如上升沿/下降沿)时,当前定时器值(TIMx_CNT)将存储在相应通道的捕捉/比较寄存器(TIMx_CCRx)中。 )在内部完成捕获。在该示例中,使用了STM32F105系列PA7引脚。检查规格说明,可以将PA7组态为TIM3的通道2。打开TIM3时钟和GPIOA时钟,PA7引脚被初始化并配置为浮动输入。 TIM3已初始化。设置预分频值。配置TIM3中断。设置TIM3_CH2的输入比较参数,并配置TIM3的被动触发模式。使能TIM3并打开中断。在TIM3中断中计算频率值// ----------------------------------------- ----- ------------------- // * *函数名称PwmInit //& nbsp; *& nbsp; @ function& nbsp; & nbsp;& nbsp;完整的输入引脚和TIM3等。初始化// * @Author嵌入式案例显示// * @ @Parameter None // * @Return Value None // ---------- --------------- --------------------------------------------------- ----- void PwmInit(void){GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; NVIC_InitTypeDef NVIC_InitStructure; //打开TIM3和GPIOA的时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,E NABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  // PA7引脚初始化   GPIO_InitStructure.GPIO_Pin  =& nbsp; GPIO_Pin_7;  GPIO_Init_FLit_GPIOTructure_GPIO_Speed_GPIO_Speed(GPIO_Init50); GPIO_InitStructure);& nbsp;& nbsp; // TIM3初始化TIM_TimeBaseStructure.TIM_Period = 0xffff; // TIM_TimeBaseBasetructure。 .TIM_TimeBaseStructure = 0; / TIM_TimeBaseStructure .TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3,& TIM_TimeBaseStructure); // TIM3中断配置   NVIC_InitStructure.NVIC_IRQChannel  =  TIM3_IRQn; NVIC_InitStructureChannel 1VIC_PrivacyNtructure_Privacy通道; NVIC_InitStructure.NVIC_Init NVIC_Init(& NVIC_InitStructure);& nbsp;& nbsp; // TIM3_CH2输入参数配置TIM_ICInitStructure.TIM_Channel = TIM_Channel_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;添& nbsp; TIM_MasterSlaveMode_Enable); //启用被动触发器& nbsp;& nbsp; //启用TIM3并启用中断TIM_Cmd(TIM3,ENABLE); TIM_ITConfig(TIM3,TIM_IT_CC2,ENABLE);)u16 Tim3IC2Value; void TIM3_IRQHandler(void){u16 j;& nbsp; TIM_ClearITPendingBit(TIM3,& nbsp; TIM_IT_CC2); //在一个定时器周期内捕获Tim3IC2Value = TIM_GetCapture2(TIM3); if(Tim3IC2Value!= 0){ //计算PWM频率单位KHz f2CurrentFreq =(u16)(180000 / Tim3IC2Value);}否则{f2CurrentFreq = 0;}}}可以非常精确地测量500KHz的输入频率。注意,除了TIM6和TIM7,stm32定时器还具有输入捕捉功能。 /结束语/相关阅读STM32时钟分析stm32的几种低功耗模式的实现和区别STM32 FLASH和SRAM使用率分析扫描代码以关注我们,查看更多嵌入式案例与此内容相似,请点击