求助帖:STC32G 串口2DMA的发送问题 | 已正常
<p>参考官网STC32G-DEMO-CODE-V9.6\63-DMA-UART串口与存储器数据自动收发\串口2使用DMA中断模式与电脑收发测试的例程做了相关测试</p><p>单片机型号:STC32G12K128</p>
<p>软件协议:V4.0:7.4.6U</p>
<p>串口2全双工中断方式收发通讯程序,通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间,当DMA空间存满设置大小的内容后,通过串口2的DMA自动发送功能把存储空间的数据原样返回.</p>
<p>此功能实现测试正常,测试图片如下:</p>
<p><img src="data/attachment/forum/202605/09/115841vb9ijw60jj06wjw8.png" alt="111.png" title="111.png" /></p>
<p><img src="data/attachment/forum/202605/09/115853ztp54pzz5z558507.png" alt="222.png" title="222.png" /></p>
<p>进一步修改程序,串口2DMA不是原样输出到PC,而是输出不同长度不同内容到PC。当PC向MCU发送数据, MCU将收到的数据自动存入DMA空间地址A,当DMA空间存满设置大小的内容后,通过串口2的DMA自动发送功能把另一DMA空间地址B的数据返回,这个测试就出错了,我发送的内容是A0 A1 A2 A3 A4,希望返回给PC的内容是00 01 02 03 04 05,但未能如愿,代码及测试结果如图所示:</p>
<p><img src="data/attachment/forum/202605/09/120425mvsxhhxfjftslfqt.png" alt="333.png" title="333.png" /></p>
<p><img src="data/attachment/forum/202605/09/120431k5g5pkzgkw5g3ogp.png" alt="444.png" title="444.png" /></p>
<p>请教各位大侠,我的代码实现问题出现在哪儿,我应该怎么修改才能实现PC给串口2DMA发送一个内容,串口2DMA回复不同长度不同内容给PC?</p>
<p>代码见附件:<a href="forum.php?mod=attachment&aid=137241" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:串口2使用DMA中断模式与电脑收发测试.7z</a></p>
参考帖子:
https://www.stcaimcu.com/forum.p ... ptid=4675&pid=31660
关于DMA_UR2R_AMT 寄存器用法
AI-32位8051 发表于 2026-5-9 14:08
参考帖子:
https://www.stcaimcu.com/forum.p ... ptid=4675&pid=31660
您好,这个帖子的链接打不开呢。现在串口2接收DMA没问题,发送DMA指向不同于DMA_UR2R_RXA的其他地址没调通呢,传输字节数也是对的,只是传输的内容不对。
要用xdata
ercircle 发表于 2026-5-9 14:23
要用xdata
好的 谢谢。我昨晚改程序的时候不小心删掉了,数组用xdata声明时,还修改了CKCON=1;
刚刚恢复了xdata声明,结果正常了,再次感谢!
PS:强调一下,DMA_UR2R_RXA和DMA_UR2T_TXA指向的数组都必须是xdata声明,void UART2_DMA_Interrupt(void) interrupt 13 也要做好响应的处理,添加isr.asm文件,有一个没设置好,都会出现传输错误。
页:
[1]