野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14590|回复: 8

输入捕获

[复制链接]
发表于 2015-11-15 16:22:41 | 显示全部楼层 |阅读模式
有谁输入捕获可以捕获到两个通道的值得啊???????????????????????
回复

使用道具 举报

发表于 2015-11-16 08:43:37 | 显示全部楼层
例程不是已经有了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-16 09:11:44 | 显示全部楼层
flyleaf 发表于 2015-11-16 08:43
例程不是已经有了吗

可是我按照例程那样写,也捕获不到两路值,真心不知道为什么?????

而且我换其他的定时器通道有的一路都捕获不到值,导师催得紧就来请教大神了???????????
回复 支持 反对

使用道具 举报

发表于 2015-11-16 09:44:02 | 显示全部楼层
Vicky 发表于 2015-11-16 09:11
可是我按照例程那样写,也捕获不到两路值,真心不知道为什么?????

而且我换其他的定时器通道有的 ...

1.要选对TIM对应的GPIO并对GPIO进行初始化
2.初始化TIM的时候要对每个用到的通道都初始化并使能
回复 支持 反对

使用道具 举报

发表于 2015-11-16 09:57:18 | 显示全部楼层
代码贴贴上来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-16 09:59:15 | 显示全部楼层
fire 发表于 2015-11-16 09:57
代码贴贴上来看看

static void TIM2_GPIO_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);

  /*GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

}


/// TIM2ÖD¶ÏóÅÏ輶ÅäÖÃ
void TIM2_NVIC_Config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
   
    //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                                                                                                         
    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;          
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

/*
* TIM_Period / Auto Reload Register(ARR) = 1000   TIM_Prescaler--71
* ÖD¶ÏÖüÆúÎa = 1/(72MHZ /72) * 1000 = 1ms
*
* TIMxCLK/CK_PSC --> TIMxCNT --> TIM_Period(ARR) --> ÖD¶Ï ÇòTIMxCNTÖØÖÃÎa0ÖØD¼Æêy
*/
void TIM2_Cap_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
          TIM_ICInitTypeDef    TIM_ICInitStructure;
          TIM_OCInitTypeDef    TIM_OCInitStructure;
  
                /* éèÖÃTIM2CLK Îa 72MHZ */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
    TIM_DeInit(TIM2);
       
       
          TIM_TimeBaseStructure.TIM_Prescaler= (uint16_t)(72000000/2000000)-1;
          TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
          /* ×Ô¶ˉÖØ×°ÔؼÄ′æÆ÷ÖüÆúμÄÖμ(¼ÆêyÖμ) */
    TIM_TimeBaseStructure.TIM_Period=65535;
          /* ¶Ôía2¿ê±Öó½øDD2éÑùμÄê±Öó·ÖÆμ,ÕaàïûóDóÃμ½ */
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_RepetitionCounter= 0x00;   
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
       
          
          TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;
          TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;
                TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
       
          TIM_ICInitStructure.TIM_ICFilter = 0x01;
                 
                 /*TIM2μÄí¨μàËÄéèÖÃÎa  êäèë2¶»ñ  Ä£ê½ */
                TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;
                TIM_ICInit(TIM2,&TIM_ICInitStructure);
                TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;
                TIM_ICInit(TIM2,&TIM_ICInitStructure);
               
                TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
                TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);
    TIM_Cmd(TIM2, ENABLE);                                                                                                                                               
      
}

void TIM2_ANG_Init(void)
{
        TIM2_GPIO_Config();
        TIM2_Cap_Config();       
        TIM2_NVIC_Config();
}


下面是中断里的
void TIM2_IRQHandler(void)
{   u8 i=0;
     if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
        {

    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  }

if(TIM_GetITStatus(TIM2, TIM_IT_CC1) == SET)
{
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
        TIM2Capture[0] = TIM_GetCapture1(TIM2);       
}

if(TIM_GetITStatus(TIM2, TIM_IT_CC4) == SET)
{
        TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);
        TIM2Capture[1] = TIM_GetCapture2(TIM2);       
}

TIM_ITConfig(TIM2, TIM_IT_CC1, DISABLE);
TIM_ITConfig(TIM2, TIM_IT_CC4, DISABLE);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-16 10:01:59 | 显示全部楼层
flyleaf 发表于 2015-11-16 09:44
1.要选对TIM对应的GPIO并对GPIO进行初始化
2.初始化TIM的时候要对每个用到的通道都初始化并使能

那都做了啊,要不然A0也不可能捕获到值啊
回复 支持 反对

使用道具 举报

发表于 2015-11-16 10:13:36 | 显示全部楼层
Vicky 发表于 2015-11-16 10:01
那都做了啊,要不然A0也不可能捕获到值啊

啥都别说,你参考我们的代码改即可 ,一句句对照我们的代码,我已经在你另外一天帖子回复你了,看了下你代码,看不出啥问题
还有一个你要注意的是,使用捕获的IO你不要复用,不要用在其他地方  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-30 11:02:21 | 显示全部楼层
flyleaf 发表于 2015-11-16 08:43
例程不是已经有了吗

管理员问下:STM32F103ZET6宏定义里面没有 float 和 double  类型,我想应用都不起作用怎么解决啊 ????????

用着两种强制转换也没用!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-23 02:31 , Processed in 0.033514 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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