初级会员

- 积分
- 56
- 金钱
- 56
- 注册时间
- 2011-9-21
- 在线时间
- 0 小时
|
学习STM32不久,最近使用STM32调试GSM模块,同时开启DMA发送和DMA接收,使用Normal模式,而不是circule循环模式,即每次发送时开启一次,DMA发送很好实现。DMA接收没有开启接收中断,而是采用网上的建议采用空闲中断USART_IT_IDLE,经测试,每次有数据帧全部接收到之后,进入中断。空闲中断通过读SR、DR可以清除中断标志,避免重复进中断。在接收到数据帧之后做相应处理,可以获得帧的长度(在DMA_CNDTRx寄存器中设置所需的传输字节数。在每个RxNE事件后,此值将被递减 )每次清空接收Buffer,然后重新开启接收中断。经测试没什么问题,很高兴使用DMA解决了接收帧的问题,不用使用接收中断一个一个字符的接收,也提高了效率。不过疑问是:空闲中断是从忙到不忙的时候产生中断吗?为什么DMA发送数据时没有进入空闲中断呢?这样做还有其他什么问题?如果不这么用如何接收一帧数据呢?以前实现过,是用这个方法 http://blog.csdn.net/sygdp21/article/details/5694967 不知还有什么方法吗?求教 |
|
|