OpenEdv-开源电子网

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

ministm32捕获问题

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
发表于 2013-9-27 09:48:06 | 显示全部楼层 |阅读模式

void TIM2_Init(u16 arr,u16 psc)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 TIM_TimeBaseInitTypeDef TIM_TimeInitStructure;
 TIM_ICInitTypeDef TIM_ICInitStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

 //GPIOA0初始化
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//下拉输入
 GPIO_Init(GPIOA,&GPIO_InitStructure);
 GPIO_ResetBits(GPIOA,GPIO_Pin_1);//PA0上电为低电平

 //TIM2初始化
 TIM_TimeInitStructure.TIM_Prescaler=psc;
 TIM_TimeInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
 TIM_TimeInitStructure.TIM_Period=arr;
 TIM_TimeInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
 TIM_TimeBaseInit(TIM2,&TIM_TimeInitStructure);

 //TIM设置 TIM2 的输入比较参数,开启捕获TIM2
 TIM_ICInitStructure.TIM_Channel=TIM_Channel_2; //选择输入端IC2映射到TI2
 TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising; //上升沿捕获
 TIM_ICInitStructure.TIM_ICSelection=0x0100;//IC2映射到TI2
 TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;//不分频
 TIM_ICInitStructure.TIM_ICFilter=0x0;
 TIM_ICInit(TIM2,&TIM_ICInitStructure);

 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);  //TIM_IT_Update=0x0001 允许更新中断 TIM3中断源的使能
 TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);
 //TIM_ITConfig(TIM2,TIM_DMA_Update,ENABLE);
 TIM_ARRPreloadConfig(TIM2,ENABLE);//APRE=1;每一次更新事件(UEV)时,才把预装在寄存器的内容传送到影子寄存器
 TIM_Cmd(TIM2,ENABLE);//使能定时器开始计数

 //中断配置
 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
 NVIC_Init(&NVIC_InitStructure);
 
}
void TIM2_IRQHandler(void)

 if(TIM2CH1_CAPTURE_SAT&0x80==0)//还没有捕获成功
 {
  if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  {
   if(TIM2CH1_CAPTURE_SAT&0x40)
   {
    if((TIM2CH1_CAPTURE_SAT&0x3f)==0x3f)
    {
     TIM2CH1_CAPTURE_SAT|=0x80;
     TIM2CH1_CAPTURE_VAL=0xffff;
    }
    else
     TIM2CH1_CAPTURE_SAT++;
   }
  }
  if(TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
  {
   
   if(TIM2CH1_CAPTURE_SAT&0x40)
   {
    TIM2CH1_CAPTURE_SAT|=0x80;
    TIM2CH1_CAPTURE_VAL=TIM_GetCapture2(TIM2);
    TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising);
    GPIO_ResetBits(GPIOD,GPIO_Pin_2);

   }
   else
   {
    TIM2CH1_CAPTURE_VAL=0;
    TIM2CH1_CAPTURE_SAT=0;    
    TIM_SetCounter(TIM2,0);     
    TIM2CH1_CAPTURE_SAT|=0x40; 
    TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); 
    GPIO_ResetBits(GPIOA,GPIO_Pin_8); 
   }
  }
 }
  
 TIM_ClearITPendingBit(TIM2, TIM_IT_Update|TIM_IT_CC2);
}
怎么ministm32捕获不行呢,不知道程序那地方有问题,中断就是进不去

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

使用道具 举报

42

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2013-6-18
在线时间
59 小时
发表于 2013-9-27 10:00:18 | 显示全部楼层
回复【楼主位】ctp2013:
---------------------------------
楼主你的代码太长了 懒得看 建议你在keil中查看关键寄存器变化的值 看看哪里有问题
只为摆正你的倒影,我倾倒了整个世界。
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2013-9-24
在线时间
0 小时
 楼主| 发表于 2013-9-27 10:31:34 | 显示全部楼层
你说的查看寄存器的值 这个我还没有尝试过  我以前只有过看IO的值得变化
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-27 11:32:23 | 显示全部楼层
提问前,先搜索论坛!
八楼:http://www.openedv.com/posts/list/13114.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-12 14:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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