【发布时间】:2011-09-29 05:28:38
【问题描述】:
我在Arduino Uno 上运行了简单的串行程序,它只会回显您输入的任何内容。这在 Arduino Sketch IDE (v22) 中运行时完美运行。
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(115200); // opens serial port, sets data rate
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
(代码取自http://arduino.cc/en/Serial/Available)
但是,我不喜欢使用 Arduino IDE,而宁愿用 avr-g++ 编译我的 C++ 代码,所以我写了这个,它的功能完全相同与上述相同:
extern "C" {
#include <avr/io.h>
}
#include <HardwareSerial.h>
extern "C" void __cxa_pure_virtual() { while(1); }
int main (void)
{
int incomingByte = 0;
Serial.begin(115200);
while (1) {
if (Serial.available() > 0) {
incomingByte = Serial.read();
//print as an ASCII character
Serial.print("received: ");
Serial.println(incomingByte, DEC);
}
}
return 1;
}
我编译并运行它,但它不起作用。我从来没有看到我的文字回响给我。我尝试在while(1) 循环中打印出Serial.available() 的值,它始终为零。每当我在键盘上键入时,我都会看到 RX LED 亮起,但之后没有任何反应。我可以编辑我的代码以成功调用Serial.println(),只要它在Serial.available() 条件之外。
我已确认我的串口软件中的baud rate 也设置为 115200。是的,我的串口软件指向正确的串口。
我错过了什么?
【问题讨论】: