OpenEdv-开源电子网

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

STM32F401 TIM2 CH3 捕获无法进入沿中断

[复制链接]

281

主题

310

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3436
金钱
3436
注册时间
2017-1-13
在线时间
274 小时
发表于 2018-6-28 17:32:14 | 显示全部楼层 |阅读模式
50金钱
请帮忙看看以下程序有什么问题,调试程序发现一个比较奇怪的问题,参考原子定时器输入捕捉程序,改为PA2输入,Tim2 channel3,上升沿触发,方式,可始终收不到上升沿触发中断if(TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET),可以收到if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)中断;请帮忙诊断一下,谢谢!程序如下:




TIM_ICInitTypeDef  TIM2_ICInitStructure;
void TIM2_CH3_Cap_Init(u32 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);           
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);        
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //GPIOA2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;       
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_TIM2); //PA2
                  
        TIM_TimeBaseStructure.TIM_Prescaler=psc;
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseStructure.TIM_Period=arr;  
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

       
     TIM2_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=03       
     TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       
     TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
     TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;          
        TIM2_ICInitStructure.TIM_ICFilter = 0x00;
    TIM_ICInit(TIM2, &TIM2_ICInitStructure);
               
        //TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC1,ENABLE);
        TIM_ITConfig(TIM2,TIM_IT_Update|TIM_IT_CC3,ENABLE);
       

  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;       
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                       
        NVIC_Init(&NVIC_InitStructure);       
       
        TIM_Cmd(TIM2,ENABLE );
       
       
}

u8  TIM2CH3_CAPTURE_STA=0;                                                           
u32        TIM2CH3_CAPTURE_VAL;       

void TIM2_IRQHandler(void)
{             

        if((TIM2CH3_CAPTURE_STA&0X80)==0)
        {
                if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
                {             
                        //if(TIM2CH3_CAPTURE_STA&0X40)
                        {
                                if((TIM2CH3_CAPTURE_STA&0X3F)==0X3F)
                                {
                                        TIM2CH3_CAPTURE_STA|=0X80;               
                                        TIM2CH3_CAPTURE_VAL=0X1F40;
                                }else TIM2CH3_CAPTURE_STA++;
                        }         
                }
                if(TIM_GetITStatus(TIM2, TIM_IT_CC3) != RESET)
                {

                if(TIM2CH3_CAPTURE_STA&0X40)               
                {                                 
                  TIM2CH3_CAPTURE_STA|=0X80;               
                  TIM2CH3_CAPTURE_VAL=TIM_GetCapture1(TIM2);
                       
                TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Rising);
                }else                                                         
                {
                        TIM2CH3_CAPTURE_STA=0;                       
                        TIM2CH3_CAPTURE_VAL=0;
                        TIM2CH3_CAPTURE_STA|=0X40;               
                        TIM_Cmd(TIM2,DISABLE );        
                        TIM_SetCounter(TIM2,0);                        
                        TIM_OC3PolarityConfig(TIM2,TIM_ICPolarity_Falling);               
                        TIM_Cmd(TIM2,ENABLE );        
                }                    
                }                                                                                   
        }       
        TIM_ClearITPendingBit(TIM2, TIM_IT_CC3|TIM_IT_Update);
}

最佳答案

查看完整内容[请看2#楼]

问题已解决,换一个输入接口解决问题。采用PA3作为输入,没有这个问题。PA2为什么不行,原因未知!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

281

主题

310

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3436
金钱
3436
注册时间
2017-1-13
在线时间
274 小时
 楼主| 发表于 2018-6-28 17:32:15 | 显示全部楼层
问题已解决,换一个输入接口解决问题。采用PA3作为输入,没有这个问题。PA2为什么不行,原因未知!
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5773
金钱
5773
注册时间
2013-11-22
在线时间
1211 小时
发表于 2018-6-28 20:59:59 | 显示全部楼层
输入捕获口是否有边沿信号输入?
回复

使用道具 举报

281

主题

310

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3436
金钱
3436
注册时间
2017-1-13
在线时间
274 小时
 楼主| 发表于 2018-6-28 21:20:55 | 显示全部楼层
有的,PA2管脚有输入10Hz的方波。
回复

使用道具 举报

281

主题

310

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3436
金钱
3436
注册时间
2017-1-13
在线时间
274 小时
 楼主| 发表于 2018-6-29 13:27:41 | 显示全部楼层
版主/原子哥,把这个问题给关闭一下。也可给后面碰到同样问题的朋友参考参考!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-6-30 01:37:53 | 显示全部楼层
jiney555 发表于 2018-6-29 13:27
版主/原子哥,把这个问题给关闭一下。也可给后面碰到同样问题的朋友参考参考!

你可以设置答案,这样就自动结题了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 11:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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