TIM1定时器的基本配置 实现不了 不知道那里配置不对

void TIM1_INT_Init(u16 PeriodVal,u16 PrescalerVal)

{

    GPIO_InitTypeDef  GPIO_InitStructure;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOD, &GPIO_InitStructure);    //初始化GPIOD  PC0


   TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;

   TIM_TimeBaseStruct.TIM_Period = PeriodVal;//周期值

   TIM_TimeBaseStruct.TIM_Prescaler = PrescalerVal;//预分频

   TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分割

   TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; //递增计数(向上计数)

   TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;//只对TIM1有效

   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);//使能TIM2中断 初始化相关参数



   //设置中断占优先级组

   NVIC_InitTypeDef NVIC_InitStructure;

   TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);//允许更新中断

   NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM1 INT

   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

   NVIC_Init(&NVIC_InitStructure);//根据结构体初始化相关参数


   TIM_Cmd(TIM1, ENABLE);

}

//初始化

TIM1_INT_Init(125,48);

//中断

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

void TIM1_IRQHandler(void)

{  static u8 i=0;

   if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET)

   {

       TIM_ClearITPendingBit(TIM1, TIM_IT_Update);

       GPIO_WriteBit(GPIOD, GPIO_Pin_3, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));

   }

}

//以上代码进不了中断

您好,程序中要注意开启使能外设时钟,如下图1。此外,定时器更新中断函数的写法也有问题,参考下图2

image.png

图1

image.png

图2


你好,请问一下,是不是所有的中断函数名都是指定的写法:

比如:

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

void TIM1_UP_IRQHandler(void){}  

写成这样才能正常进入中断,而写入其他名称就不行,如此,我要如何才能知道我的中断函数名称呢 ???



您好,是的,关于对应中断函数名称,可以在启动文件中查看,如下图:

image.png


好的 ,多谢


只有登录才能回复,可以选择微信账号登录