ST意法半导体
直播中

刘浩

7年用户 1104经验值
私信 关注
[问答]

关于STM32L431上DWT的问题求解

我有一个关于 DWT 计数器的直截了当的问题。我正在使用 DWT->CYCCNT 计数器来计算 STM32L431CC 中的时钟周期差异,我注意到 CYCCNT 是 32 位宽。如果我使用 HSI16 作为我的内部时钟源,CYCCNT 仍然会达到 uint32_t 的最大值,即 4294967295,而不是基于我的 HSI16 时钟源的 16000000,对吗?
谢谢!
  • timestamp_1 = DWT->CYCCNT;
  • DoSomeTask();
  • timestamp_2 = DWT->CYCCNT;
  • if(timestamp_2 < timestamp_1)
  • {
  •    /* I originally filled 16000000 instead of MAX_INT here */
  •    timedifference = timestamp_2 + MAX_INT - timestamp_1;
  • }
  • else
  • {
  •    timedifference = timestamp_2 - timestamp_1;
  • }









回帖(1)

马秀英

2023-1-12 10:37:26
正确的。
此外,因为它是 32 位的,所以您不需要根据新值是否小于旧值来执行任何花哨的逻辑。溢出将使这个正确。


  • uint32_t timestamp_1 = DWT->CYCCNT;
  • DoSomeTask();
  • uint32_t timestamp_2 = DWT->CYCCNT;

  • uint32_t duration_ticks = timestamp_2 - timestamp_1;

在 timestamp_2 < timestamp_1 的情况下,您编写的代码将偏移 1。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分