OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2993|回复: 9

STM32F103的USART2乱码

[复制链接]

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-23
在线时间
10 小时
发表于 2018-5-24 10:33:58 | 显示全部楼层 |阅读模式
5金钱
我在原子开发板上用USART1通讯没问题,板子CH340G的。整个硬件回路是没问题的。

一、需要:
USART1和USART2一起用。

二、硬件连接:
在开发板上用跳线把PA2(TX)和PA3(RX)接到CH340G的(RXD)和(TXD)。

三、碰到乱码问题:
开发板用显示屏显示接收到的字符,发现没问题。
debug中断查看接收到的数组也没问题。

但是一旦printf或者USART2->DR通过串口显示,上位机接收到的数据就是乱码的,怎么回事?

四、上位机软件:
网上下的各种comdebug串口助手都是一样,自己写了一个串口调试debug,也是乱码。


有没有大神帮忙解决下?

最佳答案

查看完整内容[请看2#楼]

看你描述似乎是将串口打印功能给了串口2.你试试这个代码 看能否串口2打印输出正常(注意代码中串口2的波特率)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-5-24 10:33:59 | 显示全部楼层
看你描述似乎是将串口打印功能给了串口2.你试试这个代码 看能否串口2打印输出正常(注意代码中串口2的波特率)

精英 战舰V3 串口2(PA2,PA3).zip

2.63 MB, 下载次数: 77

MINI 串口2自发自收(PA2接RXD,PA3接TXD).rar

1.86 MB, 下载次数: 58

回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-23
在线时间
10 小时
 楼主| 发表于 2018-5-24 14:27:30 | 显示全部楼层
peng1554 发表于 2018-5-24 11:06
看你描述似乎是将串口打印功能给了串口2.你试试这个代码 看能否串口2打印输出正常(注意代码中串口2的波特 ...

这个可以,然后发现是重定义fputc函数的问题。
那么我要同时使用串口1和串口2,要怎么配置啊?

功能其实就是:
一:用串口2和模块通讯,取得模块数据。
二:然后通过串口1把数据传送给上位机。
回复

使用道具 举报

10

主题

778

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6745
金钱
6745
注册时间
2017-4-12
在线时间
1258 小时
发表于 2018-5-24 15:16:37 | 显示全部楼层
自己写个类似printf的串口2 的字符串发送函数啊
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-23
在线时间
10 小时
 楼主| 发表于 2018-5-24 16:17:02 | 显示全部楼层
peng1554 发表于 2018-5-24 11:06
看你描述似乎是将串口打印功能给了串口2.你试试这个代码 看能否串口2打印输出正常(注意代码中串口2的波特 ...

好像不行,用你给你验证串口2能用。
但是把我能用的串口1加进去,变成串口1不能用了。。
2个串口都能接收,但是必定有1个发送会乱码
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2017-4-24
在线时间
5 小时
发表于 2018-5-24 19:54:06 | 显示全部楼层
我猜测是不是软件的问题。
我同时用3个串口也是正常的啊。发送函数很简单,都是下面这个。
也可能我没明白您的意思。

//USART3 发送字符串
//s 待发送字符串地址
void USART3_SendString(char* s)
{
        while(*s)//检测字符串结束符
        {
                USART_SendData(USART3 ,*s++);//发送当前字符
                while(USART_GetFlagStatus(USART3, USART_FLAG_TC)== RESET);
        }
        while(USART_GetFlagStatus(USART3, USART_FLAG_TC)==RESET);
}
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2018-5-24
在线时间
9 小时
发表于 2018-5-24 20:35:18 | 显示全部楼层
本帖最后由 春风电子 于 2018-5-25 08:46 编辑

检查一下USART1和2的波特率,以及校验停止那些是不是设置一样的吧,
回复

使用道具 举报

33

主题

215

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2035
金钱
2035
注册时间
2017-12-11
在线时间
454 小时
发表于 2018-5-24 20:48:26 | 显示全部楼层
我猜测可能是一个发送函数比另外一个发送函数的优先级高。导致其中某个函数发送还未完全终结的情况下被打断,因此出现乱码。
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-23
在线时间
10 小时
 楼主| 发表于 2018-5-25 09:21:17 | 显示全部楼层
春风电子 发表于 2018-5-24 20:35
检查一下USART1和2的波特率,以及校验停止那些是不是设置一样的吧,

串口2的初始化和中断函数都是 串口1复制粘贴过去的。
就改了下端口的APB1,还有GPIO口那些。
波特率,校验那些都是一模一样的。
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2018-2-23
在线时间
10 小时
 楼主| 发表于 2018-5-25 09:24:03 | 显示全部楼层
bootblack 发表于 2018-5-24 20:48
我猜测可能是一个发送函数比另外一个发送函数的优先级高。导致其中某个函数发送还未完全终结的情况下被打断 ...

debug调试没有中断打断中断这种啊。
两个串口独立的,我用上位机和串口1通讯,就不会和串口2通讯。
和串口2通讯,就不会和串口1通讯。
上位机就开一个comdebug,只能打开一个com口。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-12 22:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表