找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1445|回复: 4
打印 上一主题 下一主题
收起左侧

STC32G单片机串口3接收数据字节数不对,帮我看一下吧?

[复制链接]
跳转到指定楼层
楼主
程序是串口3接收,串口1发送串口3接收到的字节数,发送八个,经常收到7个,程序在下边,请帮我看一下原因,谢谢!

11111.PNG (173.36 KB, 下载次数: 58)

11111.PNG

V1.6 STC32G重构 - UART3.7z

65.16 KB, 下载次数: 7

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:525244 发表于 2022-4-3 18:31 | 只看该作者
程序很简单,就两个串口中断接收,DMA发送。串口3直接TTL转USB时。数据收发没问题。当用USB转485时,单片机接收数据就容易丢数据,一串数据前边应该是4个字节,收到却是三个错误的字节,应该从RS485芯片下手吧
#ifdef UART3
void UART3_ISR_Handler (void) interrupt UART3_VECTOR
{
        if(RI3)
        {
                CLR_RI3();
                if(COM3.B_RX_OK == 0)
                {
                        if(COM3.RX_Cnt >= COM_RX3_Lenth)        COM3.RX_Cnt = 0;
                        if(COM3.RX_Cnt == 16)        IWEDATA.ADC0++;
                        RX3_Buffer[COM3.RX_Cnt++] = S3BUF;
                        COM3.RX_TimeOut = TimeOutSet3;
                        SBUF=S3BUF;
                }
        }

        if(TI3)
        {
                CLR_TI3();
                COM3.B_TX_busy = 0;
               
//                if(COM3.TX_read != COM3.TX_write)
//                {
//                         S3BUF = TX3_Buffer[COM3.TX_read];
//                        if(++COM3.TX_read >= COM_TX3_Lenth)                COM3.TX_read = 0;
//                }
//                else        COM3.B_TX_busy = 0;
        }
}
#endif
上边是串口接收中断,收到数据发给串口1,串口1接收到的数据偶尔时错误的。
回复

使用道具 举报

板凳
ID:525244 发表于 2022-4-3 19:38 | 只看该作者
通过逻辑分析仪查看RS485转TTL,UART3收到我数据是正确的的,但是单片机接收到的是不正常的。把TTL直接接在UART3上,收到的数据就正常。是RXD设置了高阻输入,打开了上拉电阻。TXD设置为推挽输出,这样合理吗?
回复

使用道具 举报

地板
ID:301191 发表于 2022-4-4 01:54 | 只看该作者
顶一下
回复

使用道具 举报

5#
ID:507641 发表于 2022-4-4 11:58 | 只看该作者
你要考虑的是要加等待判断,是没接收完。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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