OpenEdv-开源电子网

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

串口发送异常,每一次发送多发了0X0A

[复制链接]

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-2-2
在线时间
6 小时
发表于 2023-8-9 12:16:51 | 显示全部楼层 |阅读模式
1金钱
基于正点原子的串口通信例程,我做了一个测试,串口接收一串16进制的数据(其实就是modbus协议的问询帧),然后在串口里解析数据,并通过串口发出对应的数据。但是出现了异常,串口发出来的会在我发送的数据前面增加0X0A。

不知道是什么原因,求助~



相关代码如下


int main(void)
{
    uint8_t t;
    uint8_t len;
    uint16_t times = 0;

    sys_stm32_clock_init(9);    /* 设置时钟, 72Mhz */
    delay_init(72);             /* 延时初始化 */
    usart_init(72, 9600);     /* 串口初始化为115200 */
    led_init();                 /* 初始化LED */

    while (1)
    {
        if (g_usart_rx_sta & 0x8000)        /* 接收到了数据? */
        {
            len = g_usart_rx_sta & 0x3fff;  /* 得到此次接收到的数据长度 */
            // printf("\r\n您发送的消息为:\r\n");
            memcpy(ModVars.rxbuf, g_usart_rx_buf, len);
            if (len > 0)
            {
                Modbus_process();
            }
            // printf("\r\n%X\r\n",g_usart_rx_buf[0]); /* 插入换行 */

            // for (t = 0; t < len ; t++)
            // {
            //     USART_UX->DR = g_usart_rx_buf[t];

            //     while ((USART_UX->SR & 0X40) == 0); /* 等待发送结束 */
            // }            
            // for (t = 0; t < len ; t++)
            // {
            //     USART_UX->DR = ModVars.rxbuf[t];

            //     while ((USART_UX->SR & 0X40) == 0); /* 等待发送结束 */
            // }

            // for (t = 0; t < ModVars.length ; t++)
            // {
            //     printf("%x",ModVars.txbuf[0]);
            // }

            for (t = 0; t < ModVars.length ; t++)
            {
                USART_UX->DR = ModVars.txbuf[t];

                while ((USART_UX->SR & 0X40) == 0); /* 等待发送结束 */
            }
            g_usart_rx_sta = 0;
        }
        else
        {
            times++;

            if (times % 5000 == 0)
            {
                printf("\r\n正点原子 STM32开发板 串口实验\r\n");
                printf("正点原子@ALIENTEK\r\n\r\n\r\n");
            }

            // if (times % 200 == 0) printf("请输入数据,以回车键结束\r\n");

            if (times % 30  == 0) LED0_TOGGLE(); /* 闪烁LED,提示系统正在运行. */

            delay_ms(10);
        }
    }
}





注释掉的部分是用于排查问题的,我把接收到的数据,和要发送的数据的buf都打印出来看过了,没问题,而且根据CRC显示,计算的也没问题,证明收到的数据是正常的,也能正常解析,但是不知道为什么发出去的就会多一个0x0A。

去掉0x0A,后面的数据部分也是正常的,CRC计算值都没问题。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-2-2
在线时间
6 小时
 楼主| 发表于 2023-8-9 12:19:07 | 显示全部楼层
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-2-2
在线时间
6 小时
 楼主| 发表于 2023-8-9 21:01:46 | 显示全部楼层
Snipaste_2023-08-09_20-58-18.jpg Snipaste_2023-08-09_20-56-11.jpg Snipaste_2023-08-09_20-54-09.jpg
上面是对应的测试断点和串口收到的数据,能够确定发送的时候没有发送0X0A,不知道0x0A从哪里来的
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-8-10 10:01:55 | 显示全部楼层
换个串口助手试一下
专治疑难杂症
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2023-8-10 11:12:09 | 显示全部楼层
debug看一下是哪一步加进去的
回复

使用道具 举报

10

主题

213

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5607
金钱
5607
注册时间
2016-12-19
在线时间
724 小时
发表于 2023-8-12 05:47:18 | 显示全部楼层
0a就是回车啊
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-2-2
在线时间
6 小时
 楼主| 发表于 2023-8-12 16:05:16 | 显示全部楼层
阿侑kevin 发表于 2023-8-10 11:12
debug看一下是哪一步加进去的

OK,我回头看看
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-2-2
在线时间
6 小时
 楼主| 发表于 2023-8-12 16:06:27 | 显示全部楼层

但是我没有单独发回车,我没想明白哪里来的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-8-14 23:41:01 | 显示全部楼层
Genson 发表于 2023-8-12 16:06
但是我没有单独发回车,我没想明白哪里来的

仿真找问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2020-2-2
在线时间
6 小时
 楼主| 发表于 2023-8-15 17:56:19 | 显示全部楼层

好的,谢谢~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 01:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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