[STM32L0] 都来说说stm32串口空闲中断

[复制链接]
27094|26
 楼主| luofeng2g 发表于 2014-5-8 16:38 | 显示全部楼层 |阅读模式
最近做一个项目,想用串口空闲中断,最后发现根本进不去!甚是迷惑:
1.串口空闲中断,所说“空闲”指的是什么? 空闲帧?还是什么?
2.一般空闲中断是用在接收中。是否可用在发送完后,通过空闲中断进接收呢?
大伙都来说说!求各位大牛指教
lanmp 发表于 2014-5-8 17:17 | 显示全部楼层
没用过STM32,不过一般这种都是缓冲区发完提示可以继续发的意思吧
 楼主| luofeng2g 发表于 2014-5-9 08:15 | 显示全部楼层
lanmp 发表于 2014-5-8 17:17
没用过STM32,不过一般这种都是缓冲区发完提示可以继续发的意思吧

你说的这个不是发送完成中断?
witant 发表于 2014-5-9 14:27 | 显示全部楼层
IDLE line detection中断和你说的发送完成之后的产生的中断
stm32f1xx单片机的数据手册中说USART有9种中断事件,咱们常用的有两个:
1.TXE(Transmit data register empty),单字节数据发完了
2.RXNE(Received data ready to be read),接收缓存区有数据
IDLE中断没用过,不过大概是串口连接成总线形式时候用的一种中断(猜测),并不是没接收到数据产生的中断。
手册中提到了在Mute mode下当检测到Idle frame会被唤醒(It wakes up when an Idle frame is detected)
所以Idle应该指楼主所说的“空闲帧”
不太理解“发送完后,通过空闲中断进接收”的意思,接收到数据时用接收中断(RXNE)就可以。

 楼主| luofeng2g 发表于 2014-5-9 16:08 | 显示全部楼层
witant 发表于 2014-5-9 14:27
IDLE line detection中断和你说的发送完成之后的产生的中断
stm32f1xx单片机的数据手册中说USART有9种中断 ...

因为用的是485通信,主机发送一帧之后,从机应答。所以,就是上面所说的,发送完后,在空闲中断中进入接受(主机)。
witant 发表于 2014-5-9 16:59 | 显示全部楼层
luofeng2g 发表于 2014-5-9 16:08
因为用的是485通信,主机发送一帧之后,从机应答。所以,就是上面所说的,发送完后,在空闲中断中进入接 ...

一帧数据发送完成后判断TXE标志就可以,发送寄存器为空就说名最后一个字节发送完成了。
这时切换485方向控制引脚就可以,没必要使用中断。
 楼主| luofeng2g 发表于 2014-5-10 08:23 | 显示全部楼层
witant 发表于 2014-5-9 16:59
一帧数据发送完成后判断TXE标志就可以,发送寄存器为空就说名最后一个字节发送完成了。
这时切换485方向 ...

嗯,目前是这么做的!只是现在想弄懂空闲中断到底该怎么用?。。。该怎么进入?
john_lee 发表于 2014-5-10 10:20 来自手机 | 显示全部楼层
空闲中断与“发送”无关。
限量_个性。 发表于 2014-5-10 10:44 | 显示全部楼层
总线空闲中断是在检测到在接收数据后,数据总线上一个字节的时间内,没有再接到数据后发生。也就是RXNE位被置位之后,才开始检测,只被置位一次,除非再次检测到RXNE位被置位,然后才开始检测下一次的总线空闲。
限量_个性。 发表于 2014-5-10 10:45 | 显示全部楼层
完美的处理方式应该是总线空闲+DMA接收数据
 楼主| luofeng2g 发表于 2014-5-10 12:42 | 显示全部楼层
限量_个性。 发表于 2014-5-10 10:45
完美的处理方式应该是总线空闲+DMA接收数据

谢谢版主,也谢谢楼上各位的回复。原来是这个样子的!那版主有没有这方面的例子啊,参考参考
john_lee 发表于 2014-5-10 20:41 | 显示全部楼层
问度娘,会让你满意的。
hwl1023 发表于 2014-5-19 23:12 来自手机 | 显示全部楼层
串口的发送总线空闲+DMA的确很好用。
okhuojia 发表于 2014-5-20 10:41 | 显示全部楼层
空闲很有用吗?
hnjylijunz 发表于 2015-8-10 15:19 | 显示全部楼层
空闲帧.bmp
我的理解不是知道师傅正确高手指点一二?

huangqi412 发表于 2015-8-12 21:30 来自手机 | 显示全部楼层
接收停顿超过一字节时间  认为桢收完
我是土匪 发表于 2015-9-28 17:08 | 显示全部楼层
huangqi412 发表于 2015-8-12 21:30
接收停顿超过一字节时间  认为桢收完

这样接收不定长的串口数据,还是很方便的。
springvirus 发表于 2015-12-15 14:59 | 显示全部楼层
现在已进入串口1空闲中断,查DMA1->ISR的值为0x00 07 50 00,通道5的传输完成也置位,但是DMA指定的buffer里没有值啊,另外是否进入空闲中断,就认为DMA接收到数了?
Harvard 发表于 2016-4-18 10:43 | 显示全部楼层
mark一下 ARM单片机和8位MCU的区别一下子就出来了
liyang477 发表于 2016-7-11 10:56 | 显示全部楼层
springvirus 发表于 2015-12-15 14:59
现在已进入串口1空闲中断,查DMA1->ISR的值为0x00 07 50 00,通道5的传输完成也置位,但是DMA指定的buffer ...

怎样就进入空闲中断了,我这里还迷茫着呢,帮助解释一下,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

824

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部