OpenEdv-开源电子网

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

串口发送数据过快会有乱码

[复制链接]

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
发表于 2021-4-13 16:42:12 | 显示全部楼层 |阅读模式
1金钱
串口发送数据过快会有乱码,麻烦问一下改从哪些方面解决

最佳答案

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

从数据上可以看出,程序中“printf("\r\n您发送的消息为:\r\n\r\n");”到“USART_ClearFlag(USART1,USART_FLAG_TC” 之间漏了一个字节0x0A,查看一下fputc函数是不是发送数据未等待发送完成就退出了。 从数据上看,USART_RX_BUF中的内容开头是一串0,结尾有个1,应该是接收处理有问题。 我是没有相应的电路和程序,不知具体情况。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8691
金钱
8691
注册时间
2020-5-11
在线时间
4183 小时
发表于 2021-4-13 16:42:13 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-4-15 15:04 编辑
awoshiwo 发表于 2021-4-15 14:38
这是发送了7次数据 1 后的现实

0D 0A C4 FA B7 A2 CB CD B5 C4 CF FB CF A2 CE AA 3A 0D 0A 0D 00 00  ...

从数据上可以看出,程序中“printf("\r\n您发送的消息为:\r\n\r\n");”到“USART_ClearFlag(USART1,USART_FLAG_TC”
之间漏了一个字节0x0A,查看一下fputc函数是不是发送数据未等待发送完成就退出了。
从数据上看,USART_RX_BUF中的内容开头是一串0,结尾有个1,应该是接收处理有问题。
我是没有相应的电路和程序,不知具体情况。
傲游截图20210415145554.jpg

专治疑难杂症
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8691
金钱
8691
注册时间
2020-5-11
在线时间
4183 小时
发表于 2021-4-14 11:46:18 | 显示全部楼层
先把问题说清楚些,
是单片机给单片机发还是单片机给电脑发?
是单片机收到乱码还是电脑收到乱码?
多高的波特率?
有没有程序?
硬件是怎么连的?
串口线很长?
专治疑难杂症
回复

使用道具 举报

11

主题

131

帖子

0

精华

高级会员

Rank: 4

积分
757
金钱
757
注册时间
2020-5-11
在线时间
71 小时
发表于 2021-4-14 14:34:28 | 显示全部楼层
加个延时
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-15 11:39:35 | 显示全部楼层
LcwSwust 发表于 2021-4-14 11:46
先把问题说清楚些,
是单片机给单片机发还是单片机给电脑发?
是单片机收到乱码还是电脑收到乱码?

使用STM32F1战舰版板子,做串口实验那里
用串口工具给单片机发送数据,发送过快会导致串口工具上显示乱码、串口工具不显示数据、发送一串数字会丢失几个这种现象

波特率115200/9600都试了还是不行

串口线大概一米

下面是主函数
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"



int main(void)
{               
        u16 t;
        u16 a='4';
        u16 len;       
        u16 times=0;

         
        delay_init();                      
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
         
        uart_init(115200);         
        LED_Init();                            
                 
        while(1)
        {
       
                if(USART_RX_STA&0x8000)
                       
                {

                        len=USART_RX_STA&0x3fff;

                        printf("\r\n您发送的消息为:\r\n\r\n");
                       
                       
                        for(t=0;t<len;t++)
                        {
                                       
                       
                                USART_ClearFlag(USART1,USART_FLAG_TC                                                              USART_SendData(USART1, USART_RX_BUF[t]);
                                while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);

                               
                                if(USART_RX_BUF[t]==a)
                                        LED0=0;
                                else                               
                                        LED0=1;
                               
                        }
                       
                        printf("\r\n\r\n");//插入换行
                        USART_RX_STA=0;
               
                       
                }
               
                else
                       
                {
                        times++;
                        if(times%5000==0)
                        {
                       
                                printf("hello world \r\n\r\n");
                        }
                       
                        delay_ms(10);   
                }
        }         
}

本人刚开始学单片机不到一周,纯小白,麻烦大佬解答一下,非常感谢!!!
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-15 11:41:49 | 显示全部楼层

麻烦问一下延时函数应该加在哪个位置,试了几个地方都还是没解决问题:
回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8691
金钱
8691
注册时间
2020-5-11
在线时间
4183 小时
发表于 2021-4-15 11:51:19 | 显示全部楼层
有些串口助手会丢数据,也可能是串口助手的某些设置不对。
建议使用sscom.
专治疑难杂症
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-15 14:19:41 | 显示全部楼层
LcwSwust 发表于 2021-4-15 11:51
有些串口助手会丢数据,也可能是串口助手的某些设置不对。
建议使用sscom.

用sscom大部分情况都不显示数据了,只是下面的

您发送的消息为:
您发送的消息为:
您发送的消息为:



用XCOM是显示下面这种情况


您发送的消息为:

LC?1


您发送的消息为:

1


您发送的消息为:

1

您发送的消息为:

LC?1

回复

使用道具 举报

12

主题

3402

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8691
金钱
8691
注册时间
2020-5-11
在线时间
4183 小时
发表于 2021-4-15 14:22:11 | 显示全部楼层
awoshiwo 发表于 2021-4-15 14:19
用sscom大部分情况都不显示数据了,只是下面的

您发送的消息为:

勾选“HEX显示”看看
专治疑难杂症
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-15 14:38:56 | 显示全部楼层
LcwSwust 发表于 2021-4-15 14:22
勾选“HEX显示”看看

这是发送了7次数据 1 后的现实

0D 0A C4 FA B7 A2 CB CD B5 C4 CF FB CF A2 CE AA 3A 0D 0A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 0D 0A 0D 0A 68 65 6C 6C 6F 20 77 6F 72 6C 64 20 0D 0A 0D 0A 0D 0A C4 FA B7 A2 CB CD B5 C4 CF FB CF A2 CE AA 3A 0D 0A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 0D 0A 0D 0A 0D 0A C4 FA B7 A2 CB CD B5 C4 CF FB CF A2 CE AA 3A 0D 0A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 0D 0A 0D 0A 0D 0A C4 FA B7 A2 CB CD B5 C4 CF FB CF A2 CE AA 3A 0D 0A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 0D 0A 0D 0A 0D 0A C4 FA B7 A2 CB CD B5 C4 CF FB CF A2 CE AA 3A 0D 0A 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 0D 0A 0D 0A
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2021-4-15 14:54:16 | 显示全部楼层
因为那个代码仅仅是示例代码,实际应用中根本不那样写!!!
学无止境
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2021-4-15 14:54:42 | 显示全部楼层
又何必去纠结去怎么在这个基础上去优化?
学无止境
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-15 15:00:32 | 显示全部楼层
jermy_z 发表于 2021-4-15 14:54
又何必去纠结去怎么在这个基础上去优化?

因为这个是作业,有乱码出现导师让确认原因 改好的
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2021-4-15 15:10:50 | 显示全部楼层
awoshiwo 发表于 2021-4-15 15:00
因为这个是作业,有乱码出现导师让确认原因 改好的

你多少间隔去发的?
学无止境
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13135
金钱
13135
注册时间
2012-11-26
在线时间
3814 小时
发表于 2021-4-15 15:13:52 | 显示全部楼层
awoshiwo 发表于 2021-4-15 15:00
因为这个是作业,有乱码出现导师让确认原因 改好的

因为目前主循环的逻辑本就不是实时响应的,所以丢数据正常,以这个为基础去改,没有实际意义。作业的话,还规定必须多少间隔了?
学无止境
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2021-4-15 18:39:08 | 显示全部楼层
估计你的场景是用串口助手不停的发数据,同时看板子返回的数据,这个时候就牵扯到板子发送数据的时候又接收到数据,把USART_RX_BUF的数据给覆盖了,导致再发送出来的时候是错误的
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-19 19:08:29 | 显示全部楼层
a5820736 发表于 2021-4-15 18:39
估计你的场景是用串口助手不停的发数据,同时看板子返回的数据,这个时候就牵扯到板子发送数据的时候又接收 ...

确实是这样的,因为场景不能改变,所以想从代码方面看一下能不能解决
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-19 19:09:17 | 显示全部楼层
jermy_z 发表于 2021-4-15 15:13
因为目前主循环的逻辑本就不是实时响应的,所以丢数据正常,以这个为基础去改,没有实际意义。作业的话, ...

没规定间隔,只要正常发送不出现数据丢失和乱码就可以
回复

使用道具 举报

1

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-4-13
在线时间
13 小时
 楼主| 发表于 2021-4-19 19:10:14 | 显示全部楼层
LcwSwust 发表于 2021-4-15 15:03
从数据上可以看出,程序中“printf("\r\n您发送的消息为:\r\n\r\n");”到“USART_ClearFlag(USART1,USART ...

十分感谢大佬的解答,我再找找原因
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-27 23:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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