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库

  • 相关阅读:
    05-流程控制
    04-基础语法3
    03-基础语法2
    SQLyog-证书密钥
    博客园美化系列__看板娘
    修改博客园模板样式【完美解决方案】
    Linux-Deepin 下开启SSH远程登陆
    Mui---自己利用Vue编写的表格
    canvas--操作步骤--属性
    Mui-打开手机相册
  • 原文地址:https://www.cnblogs.com/jieruishu/p/10304617.html
Copyright © 2011-2022 走看看