lixianda0527 发表于 2025-7-7 14:46:39

乘风飞扬 发表于 2025-7-7 14:08
"先用例子测试,功能验证正常后再进行修改或者移植",这是最佳的捷径。
之所以这么建议,是因为从你9楼提 ...
试过了,只是代码没有贴出来,现在不是超时问题,问题是超时完了需要处理,处理无效的问题,不讲超时了,直接让处理代码运行都无效,这和超时不超时没什么关系,代码原封不对都存在这样的问题,官方的那个9.6的试验箱里的DMA代码也试了,一样的问题,要不然也不会问了

乘风飞扬 发表于 2025-7-7 16:07:36

看看例子运行效果确认行不行

C_wolf 发表于 2025-7-7 16:25:25

lixianda0527 发表于 2025-7-7 14:46
试过了,只是代码没有贴出来,现在不是超时问题,问题是超时完了需要处理,处理无效的问题,不讲超时了, ...

按照22楼的视频 看来,
应该是在接收超时后再判断数据正确性,
你是不是收了就发啊,感觉还是程序逻辑上问题

lixianda0527 发表于 2025-7-8 09:40:05

C_wolf 发表于 2025-7-7 16:25
按照22楼的视频 看来,
应该是在接收超时后再判断数据正确性,
你是不是收了就发啊,感觉还是程序逻辑上 ...

不是,用的芯片不一样,我用的是STC8H4K64TL,直接用那个9.6的程序只有串口3能用(串口2没接,接了串口134),我是按照思路配置了一下串口3不行,然后用的STC8A8K64D4的例程(串口134都能用),然后把9.6代码串口1的搬过来,复位不了,然后我又看手册自己配置也复位不了

ssfnpl 发表于 2025-7-30 19:20:51

串口DMA接收, 我也遇到了 只要发错一次数据个数,后面就没得玩了,一直是错位的!

ssfnpl 发表于 2025-7-30 21:18:29

搞了两天 ,今晚看了一下手册,试了一下这样可以重启了!
void UART2_DMA_dodo(void)
{
                DMA_UR2R_CR &= ~(1 <<7);

                memset(pu8UR2DMARxBuffer, 0, 16);
            //重新使能DMA并触发接收(从起始位置开始)
                DMA_UR2R_CR |= (1 <<7);// 置位B7(ENUR2R=1,重新使能DMA)
            DMA_UR2R_CR |= (1 <<5);// 置位B5(TRIG=1,触发新一轮接收)
      //DMA_UR2R_CR |= 0x01;
}
   试了一下,
重启真的可以了{:4_187:}
页: 1 2 [3]
查看完整版本: 请问DMA串口传输了不正确的长度,然后如何复位从头接收?