OpenEdv-开源电子网

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

F103的TIM5_CH2测方波低电平时间

[复制链接]

9

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
567
金钱
567
注册时间
2017-7-27
在线时间
99 小时
发表于 2018-4-10 16:19:43 | 显示全部楼层 |阅读模式
5金钱
我的这个程序是按照原子哥的例程改的,但为啥数据不对呢?请教原子哥和各位大神。
初始化:
void TIM5_Cap_Init(u16 arr,u16 psc)
{         
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);        //ê1ÄüTIM5ê±Öó
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  //ê1ÄüGPIOAê±Öó
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;  //PA0 Çå3y֮ǰéèÖà 
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; //PA0 êäèë  
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        GPIO_ResetBits(GPIOA,GPIO_Pin_0);                                                 //PA0 ÏÂà-
       
       
        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);                                                 ////PA1
       
       
        //3õê¼»ˉ¶¨ê±Æ÷5 TIM5         
        TIM_TimeBaseStructure.TIM_Period=arr; //é趨¼ÆêyÆ÷×Ô¶ˉ֨װÖμ
        TIM_TimeBaseStructure.TIM_Prescaler=psc;         //Ô¤·ÖÆμÆ÷   
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure); //¸ù¾YTIM_TimeBaseInitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ

        //3õê¼»ˉTIM5êäèë2¶»ñ2Îêy
           TIM5_ICInitStructure.TIM_Channel=TIM_Channel_1; //CC1S=01         Ñ¡Ôñêäèë¶Ë IC1ó3éäμ½TI1éÏ
          TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;        //éÏéyÑØ2¶»ñ/////
          TIM5_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; //ó3éäμ½TI1éÏ
          TIM5_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;         //ÅäÖÃêäèë·ÖÆμ,2»·ÖÆμ
          TIM5_ICInitStructure.TIM_ICFilter=0x00;//IC1F=0000 ÅäÖÃêäèëÂË2¨Æ÷ 2»ÂË2¨
          TIM_ICInit(TIM5,&TIM5_ICInitStructure);
       
          TIM5_ICInitStructure.TIM_Channel=TIM_Channel_2;
                TIM5->CCMR1|=1<<8;   //CC2通道被配置为输入,IC2映射在TI2上;
                TIM5->CCMR1|=0<<12 ;//IC2F=0000,无滤波
                TIM5->CCMR1|=0<<10; //不分频
                TIM5->CCER|=1<<4;  //捕获2使能
                TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Falling;//CH2 &#207;&#194;&#189;μ&#209;&#216;2&#182;&#187;&#241;
          TIM_ICInit(TIM5,&TIM5_ICInitStructure);
       
        //&#214;D&#182;&#207;·&#214;×é3&#245;ê&#188;&#187;ˉ
        NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;  //TIM5&#214;D&#182;&#207;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;  //&#207;è&#213;&#188;ó&#197;&#207;è&#188;&#182;2&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;  //′óó&#197;&#207;è&#188;&#182;0&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //IRQí¨μà±&#187;ê1&#196;ü
        NVIC_Init(&NVIC_InitStructure);  //&#184;ù&#190;YNVIC_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèNVIC&#188;&#196;′&#230;&#198;÷
       
        //TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,ENABLE);//&#212;êDí&#184;üD&#194;&#214;D&#182;&#207; ,&#212;êDíCC1IE,CC2IE2&#182;&#187;&#241;&#214;D&#182;&#207;       
        TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC2,ENABLE);
  TIM_Cmd(TIM5,ENABLE);         //ê1&#196;ü&#182;¨ê±&#198;÷5

}



