ch32v203 系统定时器初始化后只能进入一次中断

void Periodic_timer_Init(void)

{

    //96/8=12MHz

    SysTick->CTLR = 0;

  SysTick->SR = 0;

  SysTick->CNT = 0;

  SysTick->CMP = 360000;//计数器比较值

  SysTick->CTLR = 0xB;//(1 << 5) | (1 << 3)|(1 << 1)|(1 << 0);//计数器初始值更新    向上计数      HCLK/8做时基    打开更新中断    使能计数器

  NVIC_SetPriority(SysTicK_IRQn, 1<<7);//无抢占优先级   响应优先级1

  NVIC_EnableIRQ(SysTicK_IRQn);

}


void SysTick_Handler(void)

{

    static  u16 t2=0,t3=0,t4=0;

    printf("1231342432535\n");

    SysTick->SR = 0;

 

}


经典的中断未加interrupt修饰导致程序跑飞。

需要在SysTick的中断函数声明前加:

__attribute__((interrupt("WCH-Interrupt-fast")))

来指示编译器生成中断类型的代码。

若关闭了硬件中断压栈,则添加:

__attribute__((interrupt("")))



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