硬汉嵌入式论坛

 找回密码
 立即注册
查看: 581|回复: 1
收起左侧

[有问必答] 关于MODBUS协议中UART_FIFO数据传输问题

[复制链接]

0

主题

0

回帖

0

积分

新手上路

积分
0
发表于 2023-8-12 12:58:25 | 显示全部楼层 |阅读模式

        /*
            在调试GPRS例程时,下面的代码出现死机,while 死循环
            原因: 发送第1个字节时 _pUart->usTxWrite = 1;_pUart->usTxRead = 0;
            将导致while(1) 无法退出
        */
        while (1)
        {
            uint16_t usRead;

            DISABLE_INT();
            usRead = _pUart->usT
            {
                usRead = 0;
            }

            if (usRead != _pUart->usTxWrite)
            {
                break;
            }
        }
    #else
        /* 当 _pUart->usTxBufSize == 1 时, 下面的函数会死掉(待完善) */
        while (1)
        {
            __IO uint16_t usCount;

            DISABLE_INT();
            usCount = _pUart->usTxCount;
            ENABLE_INT();

            if (usCount < _pUart->usTxBufSize)
            {
                break;
            }
        }
    #endif

        /* 将新数据填入发送缓冲区 */
        _pUart->pTxBuf[_pUart->usTxWrite] = _ucaBuf[i];

        DISABLE_INT();
        if (++_pUart->usTxWrite >= _pUart->usTxBufSize)
        {
            _pUart->usTxWrite = 0;
        }
        _pUart->usTxCount++;
        ENABLE_INT();
    }

    USART_ITConfig(_pUart->uart, USART_IT_TXE, ENABLE);



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2023-8-12 14:23:51 | 显示全部楼层
1、标准库bsp_uart_fifo.c里面串口发送函数UartSend修正完善
https://www.armbbs.cn/forum.php?mod=viewthread&tid=95694

2、HAL库版本,发布之初就已经修改
https://www.armbbs.cn/forum.php?mod=viewthread&tid=16989
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 21:33 , Processed in 0.196250 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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