中断:(这里屏蔽了CH1的)
//&#182;¨ê±&#198;÷5&#214;D&#182;&#207;·t&#206;&#241;3ìDò       
void TIM5_IRQHandler(void)
{
        //CH1
/*if((TIM5CH1_CAPTURE_STA&0X80)==0)//&#187;1&#206;′3é1|2&#182;&#187;&#241;               
{
       
         if(TIM_GetITStatus(TIM5, TIM_IT_Update)!=RESET)                 
        {            
                        if(TIM5CH1_CAPTURE_STA&0X40)//ò&#209;&#190;-2&#182;&#187;&#241;μ&#189;&#184;&#223;μ&#231;&#198;&#189;á&#203;
                        {
                                if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//&#184;&#223;μ&#231;&#198;&#189;ì&#171;3¤á&#203;
                                {
                                        TIM5CH1_CAPTURE_STA|=0X80;//±ê&#188;&#199;3é1|2&#182;&#187;&#241;á&#203;ò&#187;′&#206;&#184;&#223;μ&#231;&#198;&#189;
                                        TIM5CH1_CAPTURE_VAL=0XFFFF;
                                }else TIM5CH1_CAPTURE_STA++;
                        }         
        }
         
        if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)//2&#182;&#187;&#241;1·¢éú2&#182;&#187;&#241;ê&#194;&#188;t
        {
               
                if(TIM5CH1_CAPTURE_STA&0x40)//        //2&#182;&#187;&#241;μ&#189;ò&#187;&#184;&#246;&#207;&#194;&#189;μ&#209;&#216;        
                {               
                        TIM5CH1_CAPTURE_STA|=0X80;                  //±ê&#188;&#199;3é1|2&#182;&#187;&#241;μ&#189;ò&#187;′&#206;&#184;&#223;μ&#231;&#198;&#189;&#194;&#246;&#191;í
                        TIM5CH1_CAPTURE_VAL=TIM5->CCR1; //2&#182;&#187;&#241;&#214;μ  
                        TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 éè&#214;&#195;&#206;aé&#207;éy&#209;&#216;2&#182;&#187;&#241;
                }
                else                                                                  //&#187;1&#206;′&#191;aê&#188;,μúò&#187;′&#206;2&#182;&#187;&#241;é&#207;éy&#209;&#216;
                {                                 
                        TIM5CH1_CAPTURE_STA=0;                        //&#199;&#229;&#191;&#213;
                        TIM5CH1_CAPTURE_VAL=0;
                        TIM5->CNT=0;
                        TIM5CH1_CAPTURE_STA|=0X40;                //±ê&#188;&#199;2&#182;&#187;&#241;μ&#189;á&#203;é&#207;éy&#209;&#216;
                  TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);                //CC1P=1 éè&#214;&#195;&#206;a&#207;&#194;&#189;μ&#209;&#216;2&#182;&#187;&#241;
                }                    
               
        }
}*/
//----------CH2:

if((TIM5CH2_CAPTURE_STA&0X80)==0)//&#187;1&#206;′3é1|2&#182;&#187;&#241;               
{
       
        if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET)                 
        {            
                        if(TIM5CH2_CAPTURE_STA&0X40)//ò&#209;&#190;-2&#182;&#187;&#241;μ&#189; μíμ&#231;&#198;&#189;á&#203;
                        {
                                if((TIM5CH2_CAPTURE_STA&0X3F)==0X3F)//μíμ&#231;&#198;&#189;ì&#171;3¤á&#203;
                                {
                                        TIM5CH2_CAPTURE_STA|=0X80;//±ê&#188;&#199;3é1|2&#182;&#187;&#241;á&#203;ò&#187;′&#206;diμ&#231;&#198;&#189;
                                        TIM5CH2_CAPTURE_VAL=0XFFFF;
                                }else TIM5CH2_CAPTURE_STA++;
                        }         
        }
         
        if(TIM_GetITStatus(TIM5,TIM_IT_CC2)!=RESET)//2&#182;&#187;&#241;2·¢éú2&#182;&#187;&#241;ê&#194;&#188;t              
        {
                                    
                if((TIM5CH1_CAPTURE_STA&0x40)==0)//        //2&#182;&#187;&#241;μ&#189;ò&#187;&#184;&#246; é&#207;éy&#209;&#216;               
                {       
       LED1=1;                       
                        TIM5CH2_CAPTURE_STA|=0X80;                  //±ê&#188;&#199;3é1|2&#182;&#187;&#241;μ&#189;ò&#187;′&#206;diμ&#231;&#198;&#189;&#194;&#246;&#191;í                                          
                //        TIM5CH2_CAPTURE_VAL=TIM5->CCR2-TIM5CH1_CAPTURE_VAL; //2&#182;&#187;&#241;diμ&#231;&#198;&#189;&#214;μ                                      
                        TIM5CH2_CAPTURE_VAL=TIM5->CCR2;                                                                           
                        TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Falling); //éè&#214;&#195;&#206;a&#207;&#194;&#189;μ&#209;&#216;2&#182;&#187;&#241;               
                }
                else                                                                  //&#187;1&#206;′&#191;aê&#188;,μúò&#187;′&#206;2&#182;&#187;&#241;  &#207;&#194;&#189;μ&#209;&#216;
                {                 
         LED1=0;                       
                        TIM5CH2_CAPTURE_STA=0;                        //&#199;&#229;&#191;&#213;
                        TIM5CH2_CAPTURE_VAL=0;
                        TIM5->CNT=0;
                        TIM5CH2_CAPTURE_STA|=0X40;                //±ê&#188;&#199;2&#182;&#187;&#241;μ&#189;á&#203;&#207;&#194;&#189;μ&#209;&#216;
                  TIM_OC2PolarityConfig(TIM5,TIM_ICPolarity_Rising);                //éè&#214;&#195;&#206;aé&#207;éy&#209;&#216;2&#182;&#187;&#241;               
                }                    
               
        }
}

        //TIM_ClearITPendingBit(TIM5,TIM_IT_CC1|TIM_IT_Update|TIM_IT_CC2); //&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
        TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC2); //&#199;&#229;3y&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
}
////////////


