当前位置: 首页 > news >正文

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库

转载于:https://www.cnblogs.com/jieruishu/p/10304617.html

相关文章:

  • 【领域驱动设计】.NET实践:实体、值对象和数据传输对象
  • 谷歌中国全球首发Google音乐
  • 递归的逻辑(2)——特征方程和递归算法
  • COM 简单模型
  • .Net 高效开发之不可错过的实用工具
  • 微信分享功能实现
  • Jdom读取xml文件
  • Kotlin中的let{} 操作符
  • 端口号大全
  • spring IOC和DI
  • java 编程思想笔记之多态
  • 猫扑论坛遭遇黑客挂马
  • Nested Prefab Mode 嵌套预制体 保存问题 Dirty
  • boost并发编程boost::atomic
  • JS代码和网页的混用
  • 二叉树的序列化和反序列化(先序,按层序列化),包含递归图
  • 创建漫游用户配置文件
  • 一些模板
  • cnblogs bug(1)
  • poj 2186
  • 2022全国车辆工程专业大学排名一览表
  • 2022周口职业技术学院单招学费多少钱一年-各专业收费标准
  • 2022年中原工学院艺术类招生简章
  • 2022浙江经贸职业技术学院学费多少钱一年-各专业收费标准
  • 2022年湖南大学强基计划报名条件-报名时间-报名入口
  • 2020河北工程大学运动训练专业招生简章
  • 2022湖州有哪些民办大学?湖州所有民办大学名单一览表(1所)
  • 2022天津城市建设管理职业技术学院学费多少钱一年-各专业收费标准
  • 2022滁州学院艺术类学费多少钱一年-各专业收费标准
  • 2022云南警官学院学费多少钱一年-各专业收费标准