【问题标题】:Why SoftwareSerial doesn't work on Atmega128为什么 SoftwareSerial 在 Atmega128 上不起作用
【发布时间】:2016-12-21 02:41:05
【问题描述】:

我正在 Atmel Studio 7 中编写一个程序,我刚刚安装并开始使用它。我已经为 Arduino 建立了工作室,并将 Atmega128 添加到支持的芯片库中。那里一切都很好。当我尝试使用 SoftwareSerial 库并编译时,我收到 Atmega128 和 Atmega64 不支持 SoftwareSerial 的错误。为什么是这样?这个 AVR 与 atmega328 等有什么不同,以至于它不支持该库。在 atmega128 上使用 SoftwareSerial 或 SoftUart 是否有更好的方法?谢谢

【问题讨论】:

  • 确切的错误信息是什么?

标签: avr atmega atmelstudio software-serial


【解决方案1】:

您是否遇到过这个编译错误:This version of NewSoftSerial supports only 20, 16 and 8MHz processors

这来自 cpp 文件中的这些定义。如果您将 F_CPU 定义为 8000000,它可能会起作用,并确保您实际设置了寄存器以使其时钟速度。某些处理器默认使用较慢的时钟速度。查阅硬件手册。

请注意,在处理 NewSoftwareSerial.cpp 文件之前需要定义 F_CPU。您可以使用 D 开关在命令行中直接创建定义。

#if F_CPU == 16000000

[snip]

#elif F_CPU == 8000000

[snip]

#elif F_CPU == 20000000

[snip]

#else

#error This version of NewSoftSerial supports only 20, 16 and 8MHz processors

#endif

【讨论】:

  • 您好,感谢您的回复。我在编译时没有收到 F_CPU 错误。是的,我已将 F_CPU 设置为 16MHz。唯一的错误是一个明确说明“ATmega64 和 ATmega128 不支持 SoftSerial!”的错误。当我查看 SoftwareSerial.h 文件时,它实际上是在第 44 行以这种方式编码的。
【解决方案2】:

通过我的研究,在使用 Arduino 库和设置时,它们包含的 SoftwareSerial 库不支持 atMega64 和 atMega128,因为这些芯片上的 PIN 和中断不同。通过修改this example,我已成功在 atMega128 上的其他 GPIO 引脚上设置软串行。此示例仅用于传输。我仍在处理接收部分,因为它涉及设置中断和时钟。要记住的一个关键注意事项是确保您的时钟设置在整个项目中匹配并且串行波特率设置正确。我使用几种不同的波特率测试了我的代码。

作为初学者的旁注,我发现使用 Arduino 进行测试非常棒。但是,当尝试迁移到定制的 C 项目时,从 Arduino 项目迁移到干净的 C 项目是极其困难的。在我看来,学习 C 并在 Atmel Studio 环境中开始测试并远离 Arduino 几乎更容易。我希望这对刚开始编程的人有所帮助。

【讨论】:

    猜你喜欢
    • 2015-10-19
    • 2018-02-01
    • 2010-10-17
    • 2016-07-17
    • 2013-09-24
    • 2014-09-18
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多