1

为什么我在串口上打印了额外的字符?
请参阅随附的屏幕截图。

我的 Nextion 命令中的额外字符请参见圆圈区域
收到 0x1A 并且我没有发送回车。

我开发了一个代码来实现 nextion display 和 ATmega328P 通过串口进行通信。
手头的问题,在尝试更新进度条。发送到组件的第一个值将传递,但随后的命令/值,模拟器返回错误。
我将问题追溯到这个终止字符串:“\xff\xff\xff”。
从 Nextion 编辑器模拟器。Atmega328P 在串口上发送了一个杂散字符,我无法理解它来自这里。

我使用 Eclipse + AVR 插件,这就是我打包命令和发送的方式。第二个功能涉及串行发送。

void setValue(uint8_t* value){
    char buf[40]={};
    sprintf(buf, "%s.val=%u", get_name(), *value);
    return send_cmd_reply(buf);
}

bool send_cmd_reply(const char* cmd)
{
    UsartString(cmd);
    UsartString("\xff\xff\xff");
    return (TRUE);
}

int UsartString(const char* fmt, ...)
{
    char buff[200];
    va_list args;
    va_start(args, fmt);
    int status = vsnprintf(buff, sizeof(buff), fmt, args);
    va_end(args);
    uint8_t*s = (UI8_t *)&buff;
    while (*s) {UsartChar(*s++);}
    return (status);
}

当我尝试使用 Arduino IDE 及其串行实现如下时,一切都很好。

String Tosend = "j1.val=";
Tosend += String(value);                                             
Serial.print(Tosend);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
4

1 回答 1

0

不幸的是,我不熟悉 Eclipse + AVR。但是我可以告诉你 0x1A (ctrl^z) 是一个流行的“传输结束”字符。我建议为此检查您的 IDE 或 USART 处理程序的配置。

如果这根本不是问题,我无法理解您的屏幕截图,非常抱歉。

希望我能帮上忙,斯特罗米

于 2021-12-21T08:37:14.467 回答