打印

STM32F107用USART2以DMA方式接收,DMA无法工作

[复制链接]
7006|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eina_yang|  楼主 | 2011-8-24 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问个问题。我用纯汇编编制STM32F107应用程序,发现USART的DMA不工作。如果开启'存储器到存储器'方式,即可将串口接收的数据写入内存,但若选通USART的接收通道就不行。可以在仿真器中看到串口发来的数都在USART2_DR中了,但DMA就是不取走该数。检查了很多遍,USART和DMA相关寄存器的值都没问题(与例程序进行了仔细对比),请问还有什么设置与此相关吗?
沙发
香水城| | 2011-8-24 11:15 | 只看该作者
你先用库函数实现,保证流程没有错。

使用特权

评论回复
板凳
eina_yang|  楼主 | 2011-8-24 11:16 | 只看该作者
补充:串口以独立方式工作测试没问题,程序在FLASH中运行,波特率115200,串口工作方式8,1,1;普通异步方式。用的是USART2,管脚经过了重映射。

使用特权

评论回复
地板
eina_yang|  楼主 | 2011-8-24 11:18 | 只看该作者
流程也严格对照过了,对照3天了,所有寄存器的设置值和设置次序。没错。

使用特权

评论回复
5
eina_yang|  楼主 | 2011-8-24 11:19 | 只看该作者
因我的应用实时性要求很高,所以无法用C,自建了汇编的头文件,汇编编程给各寄存器赋值操作。所以流程很清晰。

使用特权

评论回复
6
eina_yang|  楼主 | 2011-8-24 11:21 | 只看该作者
类似的SPI用DMA我已顺利调试成功,且DMA用于“存储器到存储器”工作无误,USART2独立工作也无误,DMA通道选择也无误,实在是迷惑啊

使用特权

评论回复
7
香水城| | 2011-8-24 11:29 | 只看该作者
请检查通道对应是否正确、触发条件是否正确等。

使用特权

评论回复
8
eina_yang|  楼主 | 2011-8-24 12:21 | 只看该作者
请问触发条件指哪些?

使用特权

评论回复
9
eina_yang|  楼主 | 2011-8-24 12:45 | 只看该作者
我是这样做的,先配置好串口,暂不使能DMA,然后配置好DMA通道参数,然后使能串口的DMA方式(USART2_CR3.6),最后使能DMA通道(DMA1_CCR6.0)。我用的是USART2的接收,对应的通道为DMA1的通道6。香楼主帮看有什么问题没有。 观察效果跟DMA1_CCR6没有使能似的,由于串口不断接收到数据,却没被取走,会看到USART2_SR寄存器的值0XC0和0XF8(有时0XF0)之间跳跃。USART2_DR的值也随输入数据的改变而随动。也就是说串口工作正常。为什么DMA不动呢?还有什么因素有影响呢?

使用特权

评论回复
10
eina_yang|  楼主 | 2011-8-24 12:48 | 只看该作者
楼主救命啊,开发周期紧迫,这个东东卡我好几天了,快崩溃了。

使用特权

评论回复
11
mohanwei| | 2011-8-24 13:26 | 只看该作者
纯汇编开发ARM……很好很强大……:lol

使用特权

评论回复
12
eina_yang|  楼主 | 2011-8-24 13:42 | 只看该作者
没人救我吗?55555。就剩这个倒霉的DMA了,其它都调通了。我不知怎么发送文件,香楼主能否指点,我可把源码发给你看看。

使用特权

评论回复
13
小鱼yu| | 2011-8-24 13:54 | 只看该作者
看看~学习了~~

使用特权

评论回复
14
eina_yang|  楼主 | 2011-8-24 16:33 | 只看该作者
还是不行,DMA发送也不行,调到USART1也不行,难道这个DMA跟我有仇
:'(

使用特权

评论回复
15
eina_yang|  楼主 | 2011-8-24 17:38 | 只看该作者
终于搞定了,一直认为是自己的使用有问题,最后找朋友帮着查,终于发现是USART1_CR3的地址定义错了,应该是0XXX04,写成0XXX02了,导致这个重要的使能位始终没赋值。而几个USART的寄存器地址列表是拷贝出来的,只是更改了BASE地址,所以,换来换去,换到哪个USART都不能启动DMA,而SPI却一搞就好了。看来又是低级错误惹得或啊!谢谢版主关注。对纯汇编的STM32用应用要求的朋友,可以找我。谢谢!

使用特权

评论回复
16
香水城| | 2011-8-24 17:49 | 只看该作者
终于搞定了,一直认为是自己的使用有问题,最后找朋友帮着查,终于发现是USART1_CR3的地址定义错了,应该是0XXX04,写成0XXX02了,导致这个重要的使能位始终没赋值。而几个USART的寄存器地址列表是拷贝出来的,只是更 ...
eina_yang 发表于 2011-8-24 17:38


功夫不负有心人,恭喜恭喜!

使用特权

评论回复
17
yinyangdianzi| | 2011-8-25 14:04 | 只看该作者
LZ,不用感谢我了。。。。我只是说了句,以马内利

使用特权

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

本版积分规则

1

主题

11

帖子

0

粉丝