zoukankan      html  css  js  c++  java
  • SysTick功能总结

    一、初始化SysTick

    按1ms来设置systick,也可以除以1000000。按1us来设置
    1. SysTick_Config(SystemCoreClock / 1000); //SysTick开启系统tick定时器并初始化其中断,1ms

    二、systick的函数


    1. // cycles per microsecond
    2. static volatile uint32_t usTicks = 0;
    3. // current uptime for 1kHz systick timer. will rollover after 49 days. hopefully we won't care.
    4. volatile uint32_t sysTickUptime = 0;

    5. // SysTick
    6. void SysTick_Handler(void)
    7. {
    8.     sysTickUptime++;
    9. }

    10. //delay ms
    11. void DelayMs(uint16_t nms)
    12. {
    13.     uint32_t t0=micros();
    14.     while(micros() - t0 < nms * 1000);
    15. }

    16. // Return system uptime in microseconds (rollover in 70minutes)
    17. //返回 us
    18. uint32_t micros(void)
    19. {
    20.     register uint32_t ms, cycle_cnt;
    21.     do {
    22.         ms = sysTickUptime;
    23.         cycle_cnt = SysTick->VAL;
    24.     } while (ms != sysTickUptime);
    25.     return (ms * 1000) + (usTicks * 1000 - cycle_cnt) / usTicks;
    26. }

    27. // Return system uptime in milliseconds (rollover in 49 days)
    28. uint32_t millis(void)
    29. {
    30.     return sysTickUptime;
    31. }
    systick启动后会进入SysTick_Handler()的中断,

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

    开启RCC时钟!!!!!
    1. void cycleCounterInit(void)
    2. {
    3.     RCC_ClocksTypeDef clocks;
    4.     RCC_GetClocksFreq(&clocks);
    5.     usTicks = clocks.SYSCLK_Frequency / 1000000;
    6. }
    遇到的错误:我在初始化MPU6050时,写入数据特别慢。明明计时都准的,不知道为什么特别慢。其他还都能顺利运行。
    最后发现时RCC的时钟有问题。

    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    EasyBPM进销存之物料管理
    水厂流程三维场景可视化解决方案
    构造器
    可变形参
    重写
    拥塞处理(一)——拥塞处理的历史概述
    idea的各种乱码问题
    MySQL的主键也想使用uuid
    使用spring security明文密码校验时报错-BadCredentialsException: Bad credentials
    ValueError: check_hostname requires server_hostname
  • 原文地址:https://www.cnblogs.com/ch122633/p/7363257.html
Copyright © 2011-2022 走看看