ch32v003定時(shí)器1中斷配置失敗

定時(shí)器中斷配置完,中斷里的打印沒有執(zhí)行,主程序嘗試打印也沒有打印出現(xiàn)


#include "debug.h"


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

void TIM1_Int_Init(u16 arr,u16 psc)

{



? ? GPIO_InitTypeDef GPIO_InitStructure = {0};

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz;

? ? GPIO_Init(GPIOC, &GPIO_InitStructure);


? ? TIM_TimeBaseInitTypeDef? TIM_TimeBaseStructure;

? ? NVIC_InitTypeDef NVIC_InitStructure;

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能TIM1時(shí)鐘

? ? TIM_TimeBaseStructure.TIM_Period = arr;? ?//指定下次更新事件時(shí)要加載到活動(dòng)自動(dòng)重新加載寄存器中的周期值。

? ? TIM_TimeBaseStructure.TIM_Prescaler =psc; //指定用于劃分TIM時(shí)鐘的預(yù)分頻器值。

? ? TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;? ? ?//時(shí)鐘分頻因子

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

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


? ? TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //使能TIM1中斷,允許更新中斷


//? ? TIM_ClearITPendingBit(TIM1, TIM_IT_Update);

//? ? TIM_ClearFlag(TIM1, TIM_FLAG_Update); //清除更新標(biāo)志位

? ??

? ? //初始化TIM NVIC,設(shè)置中斷優(yōu)先級(jí)分組

? ? NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;? ? ? ? ? ?//TIM1中斷

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

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

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

? ? NVIC_Init(&NVIC_InitStructure); //初始化NVIC

? ? TIM_Cmd(TIM1, ENABLE);? ? ?//TIM1使能


}


u8 i=0;



int main(void)

{

? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

? ? SystemCoreClockUpdate();

? ? Delay_Init();

#if (SDI_PRINT == SDI_PR_OPEN)

? ? SDI_Printf_Enable();

#else

? ? USART_Printf_Init(115200);

#endif

? ? printf("--111--\r\n");


? ? TIM1_Int_Init(9,4799);? ? //1ms


? ? while(1)

? ? {

//? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

//? ? ? ? printf("--00--\r\n");

//? ? ? ? Delay_Ms(1);


? ? }


}




void TIM1_IRQHandler(void)? ? //1ms

{

? ? if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //檢查TIM2中斷是否發(fā)生。

? ? ? {

? ? ? ? TIM_ClearITPendingBit(TIM1,TIM_IT_Update);? ? //清除TIM2的中斷掛起位。

? ? ? ? printf("--00--\r\n");

? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

? ? ? }

}


您好,你的中斷函數(shù)名稱寫的有問題,更新中斷按照下圖標(biāo)記這種寫試一下

image.png


改了還是不行,程序卡死,只有上電打印,定時(shí)中斷初始化完后就沒了

image.png

void TIM1_Int_Init(u16 arr,u16 psc)

{

? ? TIM_TimeBaseInitTypeDef? TIM_TimeBaseStructure;

? ? NVIC_InitTypeDef NVIC_InitStructure;

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);

? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_30MHz;

? ? GPIO_Init(GPIOC, &GPIO_InitStructure);


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能TIM1時(shí)鐘

? ? TIM_TimeBaseStructure.TIM_Period = arr;? ?//指定下次更新事件時(shí)要加載到活動(dòng)自動(dòng)重新加載寄存器中的周期值。

? ? TIM_TimeBaseStructure.TIM_Prescaler =psc; //指定用于劃分TIM時(shí)鐘的預(yù)分頻器值。

? ? TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;? ? ?//時(shí)鐘分頻因子

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

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

? ? TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //使能TIM1中斷,允許更新中斷

? ? TIM_ClearITPendingBit(TIM1,TIM_IT_Update);


? ? //初始化TIM NVIC,設(shè)置中斷優(yōu)先級(jí)分組

? ? NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;? ? ? ? ? ?//TIM1中斷

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

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

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

? ? NVIC_Init(&NVIC_InitStructure); //初始化NVIC

? ? TIM_Cmd(TIM1, ENABLE);? ? ?//TIM1使能

}


u8 i=0;

int main(void)

{

? ? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

? ? SystemCoreClockUpdate();

? ? Delay_Init();

#if (SDI_PRINT == SDI_PR_OPEN)

? ? SDI_Printf_Enable();

#else

? ? USART_Printf_Init(115200);

#endif

? ? printf("--111--\r\n");


? ? TIM1_Int_Init(9,4799);? ? //1ms

? ? printf("--*******--\r\n");

? ? while(1)

? ? {

//? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

? ? ? ? printf("--22--\r\n");

? ? ? ? Delay_Ms(1000);

? ? }

}


void TIM1_UP_IRQHandler(void)? ? //1ms

{


? ? if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) //檢查TIM2中斷是否發(fā)生。

? ? ? {

? ? ? ? TIM_ClearITPendingBit(TIM1,TIM_IT_Update);? ? //清除TIM2的中斷掛起位。

? ? ? ? printf("--00--\r\n");

? ? ? ? GPIO_WriteBit(GPIOC, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

? ? ? }

}



您好,附件例程可參考一下,這邊測試沒有問題的,可以檢查一下你的程序修改后是否有加中斷聲明,可對(duì)照附件例程檢查一下。

icon_rar.gifCH32V003 定時(shí)器1中斷.zip



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

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