主函数里:
        while(1)
        {
                delay_ms(300);
               
                /*if(TIM5CH1_CAPTURE_STA&0X80)//3é1|2&#182;&#187;&#241;μ&#189;á&#203;ò&#187;′&#206;é&#207;éy&#209;&#216;
                {
                        high=TIM5CH1_CAPTURE_STA&0X3F;//μíáù&#206;&#187;&#206;aò&#231;3&#246;′&#206;êy         
                        high*=65536;//ò&#231;3&#246;ê±&#188;&#228;×üoí//ò&#187;′&#206;ò&#231;3&#246;ê±&#188;&#228;&#206;a65536us,óDTIM5CH1_CAPTURE_STA&0X3F′&#206;ò&#231;3&#246;
                        high+=TIM5CH1_CAPTURE_VAL;//μ&#195;μ&#189;×üμ&#196;&#184;&#223;μ&#231;&#198;&#189;ê±&#188;&#228;
                        printf("HIGH:%.3Lf us\r\n",high);//′òó&#161;×üμ&#196;&#184;&#223;μ&#231;&#198;&#189;ê±&#188;&#228;
                        TIM5CH1_CAPTURE_STA=0;//&#191;a&#198;&#244;&#207;&#194;ò&#187;′&#206;2&#182;&#187;&#241;
                }*/
               
                if(TIM5CH2_CAPTURE_STA&0X80)//3é1|2&#182;&#187;&#241;μ&#189;á&#203;ò&#187;′&#206;é&#207;éy&#209;&#216;
                {
                        printf("%d",TIM5CH2_CAPTURE_VAL);
                        low=TIM5CH2_CAPTURE_STA&0X3F;//μíáù&#206;&#187;&#206;aò&#231;3&#246;′&#206;êy         
                        low*=65536;//ò&#231;3&#246;ê±&#188;&#228;×üoí//ò&#187;′&#206;ò&#231;3&#246;ê±&#188;&#228;&#206;a65536us,óDTIM5CH1_CAPTURE_STA&0X3F′&#206;ò&#231;3&#246;
                        low+=TIM5CH2_CAPTURE_VAL;//μ&#195;μ&#189;×üμ&#196;&#184;&#223;μ&#231;&#198;&#189;ê±&#188;&#228;
                        printf("--LOW:%.3Lf us\r\n",low);//′òó&#161;×üμ&#196;&#184;&#223;μ&#231;&#198;&#189;ê±&#188;&#228;
                        TIM5CH2_CAPTURE_STA=0;//&#191;a&#198;&#244;&#207;&#194;ò&#187;′&#206;2&#182;&#187;&#241;
                }
       
        }











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

使用道具 举报

9

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
567
金钱
567
注册时间
2017-7-27
在线时间
99 小时
 楼主| 发表于 2018-4-10 16:21:26 | 显示全部楼层
我发现应该是计数器没清零,但还是没找到问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-4-11 01:14:41 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 08:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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