串口的空闲中断不触发

如图,向串口发送数据时,能够触发接收中断,但无法触发空闲中断,在串口配置中已经把接收、空闲中断打开了

image.png

芯片是CH32V103C8T6


您好,以下几个点需要注意一下:

1、中断函数注意要加中断声明;

2、串口初始化中要注意使能开启空闲中断;

3、关于空闲中断标志位的清楚,先读状态寄存器再读数据寄存器清楚该位,如下图

附件为V103串口空闲中断例程,可以参考一下。后续若有问题,可邮箱(lzs@wch.cn)沟通

icon_rar.gifCH32V103 串口1空闲中断-DMA.zip

image.png


印象中,状态寄存器也要一并清除的。

还有就是这单片机抗干扰是很弱的,是不是干扰太大了?是不是144MHz最高主频运行了?

曾经仿真时电脑主机漏电导致串口一大堆乱七八糟数据,曾经手碰到开发板的GND都能触发串口中断...

所以现在全部都弄到DMA收发,查询串口空闲状态IDLE认为接收完成、查询串口发送完成标识TC认为发送完成,不弄那么多中断浪费没必要的CPU。


空闲中断是打开的,但是进不来,还没有走到清除中断标志位那一步image.png


您好,若方便可将工程发至我的邮箱(lzs@wch.cn),这边具体看一下


您好,工程文件已发送至您的QQ邮箱,请注意查收,麻烦您了


您好,工程中中断函数注意加中断声明,参考下图。我看你工程中中断函数都没有加中断声明。此外工程中打印串口使用的是串口1,你可以改为使用串口3,不然两个串口1冲突了。

image.png


问题已解决,非常感谢!在函数声明后加入楼上圈出的内容即可正常执行中断函数


只有登录才能回复,可以选择微信账号登录