一、初始化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;
- }
三、少了重要的一部,哭~T.T
开启RCC时钟!!!!!- void cycleCounterInit(void)
- {
- RCC_ClocksTypeDef clocks;
- RCC_GetClocksFreq(&clocks);
- usTicks = clocks.SYSCLK_Frequency / 1000000;
- }
最后发现时RCC的时钟有问题。
给主人留下些什么吧!~~
评论热议