gd32f103高级定时器0无法进入中断服务函数
按照例程所给的定时器中断(1ms)进行改写,定时器2是可以正常输出的但是把参数均换成定时器0以后无法输出,请大家帮忙看看是哪里的问题。#include "gd32e23x.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
void delay(int time)
{
while(time--);
return;
}
void gpio_config(void)
{
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
}
void nvic_config(void)
{
nvic_irq_enable(TIMER0_Channel_IRQn, 0);
timer_interrupt_enable(TIMER0,TIMER_INT_UP);
}
void timer_config(void)
{
/* -----------------------------------------------------------------------
TIMER1 configuration: generate 3 PWM signals with 3 different duty cycles:
TIMER1CLK = SystemCoreClock / 72 = 1MHz
TIMER1 channel 2 duty cycle =50%
----------------------------------------------------------------------- */
timer_oc_parameter_struct timer_ocintpara;
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER0);
timer_deinit(TIMER0);
/* TIMER1 configuration */
timer_initpara.prescaler = 71;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection= TIMER_COUNTER_UP;
timer_initpara.period = 999;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER0,&timer_initpara);
/* auto-reload preload enable */
timer_auto_reload_shadow_enable(TIMER0);
/* auto-reload preload enable */
timer_enable(TIMER0);
}
int main(void)
{ rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);
systick_config();
gpio_config();
nvic_config();
timer_config();
while(1)
{
}
}
/*******************************************中断源文件如下***********************************/
uint32_t Timcounter;
uint8_tLedFlag;
void TIMER0_Channel_IRQHandler(void)
{
if(timer_flag_get(TIMER0,TIMER_FLAG_UP)!=RESET)
{
timer_flag_clear(TIMER0,TIMER_FLAG_UP);
Timcounter++;
if(Timcounter>=1)
{
Timcounter=0;
LedFlag^=0x01;
}
if(LedFlag)
{
gpio_bit_set(GPIOB,GPIO_PIN_4);
}else
{
gpio_bit_reset(GPIOB,GPIO_PIN_4);
}
}
}
gd32f103高级定时器0无法进入中断服务函数
中断方式用的不对吧,你的要求不应该是使用更新中断吗,你选的是通道捕获比较中断,试试用这个:TIMER0_BRK_UP_TRG_COM_IRQn搜索复制
我也遇到同样问题,你找到解决方案了吗? 可以分享一下 问题已经解决
void timer2_config(unsigned int time,unsigned int period)
{
timer_parameter_struct timer_parameter;
rcu_periph_clock_enable(RCU_TIMER2);
timer_deinit(TIMER2);
timer_parameter.prescaler = 83;
timer_parameter.alignedmode = TIMER_COUNTER_EDGE;
timer_parameter.counterdirection = TIMER_INT_UP;
timer_parameter.period = 10000;
timer_parameter.repetitioncounter = 0;
timer_parameter.clockdivision = TIMER_CKDIV_DIV2;
timer_init(TIMER2,&timer_parameter);
timer_counter_value_config(TIMER2,0);
timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
timer_interrupt_enable(TIMER2,TIMER_INT_UP);
nvic_irq_enable(TIMER2_IRQn,0,2);
timer_enable(TIMER2);
timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
}
//void TIMER0_BRK_UP_TRG_COM_IRQHandler(void)
void TIMER2_IRQHandler(void) {
if(SET == timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP)){
ix++;
if(ix<50)
gpio_bit_reset(GPIOB, GPIO_PIN_1);
else
{gpio_bit_set(GPIOB, GPIO_PIN_1); if(ix>100) {ix=0;} }
timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP);
}
}
void timer0_config(unsigned int time,unsigned int period)
{
timer_parameter_struct timer_parameter;
rcu_periph_clock_enable(RCU_TIMER0);
timer_deinit(TIMER0);
timer_parameter.prescaler = 83;
timer_parameter.alignedmode = TIMER_COUNTER_EDGE;
timer_parameter.counterdirection = TIMER_INT_UP;
timer_parameter.period = 1000;
timer_parameter.repetitioncounter = 0;
timer_parameter.clockdivision = TIMER_CKDIV_DIV2;
timer_init(TIMER0,&timer_parameter);
timer_counter_value_config(TIMER0,0);
timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);
timer_interrupt_enable(TIMER0,TIMER_INT_UP);
nvic_irq_enable(TIMER0_BRK_UP_TRG_COM_IRQn,0,2);
timer_enable(TIMER0);
timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);
}
//void TIMER0_BRK_UP_TRG_COM_IRQHandler(void)
//void TIMER0_IRQHandler(void)
void TIMER0_BRK_UP_TRG_COM_IRQHandler(void)
{
if(SET == timer_interrupt_flag_get(TIMER0, TIMER_INT_FLAG_UP)){
ix++;
if(ix<50)
gpio_bit_reset(GPIOB, GPIO_PIN_1);
else
{gpio_bit_set(GPIOB, GPIO_PIN_1); if(ix>100) {ix=0;} }
timer_interrupt_flag_clear(TIMER0, TIMER_INT_FLAG_UP);
}
}
页:
[1]