为什么我不能通过RS232成功发送消息?

2019-07-14 17:23发布

在过去的一周里,我一直希望从STM32F407发送UART消息,并使用白蚁通过ugreen RS232转USB电缆在笔记本电脑上读取它。我已经使用STMCube生成代码并通过阅读“stm32f4xx_hal_uart.c”文件顶部的相关说明(并观看大量视频和在线阅读)添加代码。我在示波器上检查了传输的消息,并且它与ASCII表示相匹配。例如,我发送'Q',它是0101 0001,我收到'W',它是0101 0111.范围上的读数显示: 1.png 白蚁输出与示波器上显示的信号相同。 2.png 我已确认波特率/奇偶校验/ HWcontrol在白蚁和我的代码中是匹配的。为了获得正确的字符,我尝试降低和提高波特率。
我尝试过不同的字符集来尝试查找导致显示错误字符的模式。
另外我尝试过不同的终端,比如Putty或Teraterm。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
xiaolu511
1楼-- · 2019-07-14 23:02
乍一看,你的示波器轨迹显示的信号似乎在0V处空闲(看看1轨迹左边带黄 {MOD}背景的符号 - 这是0V电平)然后脉冲低于0V。对于直接来自STM32的逻辑信号来说,情况并非如此,事实上,事实并非如此。查看左下角,您已将通道1设置为AC耦合,该信号是真的空转高和脉冲到0V左右。使用直流耦合可以获得该信号的清晰视图。
iettke
2楼-- · 2019-07-15 05:01
您错过了RS232的主要细节。逻辑级别如下: 3.png 图1. RS232信号电平。
逻辑1 = -3至-12 V.
逻辑0 = +3至+12 V.
在-3和+3之间,逻辑电平未定义。
RS232起始位为逻辑0。
要将TTL(5 V)逻辑转换为RS232,需要驱动程序。MAX232等芯片可为您提供逻辑电平反转和电压提升。
iettke
3楼-- · 2019-07-15 05:27
如果逻辑电平反转,有时可以“作弊”并将TTL信号馈入RS232输入。该方法的可靠性取决于RS232输入上使用的芯片。 4.png 图2.传输的波形。最重要的是你传输的'Q'的位模式。在底部是RS232输入如何读取它。

请注意,RS232输入正在寻找一个正边沿来指示起始位。直到数据的第二位才会发生这种情况,因此此后的所有内容都是向右一位并且在接收器看到它时反转。幸运的是,你的MSB是停止位的正确逻辑电平,因此接收器将其解释为有效帧,对其进行解码并显示“W”。

出于测试目的,您可以反转TTL输出。这可能会起作用,因为它正在“工作”。
iettke
4楼-- · 2019-07-15 09:44
 精彩回答 2  元偷偷看……
bobnice
5楼-- · 2019-07-15 13:54
作为更好的替代方案,可提供USB转TTL UART电缆。如果OP无论如何都在使用USB适配器,那么增加额外的电平转换芯片就没那么多了。
LANxs
6楼-- · 2019-07-15 17:28
RS-232是逻辑0 =双极性V +,其为> 2V且TTL等效阈值为1.5V(典型值)。在CMOS像74HCTxx与小滞后(50mV ??)

一周热门 更多>