zoukankan      html  css  js  c++  java
  • HAL库延时、SYCCNT与SYSTICK

    HAL库驱动中,由于某些外设的驱动需要使用超时判断(比如I2C、SPI、SDIO等),需要精确延时(精度为1ms),使用的是SysTick,但是在操作系统里面,我们需要使用
    SysTick来提供系统时基,那么就冲突了,怎么办?答案是利用DWT重新编写HAL库的相关延时和超时函数HAL_InitTick()、HAL_GetTick()和HAL_Delay(),这三个函数
    在HAL库中都是弱定义函数(函数开头带__weak关键字)。

    在Cortex-M内核里面有一个外设叫DWT(Data  Watchpoint  and  Trace), 该外设有一个32位的寄存器叫CYCCNT,它是一个向上的计数器, 记录的是内核时钟运行的个数,最
    长能记录的时间为: 10.74s = 2的32次方/400000000  (CYCNNT从0开始计数到溢出,最长的延时时间与内核的频率有关,假设内核频率为400M,内核时钟跳一次的时间大概为
    1/400M=2.5ns) ,当CYCCNT溢出之后,会清0重新开始向上计数。这种延时方案不仅精确,而且还不占用单片机的外设资源,非常方便。所以HAL库里面刚刚讲到的需要重写的
    三个函数我们都基于CYCCNT的方案来实现----》摘录自RTT。

    HAL库编译很慢,只有对于大内存的F7/H7才用HAL库

  • 相关阅读:
    Block的强强引用问题(循环引用)
    自己封装的下载方法
    MJRefresh上拉刷新下拉加载
    JavaScript 模块的循环加载
    webpack使用require注意事项
    console.log高级用法
    path.resolve()和path.join()的区别
    深入理解react
    react children技巧总结
    揭秘css
  • 原文地址:https://www.cnblogs.com/jieruishu/p/10304617.html
Copyright © 2011-2022 走看看