找回密码
 立即注册
查看: 90|回复: 24

STC32G 的 USART2 或 SPI 的 DMA 发送完最后一个字节的中断请教

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-03-03 11:10:19
已绑定手机

2

主题

16

回帖

60

积分

注册会员

积分
60
发表于 7 天前 | 显示全部楼层 |阅读模式
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 控制脚。

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-03-03 11:10:19
已绑定手机

2

主题

16

回帖

60

积分

注册会员

积分
60
发表于 7 天前 | 显示全部楼层
如图,我仿真发现,当 DMA 出现中断时,我用变量立刻的读取状态寄存器,同时立刻的清零 S2TI 标记位;发现test变量读出来的 S2TI 已经被置位(在第6行打断点观察),
然后延时等待,预期等待最后一个字节发送完成后再次的出现S2TI 被置位,
然后再读取状态寄存器,发现 S2TI 没有再出现置位(在第12行打断点观察)。

这样,我后面的工作就不太好处理。
因为我想接着立刻的去发送下一帧数据,或者去关闭 TFT 彩屏的 CS 控制脚。
ScreenShot_2026-02-28_181341_325.png
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-03-03 11:10:19
已绑定手机

2

主题

16

回帖

60

积分

注册会员

积分
60
发表于 7 天前 | 显示全部楼层
另外一个问题:我本想把USART的同步模式的时钟降低一点,来验证上面的问题,结果发现有问题,如图,代码已经简单化,代码的34行,赋值0x03,程序正常,赋值0x00有时正常,赋值0x01和0x02就会卡死,卡死在14行,请教一下大家,这个是哪里出现了问题?


ScreenShot_2026-03-01_103450_086.png
ScreenShot_2026-03-01_104420_393.png

DJ_STC32G错误测试.rar

570.39 KB, 下载次数: 3

点评

可以尝试while判断前先清空一次标志位  详情 回复 发表于 5 天前
这个可以复现,感觉是个BUG  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-03-03 11:10:19
已绑定手机

2

主题

16

回帖

60

积分

注册会员

积分
60
发表于 6 天前 | 显示全部楼层
补充一下,芯片是 STC32G8K48 TSSOP20
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-03-07 15:12:16
已绑定手机

102

主题

4134

回帖

9097

积分

荣誉版主

无情的代码机器

积分
9097
发表于 6 天前 | 显示全部楼层

使用DMA了无需关注字节级中断标识,在DMA中断触发后继续操作就行。
截图202603011750316621.jpg

截图202603011750406494.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-03-07 15:12:16
已绑定手机

102

主题

4134

回帖

9097

积分

荣誉版主

无情的代码机器

积分
9097
发表于 6 天前 | 显示全部楼层
panxi*** 发表于 2026-2-28 19:28
另外一个问题:我本想把USART的同步模式的时钟降低一点,来验证上面的问题,结果发现有问题,如图,代码已 ...

这个可以复现,感觉是个BUG
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-03-03 11:10:19
已绑定手机

2

主题

16

回帖

60

积分

注册会员

积分
60
发表于 5 天前 | 显示全部楼层
erci*** 发表于 2026-3-1 17:52
使用DMA了无需关注字节级中断标识,在DMA中断触发后继续操作就行。

我就担心:在DMA搬运完成中断里面,立刻的去关闭TFT显示屏的CS使能脚,TFT显示屏会不会没有接收到最后一个字节?所以,我就把速度设置低一点来测试,可是又出现了第二个问题

点评

第一个问题只接示波器抓CS和MOSI引脚信号即可  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2026-03-07 15:12:16
已绑定手机

102

主题

4134

回帖

9097

积分

荣誉版主

无情的代码机器

积分
9097
发表于 5 天前 | 显示全部楼层
panxi*** 发表于 2026-3-2 08:22
我就担心:在DMA搬运完成中断里面,立刻的去关闭TFT显示屏的CS使能脚,TFT显示屏会不会没有接收到最后一 ...

第一个问题只接示波器抓CS和MOSI引脚信号即可
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:687
  • 最近打卡:2026-03-05 13:33:59
已绑定手机
已实名认证

129

主题

3375

回帖

8784

积分

版主

积分
8784
发表于 5 天前 | 显示全部楼层
1.每次发送都会置位,但是如果没打开串口中断使能则不会进中断
2.自己不会清除,需要用户软件清零
3.等dma发送完成后才会产生dma中断
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-03-03 11:10:19
已绑定手机

2

主题

16

回帖

60

积分

注册会员

积分
60
发表于 5 天前 | 显示全部楼层
王*** 发表于 2026-3-2 09:35
1.每次发送都会置位,但是如果没打开串口中断使能则不会进中断
2.自己不会清除,需要用户软件清零
3.等dma ...

我是想知道,DMA刚刚进入中断时,USART2有没有发送完最后的那个字节?
按照版主的指引,稍后我也会用示波器看看的

另外,请帮我看看 3 楼的问题,感谢

点评

DMA和串口是两个不同的模块,DMA只管把数据搬运到S2BUF的这个过程,类似代替你操作搬运数据 简单的做法是通过一个全局标志位,DMA完成的时候置1,让串口的中断一直打开,在串口中断中发现这个标志位置1的时候,再操  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 15:31 , Processed in 0.122506 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表