只是一个基本问题...对于 arduino/avr/ATMega328,我发现很多使用 Timer1 的示例(甚至还有一个完整的库),但很少有使用 Timer0(或 Timer2)的示例。
现在,我知道使用这些定时器中的任何一个来控制 ISR 方法都会禁用在其相关引脚上使用 PWM,但是人们似乎远离 Timer0 是否有特定的原因?它是否用于内部其他不应该乱用的东西?
我当前的应用程序使用 Timer1 很好,我只是好奇我是否遗漏了一些关于这些其他经常被忽视的计时器的东西。
只是一个基本问题...对于 arduino/avr/ATMega328,我发现很多使用 Timer1 的示例(甚至还有一个完整的库),但很少有使用 Timer0(或 Timer2)的示例。
现在,我知道使用这些定时器中的任何一个来控制 ISR 方法都会禁用在其相关引脚上使用 PWM,但是人们似乎远离 Timer0 是否有特定的原因?它是否用于内部其他不应该乱用的东西?
我当前的应用程序使用 Timer1 很好,我只是好奇我是否遗漏了一些关于这些其他经常被忽视的计时器的东西。
如果问题是关于裸 AVR 微控制器,那么不,使用任何计时器都没有限制。
millis()
,因为 Arduino 库中delay()
的所有内部计时都使用此计时器。改变它的时间常数会影响这些操作。除了禁用相关的 PWM 之外,我能想到的其他原因是:
TIMER0 是一个 8 位定时器,而 TIMER1 是一个 16 位定时器。
在 Arduino 世界中,TIMER0 用于延迟()和毫秒()等定时器功能。我见过的许多其他代码都以相同的方式使用它,因为 8 位分辨率通常足够了。
TIMER2 也是 8 位的,如果只需要 8 位,我想不出有什么理由专门避免这种情况。然而,它被 Arduinotone() 函数使用。
所以我想这使得 TIMER1 成为一个相当通用的选择,并且当需要 16 位定时器时,它是较小 AVR 的唯一选择。AVR Mega 设备还包含 TIMER3 - TIMER5,它们都是 16 位的。