【问题标题】:Defining of F_CPU in Atmel Studio在 Atmel Studio 中定义 F_CPU
【发布时间】:2018-12-14 11:46:44
【问题描述】:

我想举一个 LED 闪烁的例子(每 1000 毫秒 1 次)。我的微控制器是 ATmega328P,我正在使用 Atmel Studio。

状态 1:如果我没有定义 F_CPU,则 LED 闪烁运行为真。而且我使用的是默认保险丝设置(内部振荡器和 CKDIV8=programmed)。

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

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

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

【问题讨论】:

    标签: arduino avr atmelstudio


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答,但我的第二个问题?
    • 需要设置 F_CPU 值以反映 cpu 时钟配置的值。因此,如果使用设置为 1MHz 的默认设置
    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 2017-06-07
    相关资源
    最近更新 更多