打印

STM32F103串口dma发送与中断接收能同时进行么?

[复制链接]
7263|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ssgg2003|  楼主 | 2010-3-15 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在本人的设计中,STM32的USART(波特率115200)需每秒发送4000+字节到上位机。开启了STM32串口dma发送方式(normal mode,非循环方式),上位机接收显示正常。同时开启该串口的接收中断,发现STM32无法响应从上位机发回的信息(无法进入中断处理函数)。怀疑因为USART的发送与接收数据寄存器之地址相同,所以CPU无法在dma处理发送的过程中访问接收数据寄存器进而无法处理接收中断。尝试开启dma发送完成中断,并在此中断中关闭dma通道,清除dma中断标志(个人认为释放了关联上的USART, 之前没有开启发送中断,应该不必清除USART发送完成标志吧?),再计算带宽,理想情况下,一秒钟内,115200波特率传4000+字节能在400ms左右完成吧,假设剩下600ms的时间USART没有被dma通道使用,系统应该能够响应上位机在此期间发来的数据吧,但实际结果却非如此,CPU仍然无法进入USART中断,有些迷糊了。按说异步全双工串口应当能够收发同时进行哈,或者dma发送和中断式接收互斥?如前所述的类似半双工处理也不奏效……望各位多多指教!Thx!
沙发
香水城| | 2010-3-16 19:06 | 只看该作者
你的怀疑没有根据。请先单独把接收调通,再合并。

使用特权

评论回复
板凳
xsgy123| | 2010-3-16 19:47 | 只看该作者
赞同LS,先单独调试看看,逐步排查问题

使用特权

评论回复
地板
ssgg2003|  楼主 | 2010-3-17 01:59 | 只看该作者
多谢香主的回复!不开启dma发送,单独使用中断式串口接收之前已经调通。 上位机可以通过该串口发送命令控制stm32点亮led,还能通过命令让stm32开启dma通道进而使用这个串口上传大批量采集数据。问题是一旦有过dma控制的数据上传后,stm32便无法再响应上位机的串口命令了。比如上位机想让stm32停止上传,发送控制命令后stm32却没有再进入接收中断。即便在dma传输结束中断中关闭这个dma通道,系统也不再响应上位机。开始以为是带宽不够,算了一下发现应该是够的,所以才有了疑问。望多指教!Thx!

使用特权

评论回复
5
ST_ARM| | 2010-3-17 11:32 | 只看该作者
程序合并以后,单次使用DMA传输4000个字节后,DMA自动停止(DMA的工作方式不要使用循环模式),此时上位机发送数据时,检测STM32能否接收到数据(使用轮询模式),如果通过再测试中断模式。
如果上面的通过测试,进行第二步测试:仍然使用DMA单次测试,在DMA中断中再次开启DMA,进行循环操作,此时使用上位机发送数据,测试STM32是否进入中断。

使用特权

评论回复
6
歪 歪| | 2010-3-17 23:53 | 只看该作者
用调试工具配合测试一下,看看到底发生了什么问题,有时你用终端看到的数据有误导,有些控制字符不显示的。

下载地址:
http://download.cnet.com/ComTrac ... 6892.html?tag=mncol

感觉好别忘了给个review(评论),谢谢!

使用特权

评论回复
7
ssgg2003|  楼主 | 2010-3-18 23:44 | 只看该作者
多谢各位了!最近有其他任务在忙,暂时把这个调试放了一下。有新的进展再发在版上,谢谢!

使用特权

评论回复
8
ssgg2003|  楼主 | 2010-3-24 10:14 | 只看该作者
初步判断问题出在中断优先级上。我用的是比较老的固件库(Keil-MDK3.8),使用了默认NVIC设置。查了文档,发现默认状态下,CortexM3核没有使能抢占式中断嵌套,所有外设中断的优先级都是相同的。在这种情况下,哪个中断源先到,CPU先处理之。如果有并发中断产生,哪个中断源的向量地址低,系统就先处理它。(此处还有个疑问,那是不是说那个向量地址高的中断就被忽略了呢?因为系统并没有开启中断嵌套的说。)查了中断向量地址,发现USART的中断地址果然比较靠后,不但在DMA1通道的所有中断地址之后,也在外部中断EXTI之后。具体到本人的设计中,因为有一个800Hz的外部中断不停的触发,导致绝大多数情况下系统无法响应向量地址更靠后的USART中断。(惭愧,之前一直用TI的DSP,对中断嵌套的关注很少。比较一下发现CM3的中断机制明显更有特色!)如有错误,请一定指正!多谢各位了!

使用特权

评论回复
9
pluto55| | 2011-3-29 14:00 | 只看该作者
学习

使用特权

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

本版积分规则

0

主题

21

帖子

1

粉丝