查看: 1711|回复: 6

[求助] USART_RTOS_Receive函数出现接收不到的数据的情况

[复制链接]

该用户从未签到

5

主题

16

帖子

0

注册会员

Rank: 2

积分
74
最后登录
2022-9-28
发表于 2021-9-30 09:16:56 | 显示全部楼层 |阅读模式
    在串口收到的数据长度小于函数第三个参数uint32_t length时,USART_RTOS_Receive函数会仍处于接收数据状态;直到串口收到的数据大于或等于设定的uint32_t length时,USART_RTOS_Receive函数才结束接收数据状态;
    即比如函数的第三个参数length设定为4,当串口收到2个数据时,USART_RTOS_Receive不会结束接收数据状态;
请问下这个是正常的情况吗?有没有办法解决此问题(除了把第三个参数length设定为1)?

最佳答案

帧尾检测是通过字节接收的间隔而判断的。 即帧尾检测一定是会存在的——这是协议所规定的
回复

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 09:53
  • 签到天数: 1479 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92702
    最后登录
    2024-4-26
    发表于 2021-9-30 10:32:19 | 显示全部楼层
    本帖最后由 stm1024 于 2021-9-30 23:46 编辑

    这个接收是会阻塞线程的吧? 1.png 3.png 2.png 6.png 4.png 5.png 7.png 8.png 9.png 10.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    74
    最后登录
    2022-9-28
     楼主| 发表于 2021-9-30 10:44:39 | 显示全部楼层
    这个接收是会阻塞线程的吧?---是的,我开了一个线程专门处理串口数据,希望实现:串口有数据来,函数结束接收,接下来处理数据;处理之后再接收数据。代码如下:
        /* Receive user input and send it back to terminal. */
        do
        {
            error = USART_RTOS_Receive(&FLEXCOMM1_rtos_handle, recv_buffer, sizeof(recv_buffer), &n);
            if (error == kStatus_USART_RxRingBufferOverrun)
            {
                /* Notify about hardware buffer overrun */
                if (kStatus_Success !=
                    USART_RTOS_Send(&FLEXCOMM1_rtos_handle, (uint8_t *)send_buffer_overrun, strlen(send_buffer_overrun)))
                {
                                                                   
                    vTaskSuspend(NULL);
                }
            }
            if (n > 0)
            {
                /* send back the received data */
                USART_RTOS_Send(&FLEXCOMM1_rtos_handle, recv_buffer, n);
                ux_rs232_handle(recv_buffer, n);       
            }
        } while (kStatus_Success == error);
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-9-30 10:46:01 | 显示全部楼层
    我是依据我们的通讯协议而设置这个变量。
    在使用modbus-rtu协议时,我们使用时间间隔做为帧尾检测。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    16

    帖子

    0

    注册会员

    Rank: 2

    积分
    74
    最后登录
    2022-9-28
     楼主| 发表于 2021-9-30 13:00:24 | 显示全部楼层
    我是依据我们的通讯协议而设置这个变量。
    在使用modbus-rtu协议时,我们使用时间间隔做为帧尾检测
    ---如果串口通讯数据不定长,是否就存在丢数据情况了;如果丢数据,帧尾是否就检测不到了?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-10-5 22:47:21 | 显示全部楼层
    帧尾检测是通过字节接收的间隔而判断的。
    即帧尾检测一定是会存在的——这是协议所规定的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-6-15 09:23
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    0

    主题

    14

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    415
    最后登录
    2022-6-30
    发表于 2021-10-8 14:15:55 | 显示全部楼层
    看一下是否有别的任务 优先级高的还是低的 会影响。
    加油加油加油
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 05:55 , Processed in 0.144020 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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