stm32f429 双路输入捕捉出现的问题?

2019-07-20 03:40发布

本帖最后由 思否学否 于 2017-6-13 22:08 编辑

    以前103 、407写输入捕捉程序,几路通道的输入捕捉都是仿原子例程写的,都不会出现什么问题,今天在stm32f429上写输入捕捉程序。第一个输入捕捉没问题,但第二个通道输入捕捉总是导致程序挂了,,第二个输入捕捉换了几个定时器和通道还是这样,新库感觉用起来好麻烦啊,请问429的库与以前的库有什么需要注意的吗?
初始化仿照原子的修改,中断处理按照以前老库的写法。代码如下:

[mw_shl_code=c,true]void TIM4_IRQnHandler(void)
{

         if(__HAL_TIM_GET_FLAG(&TIM4_Handler, TIM_FLAG_UPDATE) != RESET)
   {
    if(__HAL_TIM_GET_IT_SOURCE(&TIM4_Handler, TIM_IT_UPDATE) !=RESET)
    {
      __HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_UPDATE);
     if((TIM4CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
            {
                        if(TIM4CH1_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½¸ßμçƽáË
                        {
                                if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//¸ßμçƽì«3¤áË
                                {
                                        TIM4CH1_CAPTURE_STA|=0X80;                //±ê¼Ç3é1|2¶»ñáËò»′Î
                                        TIM4CH1_CAPTURE_VAL=0XFFFFFFFF;
                                }else TIM4CH1_CAPTURE_STA++;
                        }         
           }               
                        
    }
  }

        if(__HAL_TIM_GET_IT_SOURCE(&TIM4_Handler, TIM_IT_CC1) !=RESET)
    {
      __HAL_TIM_CLEAR_IT(&TIM4_Handler, TIM_IT_CC1);
      TIM4_Handler.Channel = HAL_TIM_ACTIVE_CHANNEL_1;
               
     if((TIM4CH1_CAPTURE_STA&0X80)==0)//»1Î′3é1|2¶»ñ
                                {
                                        if(TIM4CH1_CAPTURE_STA&0X40)                //2¶»ñμ½ò»¸öϽμÑØ                 
                                                {                                 
                                                        TIM4CH1_CAPTURE_STA|=0X80;                //±ê¼Ç3é1|2¶»ñμ½ò»′θßμçƽÂö¿í
                                                        TIM4CH1_CAPTURE_VAL=HAL_TIM_ReadCapturedValue(&TIM4_Handler,TIM_CHANNEL_1);//»ñè¡μ±Ç°μÄ2¶»ñÖμ.
                                                        TIM_RESET_CAPTUREPOLARITY(&TIM4_Handler,TIM_CHANNEL_1);   //ò»¶¨òaÏèÇå3yÔ-à′μÄéèÖã¡£¡
                                                
                                                }else                                                                  //»1Î′¿aê¼,μúò»′Î2¶»ñéÏéyÑØ
                                                {
                                                        TIM4CH1_CAPTURE_STA=0;                        //Çå¿Õ
                                                        TIM4CH1_CAPTURE_VAL=0;
                                                        TIM4CH1_CAPTURE_STA|=0X40;                //±ê¼Ç2¶»ñμ½áËéÏéyÑØ
                                                //        __HAL_TIM_DISABLE(&TIM3_Handler);        //1رն¨ê±Æ÷5
                                                        __HAL_TIM_SET_COUNTER(&TIM4_Handler,0);
                                                        TIM_RESET_CAPTUREPOLARITY(&TIM4_Handler,TIM_CHANNEL_1);   //ò»¶¨òaÏèÇå3yÔ-à′μÄéèÖã¡£¡
                                                //        __HAL_TIM_ENABLE(&TIM3_Handler);//ê1Äü¶¨ê±Æ÷5
                                                }                    
                                       
      }
      /* Output compare event */
   
       TIM4_Handler.Channel = HAL_TIM_ACTIVE_CHANNEL_CLEARED;
    }
   
}[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。