STC32G 的 USART2 或 SPI 的 DMA 发送完最后一个字节的中断请教
STC32G 的 USART2 或 SPI 的 DMA 发送完最后一个字节的中断请教:假设我有个数组,需要使用 USART2 的同步模式,使用 DMA 来搬运发送;
在发送前,关闭 USART2 发送完成中断功能、 使能 DMA 发送完成中断功能;
然后启动 DMA 开始搬运发送。
请问:
一:USART2 每发送完成一个字节,会不会置位 S2TI ?
二:如果 USART2 每发送完成一个字节都会置位 S2TI,那么,DMA 会不会每搬运一个字节,都会去把这个 S2TI 清零?
三:当 DMA 搬运完最后一个字节时,是立刻的产生中断? 还是要等 USART2 发送完成最后一个字节之后,DMA 才会产生中断?
我主要是驱动 TFT 彩屏,想在 DMA 搬运完成最后一个字节后的中断里面,去使能 USART2 发送完成中断。
然后,主程序等待 USART2 出现发送完成中断;
然后,在 USART2 的发送完成的中断里面,去关闭 TFT 彩屏的 CS 控制脚。
如图,我仿真发现,当 DMA 出现中断时,我用变量立刻的读取状态寄存器,同时立刻的清零 S2TI 标记位;发现test变量读出来的 S2TI 已经被置位(在第6行打断点观察),
然后延时等待,预期等待最后一个字节发送完成后再次的出现S2TI 被置位,
然后再读取状态寄存器,发现 S2TI 没有再出现置位(在第12行打断点观察)。
这样,我后面的工作就不太好处理。
因为我想接着立刻的去发送下一帧数据,或者去关闭 TFT 彩屏的 CS 控制脚。
另外一个问题:我本想把USART的同步模式的时钟降低一点,来验证上面的问题,结果发现有问题,如图,代码已经简单化,代码的34行,赋值0x03,程序正常,赋值0x00有时正常,赋值0x01和0x02就会卡死,卡死在14行,请教一下大家,这个是哪里出现了问题?
补充一下,芯片是 STC32G8K48 TSSOP20
使用DMA了无需关注字节级中断标识,在DMA中断触发后继续操作就行。
panxiaoyi 发表于 2026-2-28 19:28
另外一个问题:我本想把USART的同步模式的时钟降低一点,来验证上面的问题,结果发现有问题,如图,代码已 ...
这个可以复现,感觉是个BUG
ercircle 发表于 2026-3-1 17:52
使用DMA了无需关注字节级中断标识,在DMA中断触发后继续操作就行。
我就担心:在DMA搬运完成中断里面,立刻的去关闭TFT显示屏的CS使能脚,TFT显示屏会不会没有接收到最后一个字节?所以,我就把速度设置低一点来测试,可是又出现了第二个问题 panxiaoyi 发表于 2026-3-2 08:22
我就担心:在DMA搬运完成中断里面,立刻的去关闭TFT显示屏的CS使能脚,TFT显示屏会不会没有接收到最后一 ...
第一个问题只接示波器抓CS和MOSI引脚信号即可
1.每次发送都会置位,但是如果没打开串口中断使能则不会进中断
2.自己不会清除,需要用户软件清零
3.等dma发送完成后才会产生dma中断 王昱顺 发表于 2026-3-2 09:35
1.每次发送都会置位,但是如果没打开串口中断使能则不会进中断
2.自己不会清除,需要用户软件清零
3.等dma ...
我是想知道,DMA刚刚进入中断时,USART2有没有发送完最后的那个字节?
按照版主的指引,稍后我也会用示波器看看的
另外,请帮我看看 3 楼的问题,感谢
页:
[1]
2