OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2507|回复: 3

关于TIM1的外部计数模式测频率的问题,TIM3的ert管脚能正常使用,而TIM1的PA12接入就无法计数,貌似是GPIO口的问题,请大佬指导

[复制链接]

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
112
金钱
112
注册时间
2019-7-4
在线时间
49 小时
发表于 2019-8-10 16:55:28 | 显示全部楼层 |阅读模式
5金钱
#include "timer.h"
#include "led.h"
#include "usart.h"


void TIM1_Cap_Init(u16 arr,u16 psc)
{  
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
GPIO_InitTypeDef GPIO_InitStructure;

/* TIM1 clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);  // Time base configuration
TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);   
TIM_SetCounter(TIM1, 0);   
TIM_Cmd(TIM1, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
   
}
//TIM2作为计数器
void TIM2_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef   TIM2_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;  
/* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);






  TIM_DeInit(TIM2);
  TIM2_TimeBaseStructure.TIM_Period =2499;
  TIM2_TimeBaseStructure.TIM_Prescaler = 7199;
  TIM2_TimeBaseStructure.TIM_ClockDivision = 0x0;
  TIM2_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM2_TimeBaseStructure); // Time base configuration
  TIM_ClearFlag(TIM2,TIM_FLAG_Update);
  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE );

  TIM_Cmd(TIM2, ENABLE);
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);               
}
u16 count;
int sum;
float Frequency1;
u32 CAPTURE1;
void TIM2_IRQHandler(void)   
{
   if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //判断定时器2是否发生更新(溢出)中断
        {
           TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  //清除中断标志位
         
               CAPTURE1=(u32)TIM_GetCounter(TIM1); //获取计数器的值
         }
                        sum+=CAPTURE1;
                        count++;
                        if(count==4)
                        {
                            Frequency1=sum/4/0.25;
                            sum=0;
                            count=0;
                     printf("频率是: %f",Frequency1);
                     printf ("\r\n");
                        }
                       TIM_SetCounter(TIM1,0);
                  LED2=!LED2;   
                  
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-8-12 03:13:29 | 显示全部楼层
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-8-19
在线时间
10 小时
发表于 2019-9-6 14:50:06 | 显示全部楼层
你好,问题解决了吗
回复

使用道具 举报

4

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2019-7-17
在线时间
40 小时
发表于 2019-11-26 15:25:07 | 显示全部楼层
把输入上拉改为输入下拉应该就对了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 05:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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