STM32输入捕获问题

2019-07-24 13:42发布

波形.png

这是要捕捉的波形图  
图中圈出来的是数据起始帧,大概370~390us,后面的数据都是小于这个电平宽。

现在的情况是:用STM32F103RBT6   72MHZ主频  1MHZ捕捉  
数据是这样的:391 280 145 390 265 166 150 149 145 165 149 145 165 150 280 281 149 145 279 165 145 266 166 150 148 145 166 149 145 166 151 281 280  149 145 280 167 144 280 148 267 266 148 166 248 143 166
167
144
166
166
391
281
146
390
266
167
150
148
可以看到有两个390连在一起,捕捉是对的  

但是用  STM32L152RCT6   16MHZ主频   1MHZ捕捉  数据是这样的 272 261 385 141 141 260 158 272 137 158 158 271 137 272 272 260 385 140 140 260 157 272 138 158  157 272 138 272 271 261 384
141
137
260
157
272
138
158
157
272
139
271
272
261
384
141
140
259
152
271
137
158
157
272
138
272
272
261
386
141
141
260
157
272
139
158
156
272
137
271
272

两个380之间隔了很多数据  数据就不对了


void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//捕捉中断  这是STM32L152RC的捕捉部分代码 TIM2CH1_CAPTURE_VAL:高电平时间 LOW_temp:低电平时间
{
       
   if(TIM2==htim->Instance)
         {

          if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获       
                {          
                                if(TIM2CH1_CAPTURE_STA&0X40)                //捕获到一个下降沿                
                                {         
                                         TIM2CH1_CAPTURE_STA |= 0X80;                //标记成功捕获到一次高电平
                                        // TIM2CH1_CAPTURE_VAL=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1);
                                                TIM2CH1_CAPTURE_VAL=TIM2->CCR1;       
                                                printf("%d ",TIM2CH1_CAPTURE_VAL);
                                          TIM2->CNT =0;
                                          TIM2->CCR1=0;
                                         //__HAL_TIM_SET_COUNTER(&htim2,0);
                                         //__HAL_TIM_GET_COMPARE(&htim2,0);//CNT和CCR寄存器都需要清0
                                         __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING); //CC1P=0 设置为上升沿捕获
                                }
                                               
                                else  //还未开始,第一次捕获上升沿
                                {
                                                        TIM2CH1_CAPTURE_STA=0;                        //清空
                                                        LOW_temp=__HAL_TIM_GET_COMPARE(&htim2,TIM_CHANNEL_1);
                                       
                                                        //        printf("low:%d ",LOW_temp);
                                                        TIM2CH1_CAPTURE_VAL=0;
                                                        TIM2CH1_CAPTURE_STA|=0X20;                //标记捕获到了上升沿
                                                        TIM2CH1_CAPTURE_STA|=0X40;                //标记捕获到了上升沿 (调整找高电平用)
                                            TIM2->CNT =0;
                                            TIM2->CCR1=0;
                                                //        __HAL_TIM_SET_COUNTER(&htim2,0);//清空计数值
                                                //        __HAL_TIM_GET_COMPARE(&htim2,0);//CNT和CCR寄存器都需要清0
                                                        __HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_FALLING);        //CC1P=1 设置为下降沿捕获
                          }       
                               
                        }                                                                                   
       
                }
             
}



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