在战舰板的输入捕捉例程上修改,用的是PE13
改的也就是几个通道值,其他没有啥变化,就是进不了捕捉中断,烦请大侠们指点迷津,万分感谢。
[mw_shl_code=c,true]/************************************************************************************
**?? ?? ??: TIM1_CC_Config( void )
**?? ??: TIM1??????
**????????: ??
**????????: ??
************************************************************************************/
void TIM1_CC_Config( u16 arr,u16 psc )
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_ICInitTypeDef TIM1_ICInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd( RCC_APB2Periph_TIM1, ENABLE ); //????TIM1?±??
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE ); //????GPIOE?±??
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PE13 ?????®?°?è??
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //GPIO_Mode_IPD; //PE13 ????
GPIO_Init( GPIOE, &GPIO_InitStructure );
GPIO_ResetBits( GPIOE,GPIO_Pin_13 ); //PE13????
//???????¨?±?÷1 TIM1
TIM_TimeBaseStructure.TIM_Period = arr; //?è?¨?????÷×?????×°??
TIM_TimeBaseStructure.TIM_Prescaler =psc; //?¤·????÷
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò??????????
TIM_TimeBaseInit( TIM1, &TIM_TimeBaseStructure ); //?ù??TIM_TimeBaseInitStruct?????¨????????????TIMx???±???ù??????
//??????TIM1????????????
TIM1_ICInitStructure.TIM_Channel = TIM_Channel_3; //CC1S=01 ?????????? IC1??????TI1??
TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //??????????
TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //??????TI1??
TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //????????·???,??·???
TIM1_ICInitStructure.TIM_ICFilter = 0x00; //IC1F=0000 ???????????¨?÷ ?????¨
TIM_ICInit( TIM1, &TIM1_ICInitStructure );
//????·?×é??????
NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn; //TIM3????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //??????????2??
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //????????0??
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??±?????
NVIC_Init( &NVIC_InitStructure ); //?ù??NVIC_InitStruct?????¨???????????????èNVIC?????÷
TIM_ITConfig( TIM1,TIM_IT_Update | TIM_IT_CC3,ENABLE );//???í?ü?????? ,???íCC1IE????????
TIM_Cmd( TIM1,ENABLE ); //?????¨?±?÷5
}
/************************************************************************************
**?? ?? ??: TIM1_CC_IRQHandler( void )
**?? ??: TIM1????·???????
**????????: ??
**????????: ??
************************************************************************************/
u8 TIM1CH1_CAPTURE_STA = 0; //????????×???
u16 TIM1CH1_CAPTURE_VAL; //??????????
//?¨?±?÷5????·??????ò
void TIM1_CC_IRQHandler( void )
{
LED3_OFF( );
if(( TIM1CH1_CAPTURE_STA & 0x80 ) == 0 )//????????????
{
if( TIM_GetITStatus( TIM1, TIM_IT_Update ) != RESET )
{
if( TIM1CH1_CAPTURE_STA & 0X40 )//??????????????????
{
if(( TIM1CH1_CAPTURE_STA & 0x3F ) == 0x3F )//?????????¤??
{
TIM1CH1_CAPTURE_STA |= 0x80;//±ê????????????????
TIM1CH1_CAPTURE_VAL = 0xFFFF;
}
else
{
TIM1CH1_CAPTURE_STA++;
}
}
}
if( TIM_GetITStatus( TIM1, TIM_IT_CC1 ) != RESET )//????1·??ú????????
{
if( TIM1CH1_CAPTURE_STA & 0x40 ) //????????????????
{
TIM1CH1_CAPTURE_STA |= 0x80; //±ê??????????????????????
TIM1CH1_CAPTURE_VAL = TIM_GetCapture1( TIM1 );
TIM_OC1PolarityConfig( TIM1,TIM_ICPolarity_Rising ); //CC1P=0 ?è??????????????
}
else //????????,????????????????
{
TIM1CH1_CAPTURE_STA = 0; //????
TIM1CH1_CAPTURE_VAL = 0;
TIM_SetCounter( TIM1,0 );
TIM1CH1_CAPTURE_STA |= 0x40; //±ê????????????????
TIM_OC1PolarityConfig( TIM1,TIM_ICPolarity_Falling ); //CC1P=1 ?è??????????????
}
}
}
TIM_ClearITPendingBit( TIM1, TIM_IT_CC3 | TIM_IT_Update ); //????????±ê????
LED3在开始点亮了,想进入中断把LED3熄灭,可是一直亮着。郁闷ing[/mw_shl_code]
|