硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3492|回复: 1
收起左侧

[有问必答] STM32利用两个定时器测频率,有测量数据,但外部频率改变,测量显示值不变,是啥原因?

[复制链接]

27

主题

25

回帖

106

积分

初级会员

积分
106
发表于 2019-8-30 09:08:37 | 显示全部楼层 |阅读模式
#include "time.h"
#include "led.h"
u32 TIM4_LastCnt;
extern u32 TIM_ExtCntFreq;
/*******************************************************************************
* 函 数 名         : TIM4_Init
* 函数功能     : TIM4初始化函数
* 输    入         : per:重装载值
      psc:分频系数
* 输    出         : 无
*******************************************************************************/
void TIM4_Init(u16 per,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM3,ENABLE);//使能TIM4时钟,定时器4定时1s,定时3 计数外部脉冲
//定时器4配置
TIM_TimeBaseInitStructure.TIM_Period=per;   //自动装载值

TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //分频系数
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //设置向上计数模式
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);

TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //开启定时器中断
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);

NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;//定时器中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;  //子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   //IRQ通道使能
NVIC_Init(&NVIC_InitStructure);

TIM_Cmd(TIM4,ENABLE); //使能定时器
//定时器2配置

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //GPIOD2
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//复用功能
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度 50MHz
    GPIO_Init(GPIOD,&GPIO_InitStructure); //初始化 PD2
TIM_TimeBaseInitStructure.TIM_Period=0xffff;   //自动装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=0;  //定时器分频
    TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
    TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;  
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);
//TIM_TIxExternalClockConfig(TIM1,TIM_TIxExternalCLK1Source_TI1,TIM_ICPolarity_Rising,0); //外部时钟源
TIM_ETRClockMode2Config(TIM3, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
TIM_SetCounter(TIM3,0);
TIM_Cmd(TIM3,ENABLE); //使能定时器


}
/*******************************************************************************
* 函 数 名         : TIM4_IRQHandler
* 函数功能     : TIM4中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void TIM4_IRQHandler(void)
{
static unsigned char count;
if(TIM_GetITStatus(TIM4,TIM_IT_Update))
{
  led2=!led2;
  //TIM4_LastCnt=TIM3->CNT;
  //TIM4_LastCnt=TIM3->CNT;
  TIM4_LastCnt+=TIM3->CNT;
  count++;
  if(count==4)
  {
   TIM_ExtCntFreq=TIM4_LastCnt/4/4/2;
   TIM4_LastCnt=0;
   count=0;
   
  }
     TIM_SetCounter(TIM3,0);
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2019-8-30 13:11:35 | 显示全部楼层
先测试正确检测到脉冲不
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-13 19:48 , Processed in 0.232047 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表