OpenEdv-开源电子网

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

用定时器3的通道2作为输入捕获一上电就显示65536

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-8-21
在线时间
0 小时
发表于 2013-8-21 11:28:49 | 显示全部楼层 |阅读模式

 刚开始学STM32,好多地方都不太清晰。。最近在用定时器3的通道2作为输入捕获,代码是在原子哥写的战舰开发板的输入捕获例程(通道1)的基础上改的,用通道一就可以很好的捕获,改成通道2一上电就“成功捕获到一次上升沿”,显示65536。。不知道是哪个地方没设置好。大家帮我看看是哪里的问题。
#include "capture.h"
#include "ili9320.h"
#include "delay.h"

TIM_ICInitTypeDef  TIM3_ICInitStructure;

void TIM3_Cap_Init(u16 arr,u16 psc)

 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能TIM3时钟
 GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);//由于PA7被占用,完全映射到PC7上
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIOC时钟
 GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7; 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PC7 输入 
 GPIO_Init(GPIOC, &GPIO_InitStructure);
 GPIO_ResetBits(GPIOC,GPIO_Pin_7);       //PC7 下拉
 
 //初始化定时器3 TIM3 
 TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值
 TIM_TimeBaseStructure.TIM_Prescaler =psc;  //预分频器  
 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
 
 //初始化TIM3输入捕获参数
 TIM3_ICInitStructure.TIM_Channel = TIM_Channel_2; //  选择输入端 IC2映射到TI2上
 TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
 //TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
 TIM3->CCMR1 |= 1<<8;          //  选择输入端 IC2映射到TI2上
 TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;  //配置输入分频,不分频
 TIM3_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
 TIM_ICInit(TIM3, &TIM3_ICInitStructure);
 
 //中断分组初始化
 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM5中断
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级2级
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //从优先级0级
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
 NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
 
 TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_CC2,ENABLE);//允许更新中断 ,允许CC2IE捕获中断 
 
  TIM_Cmd(TIM3,ENABLE );  //使能定时器3
 
}

u8  TIM3CH2_CAPTURE_STA=0; //输入捕获状态          
u16 TIM3CH2_CAPTURE_VAL; //输入捕获值
 
//定时器3中断服务程序 
void TIM3_IRQHandler(void)
{

  if((TIM3CH2_CAPTURE_STA&0X80)==0)//还未成功捕获 
 {  
  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  
  {    
   if(TIM3CH2_CAPTURE_STA&0X40)//已经捕获到高电平了
   {
    if((TIM3CH2_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
    {
     TIM3CH2_CAPTURE_STA|=0X80;//标记成功捕获了一次
     TIM3CH2_CAPTURE_VAL=0XFFFF;
    }else TIM3CH2_CAPTURE_STA++;
   } 
  }
 if (TIM_GetITStatus(TIM3, TIM_IT_CC2) != RESET)//捕获2发生捕获事件
  { 
   if(TIM3CH2_CAPTURE_STA&0X40)  //捕获到一个下降沿   
   {      
    TIM3CH2_CAPTURE_STA|=0X80;  //标记成功捕获到一次上升沿
    TIM3CH2_CAPTURE_VAL=TIM_GetCapture2(TIM3);
      TIM_OC2PolarityConfig(TIM3,TIM_ICPolarity_Rising); //CC2P=0 设置为上升沿捕获
   }else          //还未开始,第一次捕获上升沿
   {
    TIM3CH2_CAPTURE_STA=0;   //清空
    TIM3CH2_CAPTURE_VAL=0;
     TIM_SetCounter(TIM3,0);
    TIM3CH2_CAPTURE_STA|=0X40;  //标记捕获到了上升沿
      TIM_OC2PolarityConfig(TIM3,TIM_ICPolarity_Falling);  //CC1P=1 设置为下降沿捕获
   }     
  }                    
  }
 
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
 
}

void counter1(void)
{
 u32 temp;
 if(TIM3CH2_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
  {
   temp=TIM3CH2_CAPTURE_STA&0X3F;
   temp*=65536;//溢出时间总和
   temp+=TIM3CH2_CAPTURE_VAL;//得到总的高电平时间
//   printf("HIGH:%d us\r\n",temp);//打印总的高点平时间
   LCD_ShowNum(0,16, temp,6,0xffff,0xff);
   TIM3CH2_CAPTURE_STA=0;//开启下一次捕获
  }
}

主函数里面调用
TIM3_Cap_Init(0XFFFF,72-1); //以1Mhz的频率计数 
 while(1)
{
   delay_ms(10);
  counter1();
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-21 16:08:03 | 显示全部楼层
你可以仿真跟踪下代码,看看问题 在哪。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2018-1-10
在线时间
24 小时
发表于 2020-4-4 11:29:15 | 显示全部楼层
请问后来你这个问题解决了吗?我现在也是一上电就是65536
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 16:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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