ZARD渐空 发表于 2025-5-30 11:37:30

求大佬指点,用RTX51 Tiny时,串口2发送没问题,但串口2接收时会丢数据

<p>芯片用的是Ai8H2K32U,用以下例程<strong>裸机测试时,串口2接收没异常</strong>,不会丢数据</p>
<p><img src="data/attachment/forum/202505/30/111304o7ja7cqzw1azxm77.png" alt="image.png" title="image.png" /></p>
<p>程序里做了一点修改,用预处理命令来决定开启或关闭RTX51 Tiny</p>
<p><img src="data/attachment/forum/202505/30/111453ncj66s1giiqs1jni.png" alt="image.png" title="image.png" /></p>
<p>开启RTX51 Tiny时需要把这两个文件添加进去,不开启时需要把这两个文件删掉</p>
<p><img src="data/attachment/forum/202505/30/113247bqw9vfuqjj2jqwa8.png" alt="image.png" title="image.png" /></p>
<p>重点来了,程序主频是24MHz,以下是裸机时的接收现象,可以发现接收时不会丢数据的</p>
<p><img src="data/attachment/forum/202505/30/113319rj9v9s88eomooqxe.png" alt="image.png" title="image.png" /><br />
<img src="data/attachment/forum/202505/30/111808k5os5sv5onmpp87q.png" alt="image.png" title="image.png" /></p>
<p>以下是使用RTX51 Tiny时的接收现象,可以发现接收时会丢数据</p>
<p><img src="data/attachment/forum/202505/30/113349xncprpd9eyi9idqc.png" alt="image.png" title="image.png" /><br />
<img src="data/attachment/forum/202505/30/112046tt7cii7yxrxk1kwi.png" alt="image.png" title="image.png" /></p>
<p>查了好久没查出什么原因,猜测是任务调度与串口接收中断有冲突?串口接收中断优先级开到最高级也没用</p>
<p>找不出原因了,有没有大佬帮忙看一下。</p>
<p>以下是串口中断处理函数</p>
<p><img src="data/attachment/forum/202505/30/154308gjzfdxkzrre4d6ye.png" alt="image.png" title="image.png" /></p>
<p>以下是RTX51 Tiny配置</p>
<p><img src="data/attachment/forum/202505/30/154419elf19uupuhcfccu1.png" alt="image.png" title="image.png" /></p>
<p>工程文件放在最后</p>
<p><a href="forum.php?mod=attachment&amp;aid=102053" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:06-串口2中断模式与电脑收发测试.zip</a></p>

haiyang201 发表于 2025-5-30 15:12:53

这个是干啥的,可以直接用?

ZARD渐空 发表于 2025-5-30 15:22:41

haiyang201 发表于 2025-5-30 15:12
这个是干啥的,可以直接用?

这是RTX51 Tiny自带的一个延时函数,通过#include"RTX51TNY.h"头文件调用的

Ayb_ice 发表于 2025-5-30 15:26:18

1MS滴答中断对于TINY来说有点太快了,

ZARD渐空 发表于 2025-5-30 15:27:44

Ayb_ice 发表于 2025-5-30 15:26
1MS滴答中断对于TINY来说有点太快了,
因为我设置了INT_CLOCK是1ms,而且这只是一个串口查询接收任务,就算把时间加大了也还是会丢数据。

Ayb_ice 发表于 2025-5-30 15:37:55

试试这样
        if(RI2)
        {
                u8 ucTmp = S2BUF;
                CLR_RI2();

               
      if(COM2.RX_Cnt >= COM_RX2_Lenth)        COM2.RX_Cnt = 0;
      RX2_Buffer = ucTmp;
      COM2.RX_TimeOut = TimeOutSet2;
        }

ZARD渐空 发表于 2025-5-30 15:41:49

Ayb_ice 发表于 2025-5-30 15:37
试试这样
        if(RI2)
        {


<p>串口接收中断这里有接收和发送处理了</p>
<p><img src="data/attachment/forum/202505/30/154134xasyeywa222ro7wa.png" alt="image.png" title="image.png" /></p>

Ayb_ice 发表于 2025-5-30 15:43:08

波特率降低点试试

ZARD渐空 发表于 2025-5-30 15:47:47

Ayb_ice 发表于 2025-5-30 15:43
波特率降低点试试

<p>这个可以,波特率降到9600后,就不会丢数据了</p>
<p><img src="data/attachment/forum/202505/30/154724lv00k326zvvqpapx.png" alt="image.png" title="image.png" /></p>
<p>但这是为什么呢<img alt="penxue" class="emoji" src="https://www.stcaimcu.com/static/image/smiley/default/penxue.gif" title="penxue" /></p>

ZARD渐空 发表于 2025-5-30 15:58:21

ZARD渐空 发表于 2025-5-30 15:47
这个可以,波特率降到9600后,就不会丢数据了

但这是为什么呢

页: [1] 2
查看完整版本: 求大佬指点,用RTX51 Tiny时,串口2发送没问题,但串口2接收时会丢数据