【求助】CH32v103C8T6 TIM2輸入捕獲問(wèn)題幫忙看看那里不對(duì)

void TIM2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void TIM2_Int_Init(u16 arr,u16 psc)

{? ?GPIO_InitTypeDef? GPIO_InitStructure ;

? ??TIM_ICInitTypeDef? ?TIM_ICInitStructure ;

? ??TIM_TimeBaseInitTypeDef? TIM_TimeBaseStructure;

? ???NVIC_InitTypeDef NVIC_InitStructure;


? ? RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //時(shí)鐘使能

? ??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);



? ???GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

? ???GPIO_InitStructure.GPIO_Mode =? GPIO_Mode_IPD;

? ???GPIO_Init(GPIOA, &GPIO_InitStructure);

? ? ??GPIO_ResetBits(GPIOA, GPIO_Pin_15);

? ???GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); //PA0復(fù)用位定時(shí)器5

? ? ?TIM_TimeBaseStructure.TIM_Period = arr; //設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值?

? ???TIM_TimeBaseStructure.TIM_Prescaler =psc; //設(shè)置用來(lái)作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值? 10Khz的計(jì)數(shù)頻率

? ? ?TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設(shè)置時(shí)鐘分割:TDTS = Tck_tim

? ???TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;? //TIM向上計(jì)數(shù)模式

? ??TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位


? ??TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;? //選擇通道2

? ???TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//配置分頻不分頻

? ???TIM_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置輸入濾波器 不濾波

? ???TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿捕獲

? ???TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//映射到TI1上

? ???TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);

? ? NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;? //先占優(yōu)先級(jí)0級(jí)

? ?NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;? //從優(yōu)先級(jí)3級(jí)

? ?NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能

? ?NVIC_Init(&NVIC_InitStructure);? //根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器




?TIM2->INTFR = 0;

?TIM_ITConfig(TIM2, TIM_IT_CC1 , ENABLE);

?//TIM_ITConfig( TIM2, TIM_IT_Update ,ENABLE? );


?TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);

?TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);

?TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);j_0004.gif

?TIM_Cmd(TIM2, ENABLE);? //使能TIMx外設(shè)


}


u16 speed_JC;

void TIM2_IRQHandler(void)? ?//TIM2中斷

{




?if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) //檢查指定的輸入捕獲中斷發(fā)生與否:TIM 中斷源

?{


?speed_JC++;



?printf ("%d\r\n",speed_JC);

?TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);? //清除TIM定時(shí)器更新中斷待處理位:TIM 中斷源

?}


}








更新中斷可以

捕獲輸入沒(méi)反應(yīng)



您好,附件為CH32V103 TIM2輸入捕獲例程,可以參考一下

icon_rar.gifCH32V103 TIM2_輸入捕獲.zip



void Input_Capture_Init_3( u16 arr, u16 psc )

{

? ? GPIO_InitTypeDef? ? ? ? GPIO_InitStructure={0};

? ? TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure={0};

? ? TIM_ICInitTypeDef? ? ? ?TIM_ICInitStructure={0};

? ? NVIC_InitTypeDef? ? ? ? NVIC_InitStructure={0};


? ? RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );//使能GPIOA時(shí)鐘和TIM2時(shí)鐘

? ? RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE);


? ? GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

? ? GPIO_Init( GPIOA, &GPIO_InitStructure);

? ? GPIO_ResetBits( GPIOA, GPIO_Pin_6 );


? ? //定時(shí)器周期,實(shí)際就是設(shè)定自動(dòng)重載寄存器 ARR 的值, ARR 為要裝載到實(shí)際自動(dòng)重載寄存器(即影子寄存器) 的值, 可設(shè)置范圍為 0 至 65535。

? ? TIM_TimeBaseInitStructure.TIM_Period = arr;

? ? //定時(shí)器預(yù)分頻器設(shè)置,時(shí)鐘源經(jīng)該預(yù)分頻器才是定時(shí)器計(jì)數(shù)時(shí)鐘CK_CNT,它設(shè)定 PSC 寄存器的值。

? ? //計(jì)算公式為: 計(jì)數(shù)器時(shí)鐘頻率 (fCK_CNT) 等于fCK_PSC / (PSC[15:0] + 1),可實(shí)現(xiàn) 1 至 65536 分頻。

