ch58x/ch59x systick使用

SysTick是一个定时器,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称嘀嗒中断)。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。SysTick是基于32M高频晶振工作,所以32M不停止,则嘀嗒定时器一直存在。(睡眠模式下32M是停止的,所以这时候嘀嗒定时器是不能使用的)

CH592的嘀嗒定时器是内核自带的64位计数器。

设置好嘀嗒时间后,计数满会进入到中断并需要手动清除标志。

SysTick参考示例代码:

#include "CH58x_common.h"
 
void DebugInit(void){
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
}
 
int main(){
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    DebugInit();        /* 配置串口调试 */
    PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
 
    SysTick_Config(FREQ_SYS);    //设置为60M,则1s进一次中断。设置为FREQ_SYS/1000,则1ms进入一次中断。
 
    while(1){
        PRINT("SYS_GetSysTickCnt = %d\r\n", SYS_GetSysTickCnt());    //获取计数时间,计数满会进入中断并清0。
    }
}
 
__INTERRUPT
__HIGH_CODE
void SysTick_Handler()          /***嘀嗒定时器中断函数***/
{
    SysTick->SR = 0;                    //清除中断标志
}

 

posted @ 2025-12-03 16:30  小舟从此逝_1  阅读(13)  评论(0)    收藏  举报