Arduino Due 中的定时器

Posted

技术标签:

【中文标题】Arduino Due 中的定时器【英文标题】:Timers in Arduino Due 【发布时间】:2013-11-07 07:07:27 【问题描述】:

我是 arduino 的新手(事实上是编程)。我正在考虑将 arduino 用于我的学术项目。在浏览它的数据表(来自 Atmel 的 SAM3X8E 数据表)时,我遇到了计时器,据说都是 32 位计数器。他们计数到 0xFFFF,然后再次进入 0x0000。我有点困惑。它们不应该一直计数到 0xFFFFFFFF(在归零之前),因为它们是 32 位计数器。我认为 16 位计数器是一个计数到 0xFFFF 的计数器。 可能我的要求很愚蠢,但请说明一下。

提前谢谢..

37.6 功能描述 , 37.6.2 32 位计数器 ,页码:数据表中的 873

【问题讨论】:

您可能希望在数据表中包含您看到的位置。 为了兼容性,Arduino 可能已将其 SAM3X8E 功能的大小与 ATmega 相同。 【参考方案1】:

也许我的图书馆可以帮助你:https://github.com/ivanseidel/DueTimer

也请阅读此帮助文件:https://github.com/ivanseidel/DueTimer/blob/master/TimerCounter.md

我知道这不是你想要的,但可能是你想要的最终结果。

【讨论】:

【参考方案2】:

我在数据表或 Atmel 的应用说明中找不到任何反驳您观察的内容。这让我相信以下两件事之一:

    数据表中的描述不完整。所描述的行为仅适用于低位字,完整的 32 位定时器按顺序从 0x00000000 递增到 0xffffffff,溢出仅注册低 16 位。

    行为与数据表中的描述完全相同,并且软件可以将定时器计数器设置为介于 0x00010000 和 0xffffffff 之间的值,以便在定时器在 0x0000ffff 溢出之前允许一次更长的时间。

测试将判断哪种行为是实际行为。

【讨论】:

【参考方案3】:

您在他们的文档中发现了一个错误,但他们已修复它。

在当前版本的数据表中,现在位于第 36.6.2 节,第 860 页,这更有意义:

“当计数器达到值 2^32-1 并传递到零时,发生溢出...”

【讨论】:

以上是关于Arduino Due 中的定时器的主要内容,如果未能解决你的问题,请参考以下文章

Arduino定时器&中断的使用和快速上手

模糊计时器(边界内随机)(Arduino)

Arduino定时器中断采样

Arduino:在 C++ 类中使用定时器

MStime库 Arduino的定时器中断使用

Arduino利用定时器中断霍尔计数