OpenEdv-开源电子网

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

串口发送后续要回车换行单片机才能接收数据

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2023-7-10
在线时间
4 小时
发表于 2023-10-21 20:58:16 | 显示全部楼层 |阅读模式
1金钱
基于正点原子的串口通信例程,我做了一个测试,串口接收一串16进制的数据(其实就是modbus协议的问询帧),然后在串口里解析数据,并通过串口发出对应的数据。但是出现了异常,串口发出来的会在我发送的数据后边增加0d0a单片机才能收到数据,应该怎么修改,求助

/**
* @brief       串口数据接收回调函数
                数据处理在这里进行
* @param       huart:串口句柄
* @retval      无
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART_UX)                    /* 如果是串口1 */
    {
        if ((g_usart_rx_sta & 0x8000) == 0)             /* 接收未完成 */
        {
            if (g_usart_rx_sta & 0x4000)                /* 接收到了0x0d(即回车键) */
            {
                if (g_rx_buffer[0] != 0x0a)             /* 接收到的不是0x0a(即不是换行键) */
                {
                    g_usart_rx_sta = 0;                 /* 接收错误,重新开始 */
                }
                else                                    /* 接收到的是0x0a(即换行键) */
                {
                    g_usart_rx_sta |= 0x8000;           /* 接收完成了 */
                }
            }
            else                                        /* 还没收到0X0d(即回车键) */
            {
                if (g_rx_buffer[0] == 0x0d)
                    g_usart_rx_sta |= 0x4000;
                else
                {
                    g_usart_rx_buf[g_usart_rx_sta & 0X3FFF] = g_rx_buffer[0];
                    g_usart_rx_sta++;

                    if (g_usart_rx_sta > (USART_REC_LEN - 1))
                    {
                        g_usart_rx_sta = 0;             /* 接收数据错误,重新开始接收 */
                    }
                }
            }
        }

        HAL_UART_Receive_IT(&g_uart1_handle, (uint8_t *)g_rx_buffer, RXBUFFERSIZE);
    }
}


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

使用道具 举报

10

主题

3283

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8211
金钱
8211
注册时间
2020-5-11
在线时间
3709 小时
发表于 2023-10-23 09:55:41 | 显示全部楼层
把你发的代码每一句的作用搞清楚就行了
专治疑难杂症
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-10-23 13:05:29 | 显示全部楼层
代码注释很明白,看懂就行
回复

使用道具 举报

58

主题

6292

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11411
金钱
11411
注册时间
2014-4-1
在线时间
1283 小时
发表于 2023-10-23 13:31:08 | 显示全部楼层

够小白的。
学一下用仿真器,单步调试,看看单片机收到0d0a发生了什么,没收到又发生了什么。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2023-7-10
在线时间
4 小时
 楼主| 发表于 2023-10-24 21:33:03 | 显示全部楼层
a5820736 发表于 2023-10-23 13:05
代码注释很明白,看懂就行

你好,可以帮忙写一个串口收发代码的程序吗
回复

使用道具 举报

3

主题

800

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3775
金钱
3775
注册时间
2017-3-7
在线时间
1645 小时
发表于 2023-10-25 09:35:56 | 显示全部楼层
hanyu1 发表于 2023-10-24 21:33
你好,可以帮忙写一个串口收发代码的程序吗

网上很多教程,cubeide直接生成一个就能用,具体程序还得看你自己需求和设计啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-27 11:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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