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:}