在 Atmel Studio 中定义 F_CPU

1 avr arduino atmelstudio

我只想向您提供 LED 闪烁的示例(1000 毫秒中有 1 次)。我的微控制器是 ATmega328P,我使用的是 Atmel Studio。

状态 1:如果我不定义F_CPU,则 LED 闪烁运行为 true。我使用默认熔丝设置(内部振荡器和 CKDIV8=已编程)。

状态 2:如果我定义F_CPU 8000000UL,LED 闪烁的运行速度会慢 8 倍,并且我再次使用默认熔丝设置(内部振荡器和 CKDIV8=已编程)。

我在 1.state 和 2.state 中都不使用外部晶体。和相同的保险丝设置。为什么我会看到这个结果?为什么慢8倍?

问题2:有些库需要F_CPU价值,比如UART。我不使用外部振荡器。我应该为这个值写什么?

los*_*ard 5

F_CPU 应该反映设置的微控制器 CPU 时钟速度。它不关心该速度是否是因为使用外部时钟而设置的,或者是否是内部时钟,或者设置了什么 div 值。

因此,需要设置 F_CPU 值以反映 cpu 时钟的配置。

根据 atmega328p 的数据表,未编程的器件出厂时带有 DIV8 上的内部 RC 振荡器,因此这种情况下的 CPU 时钟将为 8MHz/8 = 1 MHz

因此,如果将 F_CPU 设置为 8000000,那么任何使用 F_CPU 的代码都会认为它运行在 8MHz,而不是实际的 1MHz。