我使用的芯片是STM32F103T8U6,做输入脉冲捕获,目的实现相邻脉冲时间间隔统计,可是我用信号发生器模拟脉冲输入的时候,脉冲输入频率大于60Hz串口通讯就不稳定了,在大的话串口受到很大影响,直到不通讯了。请大侠指点。
void NVIC_Configuration(void)
}
//-----------------------------------------------------------------------------
void Initial_Timer2_ExternalClock(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
//----
TIM_DeInit(TIM2); //yjj??
TIM_TimeBaseStructure.TIM_Period = 4999;
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //??????count???????á±?·????????ó????±?·?????????????????1??
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //=TIM1_CKD_DIV4,??????CK_INT??·????????ùfilter???????í????????????????
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò??????????
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù??????
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
//----------------------------------------------------
TIM_Cmd(TIM2, ENABLE); //????TIMx???è
}
//------------------------------------------------------
void TIM2_IRQHandler(void)
{
//----
if(TIM_GetFlagStatus(TIM2, TIM_IT_CC1) != RESET)
{
if (DI_X1 == 0)
{
PTim2Cout++;
if(chen == 0 && PTim2Cout > 10)
{
PTim2Cout = 0;
chen = 1;
GPIO_SetBits(MCU_POWER_DIR); //??????????
}
else if(chen == 1 && PTim2Cout > 6)
{
chen = 0;
PTim2Cout = 0;
GPIO_ResetBits(MCU_POWER_DIR); //??????????
}
}
else PTim2Cout = 0;
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}
}
//-----------------------------------------------------------------------------
//?????¨?±?÷?????????????????±????????????PA6????????????????
void Initial_Timer3_ExternalClock(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM3_ICInitStructure;
//----
TIM_DeInit(TIM3); //yjj??
TIM_TimeBaseStructure.TIM_Period = 65535;
TIM_TimeBaseStructure.TIM_Prescaler = 719; //??????count???????á±?·????????ó????±?·?????????????????1??
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //=TIM1_CKD_DIV4,??????CK_INT??·????????ùfilter???????í????????????????
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò??????????
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù??????
//??????TIM3????????????
TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 ?????????? IC1??????TI1??
TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //??????????
TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //??????TI1??
TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //????????·???,??·???
TIM3_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=0000 ???????????¨?÷ ?????¨
TIM_ICInit(TIM3, &TIM3_ICInitStructure);
TIM_ITConfig(TIM3, TIM_IT_Update | TIM_IT_CC1, ENABLE); //???í?ü?????? ,???íCC1IE????????
TIM_Cmd(TIM3, ENABLE); //????TIM3
}
//------------------------------------------------------
void TIM3_IRQHandler(void)
{
if((TIM3CH1_CAPTURE_STA&0X80)==0) //????????????
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
//if((TIM3CH1_CAPTURE_STA&0X3F)==0X3F)//?????????¤??
if((TIM3CH1_CAPTURE_STA&0X08)==0X08)//?????????¤???¨LND712_5S_0X08??\?¨ZP1206_8S_0X0C??\?¨J705_20S_0X1E??
{
TIM3CH1_CAPTURE_STA|=0X80; //±ê????????????????
TIM3CH1_CAPTURE_VAL=0XFFFF;
GPIO_SetBits(MCU_POWER_C);
delay_ms(2);
}else TIM3CH1_CAPTURE_STA++;
}
if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)//????1·??ú????????
{
TIM3CH1_CAPTURE_STA|=0X80; //±ê??????????????????????
TIM3CH1_CAPTURE_VAL=TIM_GetCapture1(TIM3);
GPIO_SetBits(MCU_POWER_C);
delay_ms(2);
}
}
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //????????±ê????
}