为什么SoftwareSerial不适用于Atmega128

时间:2016-12-01 23:30:42

标签: avr atmega atmelstudio software-serial

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

2 个答案:

答案 0 :(得分:0)

您是否遇到过此编译错误: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

答案 1 :(得分:0)

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

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