打印
[STM32F1]

采用idle+dma实现串口通讯的朋友,请测试一下1个字符可以吗

[复制链接]
1401|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
EAMCU|  楼主 | 2014-8-11 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用idle+dma来接收串口数据,一直运作的挺好,从未出问题

但是今天手贱,只发送1个字符给stm32,发现进入不了idle中断了。。。
再发一个字符,又可以进入idle中断。。。
就这样循环。

想来想去也没找到原因,初步猜测是IDLE标志的产生于RXNE的关系

请问现在使用idle+dma方式朋友,能否告诉我:你们的程序,能接收单个字符吗

沙发
Leeone| | 2014-8-11 14:56 | 只看该作者
单字符连续做了10+次都能正常进入IDLE中断,IDLE是RXEN置位判断到总线空闲才置位

使用特权

评论回复
板凳
EAMCU|  楼主 | 2014-8-11 15:04 | 只看该作者
Leeone 发表于 2014-8-11 14:56
单字符连续做了10+次都能正常进入IDLE中断,IDLE是RXEN置位判断到总线空闲才置位 ...

我的程序是这样的
最开始只Enable RXNE中断,在进入RXNE中断程序后,Disable RXNE中断,Enable IDLE中断,然后启动dma。
请问你的程序RXNE中断的处理和我的有什么不同吗?谢谢!

使用特权

评论回复
地板
EAMCU|  楼主 | 2014-8-11 15:25 | 只看该作者
Leeone 发表于 2014-8-11 14:56
单字符连续做了10+次都能正常进入IDLE中断,IDLE是RXEN置位判断到总线空闲才置位 ...

IDLE是RXEN置位判断到总线空闲才置位
这句话的意思是如下所说吗?
1. 在开启IDLE中断后,串口必须检测到1个RXNE置位(从0到1)的信息,同时还需要再检测到1个总线空闲的信息,才会发出中断;
2. 如果在RXNE已经等于1的时候,开启IDLE中断,则可能导致紧接着的本次总线空闲无法触发中断

使用特权

评论回复
5
Leeone| | 2014-8-11 15:47 | 只看该作者
本帖最后由 Leeone 于 2014-8-11 15:49 编辑
EAMCU 发表于 2014-8-11 15:04
我的程序是这样的
最开始只Enable RXNE中断,在进入RXNE中断程序后,Disable RXNE中断,Enable IDLE中断 ...

IDLE中断我是一直Enable不用关,在中断里清楚IDLE标记就行。
DMA是在RXNE中断里初始化并使能,然后在IDLE中断里就关了DMA了

使用特权

评论回复
6
EAMCU|  楼主 | 2014-8-11 16:13 | 只看该作者
Leeone 发表于 2014-8-11 15:47
IDLE中断我是一直Enable不用关,在中断里清楚IDLE标记就行。
DMA是在RXNE中断里初始化并使能,然后在IDLE ...

我把IDLE中断改成一直不关,也可以了。谢谢!
看来下面这个推论2很可能是正确的.
1. 在开启IDLE中断后,串口必须检测到1个RXNE置位(从0到1)的信息,同时还需要再检测到1个总线空闲的信息,才会发出中断;
2. 如果在RXNE已经等于1的时候,开启IDLE中断,则可能导致紧接着的本次总线空闲无法触发中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

396

帖子

2

粉丝