×
单片机 > 单片机程序设计 > 详情

SysTick功能总结

发布时间:2020-08-31 发布时间:
|

一、初始化SysTick


按1ms来设置systick,也可以除以1000000。按1us来设置

SysTick_Config(SystemCoreClock / 1000); //SysTick开启系统tick定时器并初始化其中断,1ms


二、systick的函数


// cycles per microsecond

static volatile uint32_t usTicks = 0;

// current uptime for 1kHz systick timer. will rollover after 49 days. hopefully we won't care.

volatile uint32_t sysTickUptime = 0;


// SysTick

void SysTick_Handler(void)

{

    sysTickUptime++;

}


//delay ms

void DelayMs(uint16_t nms)

{

    uint32_t t0=micros();

    while(micros() - t0 < nms * 1000);

}


// Return system uptime in microseconds (rollover in 70minutes)

//返回 us

uint32_t micros(void)

{

    register uint32_t ms, cycle_cnt;

    do {

        ms = sysTickUptime;

        cycle_cnt = SysTick->VAL;

    } while (ms != sysTickUptime);

    return (ms * 1000) + (usTicks * 1000 - cycle_cnt) / usTicks;

}


// Return system uptime in milliseconds (rollover in 49 days)

uint32_t millis(void)

{

    return sysTickUptime;

}

systick启动后会进入SysTick_Handler()的中断,


三、少了重要的一部,哭~T.T


开启RCC时钟!!!!!

void cycleCounterInit(void)

{

    RCC_ClocksTypeDef clocks;

    RCC_GetClocksFreq(&clocks);

    usTicks = clocks.SYSCLK_Frequency / 1000000;

}


遇到的错误:我在初始化MPU6050时,写入数据特别慢。明明计时都准的,不知道为什么特别慢。其他还都能顺利运行。


最后发现时RCC的时钟有问题。





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址