OpenEdv-开源电子网

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

用的是TIM4的输入捕获通道2和3,为什莫只有通道3正常,通道2不正常

[复制链接]

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-5-14
在线时间
8 小时
发表于 2017-5-14 13:19:40 | 显示全部楼层 |阅读模式
1金钱
#include<printf.h>
#include<systick.h>
#include<time54cap.h>
#include<ceju.h>
#include<printf.h>


int main()  
{  
        u8 a=10;
        printf_init(115200);
         
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                  
        TIM4_Cap_Init(0XFFFF,72-1);
       
         printf("&#190;àà&#235;ê&#199;£o%d\r\n", a);
       
         
         while(1)
        {
       
       
printf("7距离是:o%d\r\n", cedistance7());       

printf("6距离是:o%d\r\n", cedistance6());
               
                delay_ms(500);
       
        }
}
//////////////////////////////////////////////////////////////////////////////////////////////////
#include<time54cap.h>
void TIM4_Cap_Init(u16 arr,u16 psc)
{         
                GPIO_InitTypeDef GPIO_InitStructure;
                TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
                NVIC_InitTypeDef NVIC_InitStructure;
                TIM_ICInitTypeDef  TIM4_ICInitStructure;

                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);       
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  

                GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_7|GPIO_Pin_8;  
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
                GPIO_ResetBits(GPIOB,GPIO_Pin_7|GPIO_Pin_8);       


                TIM_TimeBaseStructure.TIM_Period = arr;
                TIM_TimeBaseStructure.TIM_Prescaler =psc;   
                TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
                TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

       
              TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;
                  TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       
                  TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
                  TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;       
                  TIM4_ICInitStructure.TIM_ICFilter = 0x00;
                  TIM_ICInit(TIM4, &TIM4_ICInitStructure);
               

                  TIM4_ICInitStructure.TIM_Channel = TIM_Channel_3;
                  TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       
                  TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
                  TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;       
                  TIM4_ICInitStructure.TIM_ICFilter = 0x00;
                  TIM_ICInit(TIM4, &TIM4_ICInitStructure);
                  
               
                NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;   
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);  

                TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_CC3,ENABLE);   
                TIM_Cmd(TIM4,ENABLE );
                 
}
///////////////////////////////////////////////////////////////////////////////////////////////         
#include<ceju.h>
extern u8  TIM4CH2_CAPTURE_STA;
extern u16        TIM4CH2_CAPTURE_VAL;

extern u8  TIM4CH3_CAPTURE_STA;
extern u16        TIM4CH3_CAPTURE_VAL;


u16 cedistance6()
{     u16 distance;
while((TIM4CH2_CAPTURE_STA&0X80)==0);
distance=(17*TIM4CH2_CAPTURE_VAL)/1000;
TIM4CH2_CAPTURE_STA=0;
return  distance;
}
u16 cedistance7()
{     u16 distance;
while((TIM4CH3_CAPTURE_STA&0X80)==0);
distance=(17*TIM4CH3_CAPTURE_VAL)/1000;
TIM4CH3_CAPTURE_STA=0;
return  distance;
}
//////////////////////////////////////////////////////////////////////////////////////////
#include "stm32f10x_it.h"

u8  TIM4CH2_CAPTURE_STA=0;                                                   
u16        TIM4CH2_CAPTURE_VAL;       
u8  TIM4CH3_CAPTURE_STA=0;                                                   
u16        TIM4CH3_CAPTURE_VAL;       

void TIM4_IRQHandler(void)
{

       

                if((TIM4CH2_CAPTURE_STA&0X80)==0)
        {          
       
                          if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)
                                 {       
                                                                        if(TIM4CH2_CAPTURE_STA&0X40)                               
                                                                        {                                 
                                                                                TIM4CH2_CAPTURE_STA|=0X80;               
                                                                                TIM4CH2_CAPTURE_VAL=TIM_GetCapture2(TIM4);
                                                                                TIM_OC2PolarityConfig(TIM4,TIM_ICPolarity_Rising);
                                                                        }else                                                                 
                                                                        {
                                                                                TIM4CH2_CAPTURE_STA=0;                       
                                                                                TIM4CH2_CAPTURE_VAL=0;
                                                                                TIM_SetCounter(TIM4,0);
                                                                                TIM4CH2_CAPTURE_STA|=0X40;               
                                                                                TIM_OC2PolarityConfig(TIM4,TIM_ICPolarity_Falling);               
                                                                        }                    
                                }                                                                                   
        }
       
                if((TIM4CH3_CAPTURE_STA&0X80)==0)
        {          
       
                          if (TIM_GetITStatus(TIM4, TIM_IT_CC3) != RESET)
                                 {       
                                                                        if(TIM4CH3_CAPTURE_STA&0X40)                               
                                                                        {                                 
                                                                                TIM4CH3_CAPTURE_STA|=0X80;               
                                                                                TIM4CH3_CAPTURE_VAL=TIM_GetCapture3(TIM4);
                                                                                TIM_OC3PolarityConfig(TIM4,TIM_ICPolarity_Rising);
                                                                        }else                                                                 
                                                                        {
                                                                                TIM4CH3_CAPTURE_STA=0;                       
                                                                                TIM4CH3_CAPTURE_VAL=0;
                                                                                TIM_SetCounter(TIM4,0);
                                                                                TIM4CH3_CAPTURE_STA|=0X40;               
                                                                                TIM_OC3PolarityConfig(TIM4,TIM_ICPolarity_Falling);               
                                                                        }                    
                                }                                                                                   
        }
       
    TIM_ClearITPendingBit(TIM4,TIM_IT_CC2|TIM_IT_CC3);

}










       

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

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-5-14
在线时间
8 小时
 楼主| 发表于 2017-5-14 13:22:55 | 显示全部楼层
还有个问题就是,在别的开发板上正常,为什莫在战舰V3上就不行
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-5-14
在线时间
8 小时
 楼主| 发表于 2017-5-14 13:26:02 | 显示全部楼层
用的是原子送的程序,自己改写的,找了好久,还是找不到错误在何处
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-5-14
在线时间
8 小时
 楼主| 发表于 2017-5-14 13:46:37 | 显示全部楼层
程序为什莫会死在这里while((TIM4CH2_CAPTURE_STA&0X80)==0);即使我给了此通道一段高电平
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-5-14
在线时间
8 小时
 楼主| 发表于 2017-5-14 14:37:06 来自手机 | 显示全部楼层
有人没,求助啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 06:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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