? ? TIM_TimeBaseInitStructure.TIM_Prescaler = psc;

? ? //時(shí)鐘分頻,設(shè)置定時(shí)器時(shí)鐘 CK_INT 頻率與死區(qū)發(fā)生器以及數(shù)字濾波器采樣時(shí)鐘頻率分頻比??梢赃x擇 1、 2、 4 分頻。

? ? TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;

? ? TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //設(shè)置計(jì)數(shù)模式,向上計(jì)數(shù)模式

? ? TIM_TimeBaseInitStructure.TIM_RepetitionCounter =? 0x00;? ? ? ? //設(shè)置重復(fù)計(jì)數(shù)器的值,0。重復(fù)計(jì)數(shù)器,只有 8 位,只存在于高級(jí)定時(shí)器。

? ? TIM_TimeBaseInit( TIM3, &TIM_TimeBaseInitStructure); //初始化


? ? // 當(dāng)用作PWM輸入捕獲模式時(shí),只需要設(shè)置觸發(fā)信號(hào)的那一路即可(用于測(cè)量周期)

? ? // 另外一路(用于測(cè)量占空比)會(huì)由硬件自帶設(shè)置,不需要再配置


? ? // TIM_Channel:捕獲通道 ICx 選擇,可選 TIM_Channel_1、 TIM_Channel_2、TIM_Channel_3 或 TIM_Channel_4 四個(gè)通道。

? ? TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;

? ? //配置輸入捕獲預(yù)分頻器值,如果需要捕獲輸入信號(hào)的每個(gè)有效邊沿,則設(shè)置 1 分頻 即可

? ? TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

? ? //輸入捕獲濾波器設(shè)置,可選設(shè)置 0x0 至 0x0F。它設(shè)定 CHCTLRx 寄存器ICxF[3:0]位的值。一般我們不使用濾波器,即設(shè)置為 0

? ? TIM_ICInitStructure.TIM_ICFilter = 0x0;

? ? //輸入捕獲邊沿觸發(fā)選擇,可選上升沿觸發(fā)、下降沿觸發(fā)或邊沿跳變觸發(fā)。

? ? TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;

? ? //輸入通道選擇,捕獲通道 ICx 的信號(hào)可來(lái)自三個(gè)輸入通道,分別為TIM_ICSelection_DirectTI、 TIM_ICSelection_IndirectTI 或 TIM_ICSelection_TRC

? ? TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;


? ? TIM_PWMIConfig( TIM3, &TIM_ICInitStructure );


? ? NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;? ? ? ?//TIM1捕獲比較中斷

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//設(shè)置搶占優(yōu)先級(jí)

? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;? ? ? ?//設(shè)置響應(yīng)優(yōu)先級(jí)

? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;? ? ? ? ? //使能通道

? ? NVIC_Init(&NVIC_InitStructure);


? ? TIM_ITConfig( TIM3, TIM_IT_CC1, ENABLE ); //使能TIM1捕獲中斷


? ? // 選擇輸入捕獲的觸發(fā)信號(hào)

? ? TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1);


? ? // 選擇從模式: 復(fù)位模式

? ? // PWM輸入模式時(shí),從模式必須工作在復(fù)位模式,當(dāng)捕獲開(kāi)始時(shí),計(jì)數(shù)器CNT會(huì)被復(fù)位

? ? TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);

? ? TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);

? ? TIM_Cmd( TIM3, ENABLE );? //定時(shí)器使能

}





void TIM3_IRQHandler(void)

{


? ? if( TIM_GetITStatus( TIM3, TIM_IT_CC1 ) != RESET )? ?//若捕獲比較1發(fā)生中斷

? ? {

? ? ? ? printf( "cycle:%d\r\n", (TIM_GetCapture1(TIM3)+1) );? ? ? //打印得到的捕獲比較1寄存器值,其值加1表示周期

? ? ? ? TIM_SetCounter( TIM3, 0 );

? ? }

? ? TIM_ClearITPendingBit( TIM3, TIM_IT_CC1 ); //清除TIM1捕獲比較1中斷掛起位

}

版主你好 按照你的這份代碼燒錄TIM2正常捕獲???把這個(gè)改成TIM3就不捕獲了 管腳也替換了 幫忙看一下


您好,檢查一下中斷函數(shù)是否有加中斷聲明,參考下圖方式

image.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频