STM32–Cortex M3 DWT 实现精确定时

对于C语言,实现精准的NOP延时不是很容易,延时时间过短时会有较大误差,但是我们可以通过CM3的调试接口获得精确的NOP延时方式。

首先可以通过读RCC寄存器获得当前系统的时钟值,然后查询DWT寄存器的值之差就能计算出CPU运行时时间,代码如下。

DWT_CNT 是一个32位的寄存器,CPU运行时每个时钟周期会自加1,调用 usNOPDelay函数时传入参数大小能获得较好的精度。

更正,查找了手册才明白这个寄存器是 Data Watchpoint and Trace Register,是个很好的方式做系统时钟的tick数做微小时间的查询方式延时,感谢!!
付一个arm论坛的帖子做说明:
http://community.arm.com/message/5153#5153
http://infocenter.arm.com/help/i … 0439c/BABJFFGJ.html
http://stackoverflow.com/questio … ghly-optimized-code

未经允许不得转载:TacuLee » STM32–Cortex M3 DWT 实现精确定时

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址