用户
 找回密码
 立即注册

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

  • QQ空间
  • 回复
  • 收藏

该用户从未签到

basicbird 注册会员 2018-6-14 15:47 楼主
本帖最后由 basicbird 于 2018-6-16 16:06 编辑

程序:
void setup() {

  Serial.begin(115200);
}

void loop() {  

   Serial.printf("123456");
}

-------------------
结果:
       我用arduino串口监视器看输出正常
问题:
       我用串口调试助手输出的是---Vg硋V6V
1.png
该乱码怎么解决?


我可以肯定你把 RS232 的线(RS232电平)直接接在 Arduino.RXD/TXD(TTL电平)上,原因如下:

"g硋V6V" 字串在 GBK 编码(win32应用程序默认的字符集)下数据为 67 B3 76 56 36 56,
你可以试试用十六进制显示接收,应该也是每包这个东西。

PC端显示这个东西,代表着PC.UART收到了如下格式的 TTL 电平信号(8n1串行数据包):
L HHHL LHHL H
L HHLL HHLH H
......

在 RS232 电平下,可以简单认为取反(PC.RS232线上的信号):
H LLLH HLLH L
H LLHH LLHL L
......

在单片机端,你发送 "123456",对应的 TXD(TTL电平) 信号应该是:
L HLLL HHLL H
L LHLL HHLL H
......

按照单片机发送的数据,逐位找过去,每个 H 后的 8-bit 均与PC端反算出来的 RS232 电平一样。
例如单片机第二比特的 H 后有 LLL HHLL H,这与 RS232 第一行是相通的。
出现这种情况,很明显你把RS232 的线(RS232电平)直接接在 Arduino.RXD/TXD(TTL电平)上。
USB 转 232 是不错,但是你得看好电平标准啊,TTL直接干232不怕烧东西啊。

至于为什么 IDE 里显示的没错,我很怀疑你的 printf 函数是什么。
我查了手册,Serial 类里并没有 printf 函数,目测是被重载了,
其特性是否加入了什么多余的东西(例如直接在IDE显示)就不得而知了。
C++最疯狂的BUG非重载莫属。
看下波特率是不是一样~
打赏一点,努力一点
sun910231 发表于 2018-6-14 18:39
看下波特率是不是一样~

看过了,,,都一样的!
basicbird 发表于 2018-6-15 07:58
看过了,,,都一样的!

改低一些波特率试一下,都改成9600或者38400~~
打赏一点,努力一点
sun910231 发表于 2018-6-15 08:39
改低一些波特率试一下,都改成9600或者38400~~

我用9600和38400都试过了还是乱码,,,我电脑是通过USB-232接到arduino的0,1脚和GND三角做接收,程序中print打印,电脑接收都是乱码!arduino是独立供电器供电
你把串口助手的整个界面截屏下来给大家看看
打赏作者鼓励一下!
mostblack 发表于 2018-6-15 10:02
你把串口助手的整个界面截屏下来给大家看看

补上图片
3.png 2.png

问题解决了吗?乱码一般是协议不对。
看你画面,是“串口转网络调试助手”,查一下协议是否选对。
上海老王 发表于 2018-6-15 10:39
问题解决了吗?乱码一般是协议不对。
看你画面,是“串口转网络调试助手”,查一下协议是否选对。 ...

没有解决,,,左半是串口调试,,,右边的网络没用,,谢谢!
https://blog.csdn.net/Grand910616/article/details/52069002
不知道你用的是不是这个帖子里的硬件,如果是,这个硬件应该是RS232接口的,不能直接连arduino的TTL口的,这方面在研究一下吧
12下一页
发新帖
发表评论
高级模式  
您需要登录后才可以回帖 登录 | 立即注册  
关闭

推荐主题 上一条 /2 下一条