OpenEdv-开源电子网

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

STM32F103定时器双通道输入捕获PB4,PB5双通道

[复制链接]

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
发表于 2021-12-23 15:14:59 | 显示全部楼层 |阅读模式
1金钱
GPIO_InitTypeDef WheelGPIO_InitStructure;
  NVIC_InitTypeDef WheelNVIC_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_ICInitTypeDef  TIM_ICInitStructure;
       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//引脚复用
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
       
          //速度捕获通道时基和通道配置 时钟 10000
  TIM_TimeBaseStructure.TIM_Period = 1;       
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

        /**************左轮配置******************/
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0f;
       
          //左轮速度捕获输入管脚配置 PA8
  WheelGPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4;
  WheelGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  WheelGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &WheelGPIO_InitStructure);
       
        TIM_ICInit(TIM3, &TIM_ICInitStructure);
        TIM_ITConfig(TIM3, TIM_IT_Update|TIM_IT_CC1, ENABLE);       
/**************左轮配置结束******************/

        /**************右轮配置******************/
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0f;
       
          //右轮速度捕获输入管脚配置 PA11
  WheelGPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;
  WheelGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  WheelGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &WheelGPIO_InitStructure);
       
        TIM_ICInit(TIM3, &TIM_ICInitStructure);
        TIM_ITConfig(TIM3, TIM_IT_Update|TIM_IT_CC2, ENABLE);       


  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  TIM_Cmd(TIM3, ENABLE);

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

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2021-12-23 15:15:30 | 显示全部楼层
void TIM3_IRQHandler(void)
{
        static uint32_t Extern_Pulse_Count=0;
        static uint32_t Time4_Count_Num=0;
                static uint32_t Extern_Pulse_Count1=0;
            static uint32_t Time4_Count_Num1=0;
                //if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET )  //TIM4溢出
        if ( TIM_GetITStatus(TIM3 , TIM_IT_CC1) != RESET )  //TIM4溢出
                {
                                //TIM_ClearITPendingBit(TIM3 , TIM_IT_CC1);  //清楚中断标志位
                        if(gDisplayMgrData.Cortol_Mode_State==External)
                        {
                                Time4_Count_Num=TIM_GetCounter(TIM7)+(TIM7_Flag*0xFFFF);

                                Count_Middle5=Count_Middle4;               
                                Count_Middle4=Count_Middle3;                                                    //更新计数数组中的值
                                Count_Middle3=Count_Middle2;
                                Count_Middle2=Count_Middle1;
                                Count_Middle1=Time4_Count_Num-Extern_Pulse_Count;
//                               
//                                Count_2Add_Min1= Min_zuixiao(Count_Middle1,Count_Middle2,Count_Middle3,Count_Middle4);         //最小值
//                                Count_2Add_Min2= Min_daoshudierxiao(Count_Middle1,Count_Middle2,Count_Middle3,Count_Middle4);   //倒数第二小
//                                                       
//                                Count_Add_Correct_Num_2ge=Count_Middle1+Count_Middle2+Count_Middle3+Count_Middle4-Count_2Add_Min1-Count_2Add_Min2;    //4个脉冲计数
                                       
         Count_Zhongjianzhi_5num=Zhongjianzhi_5num(Count_Middle1,Count_Middle2,Count_Middle3,Count_Middle4,Count_Middle5);               
                               
                               
                                if(TIM7_Flag){TIM7_Flag=0;}
                               
//                                Q_Frequent_Set=40000/(Time4_Count_Num-Extern_Pulse_Count); //计算Q_频率
//                                Q_Frequent_Set=30000/(Time4_Count_Num-Extern_Pulse_Count); //计算Q_频率
//                                Q_Frequent_Set=40000/Count_Add_Correct_Num_2ge; //计算Q_频率
                                gDisplayMgrData.Q_Frequent_Set=2000000.0f/ Count_Zhongjianzhi_5num; //计算Q_频率
                               
                               
//                                        Q_Frequent_Set=1440000/ Count_Zhongjianzhi_5num; //计算Q_频率
                               
//                                if(gDisplayMgrData.Q_Frequent_Set<Laser_Threshold.Fre_Mininum)  //Threshold
//                                {
//                                        gDisplayMgrData.Q_Frequent_Set=Laser_Threshold.Fre_Mininum;
//                                }
//                                else if(gDisplayMgrData.Q_Frequent_Set>Laser_Threshold.Fre_Maximum) //Threshold
//                                {
//                                        gDisplayMgrData.Q_Frequent_Set=Laser_Threshold.Fre_Maximum;
//                                }
                                if(Time4_Count_Num>0xFFFE)
                                {
                                        Extern_Pulse_Count=Time4_Count_Num-0xFFFF;
                                }
                                else
                                {
                                        Extern_Pulse_Count=Time4_Count_Num;
                                }
                        }
                }
               
               
                if ( TIM_GetITStatus(TIM3 , TIM_IT_CC2) != RESET )  //TIM4溢出
                {
                                //TIM_ClearITPendingBit(TIM3 , TIM_IT_CC2);  //清楚中断标志位
       
                        if(gDisplayMgrData.Cortol_Mode_State==External)
                        {
                                Time4_Count_Num1=TIM_GetCounter(TIM7)+(TIM7_Flag*0xFFFF);

                                Count_Middle51=Count_Middle41;               
                                Count_Middle41=Count_Middle31;                                                    //更新计数数组中的值
                                Count_Middle31=Count_Middle21;
                                Count_Middle21=Count_Middle11;
                                Count_Middle11=Time4_Count_Num1-Extern_Pulse_Count1;
//                               
//                                Count_2Add_Min1= Min_zuixiao(Count_Middle1,Count_Middle2,Count_Middle3,Count_Middle4);         //最小值
//                                Count_2Add_Min2= Min_daoshudierxiao(Count_Middle1,Count_Middle2,Count_Middle3,Count_Middle4);   //倒数第二小
//                                                       
//                                Count_Add_Correct_Num_2ge=Count_Middle1+Count_Middle2+Count_Middle3+Count_Middle4-Count_2Add_Min1-Count_2Add_Min2;    //4个脉冲计数
                                       
         Count_Zhongjianzhi_5num1=Zhongjianzhi_5num(Count_Middle11,Count_Middle21,Count_Middle31,Count_Middle41,Count_Middle51);               
                               
                               
                                if(TIM7_Flag){TIM7_Flag=0;}
                               
//                                Q_Frequent_Set=40000/(Time4_Count_Num-Extern_Pulse_Count); //计算Q_频率
//                                Q_Frequent_Set=30000/(Time4_Count_Num-Extern_Pulse_Count); //计算Q_频率
//                                Q_Frequent_Set=40000/Count_Add_Correct_Num_2ge; //计算Q_频率
                                gDisplayMgrData.Q_Frequent_Set1=1000000/ Count_Zhongjianzhi_5num1; //计算Q_频率
                               
                               
//                                        Q_Frequent_Set=1440000/ Count_Zhongjianzhi_5num; //计算Q_频率
                               
//                                if(gDisplayMgrData.Q_Frequent_Set<Laser_Threshold.Fre_Mininum)  //Threshold
//                                {
//                                        gDisplayMgrData.Q_Frequent_Set=Laser_Threshold.Fre_Mininum;
//                                }
//                                else if(gDisplayMgrData.Q_Frequent_Set>Laser_Threshold.Fre_Maximum) //Threshold
//                                {
//                                        gDisplayMgrData.Q_Frequent_Set=Laser_Threshold.Fre_Maximum;
//                                }
                                if(Time4_Count_Num1>0xFFFE)
                                {
                                        Extern_Pulse_Count1=Time4_Count_Num1-0xFFFF;
                                }
                                else
                                {
                                        Extern_Pulse_Count1=Time4_Count_Num1;
                                }
                        }
                }
                 TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
            TIM_ClearITPendingBit(TIM3, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
}
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2021-12-23 15:15:54 | 显示全部楼层
不进入中断?是什么原因?
回复

使用道具 举报

63

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1136
金钱
1136
注册时间
2015-11-29
在线时间
146 小时
 楼主| 发表于 2021-12-23 15:17:54 | 显示全部楼层
if ( TIM_GetITStatus(TIM3 , TIM_IT_CC1) != RESET )这句话不进去?不知道什么原因
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1481
注册时间
2020-8-19
在线时间
336 小时
发表于 2021-12-23 15:28:24 | 显示全部楼层
也就是说条件不满足,没有捕获到
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-21 01:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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