打印

stm32f303 DMA1-DMA2优先级问题和ADC用DMA传送数据overrun问题求助

[复制链接]
7560|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 王小毛wxm 于 2013-4-28 15:33 编辑

我在使用F303VCT6的芯片做个东西,遇到些问题,求助呀:)

1、关于F3中DMA1和DMA2优先级问题:
原来使用F1系列时候,参考手册13.3.2一节描述中DMA的Arbiter有Note:In high-density, XL-density and connectivity line devices, the DMA1 controller has priority over the DMA2 controller. 那是不是大容量产品中说DMA2通道1设置为VeryHigh优先级也没有DMA1通道7设置为Low的优先级高呢? 那小容量产品中DMA1和DMA2间优先级怎么确定的呢?  在F303VCT6(256K flash)手册中DMA相应一节的描述中没有提到这个Note。那F3的DMA1和DMA2之间的优先级怎么比较的呢?

2、
使用F3的ADC,用DMA传送数据,根据手册上说的如果DMA没有及时读取ADC->DR,会发生OVERRUN,置位OVERFLAG,如果不用软件清除该标志,则ADC不会再产生DMA请求,那就是不能再传送数据了。我现在出现了个问题:发生了OVERRUN事件,但我没有清除OVERFLAG,DMA仍然传送数据到内存,当然这个时候传送的数据是错位的。

谢谢了!


沙发
王小毛wxm|  楼主 | 2013-4-28 19:34 | 只看该作者
沉了要.....

使用特权

评论回复
板凳
lianxi47| | 2013-4-30 17:39 | 只看该作者
准备用STM32F303,楼主问题解决了吗,帮你顶起!

使用特权

评论回复
地板
王小毛wxm|  楼主 | 2013-4-30 19:54 | 只看该作者
lianxi47 发表于 2013-4-30 17:39
准备用STM32F303,楼主问题解决了吗,帮你顶起!

没呢

使用特权

评论回复
5
qiaoyang123| | 2013-6-23 09:04 | 只看该作者
楼主 adc dma 传输的问题你解决了么?  如何软件清除?  我也遇到了类似的问题

使用特权

评论回复
6
王小毛wxm|  楼主 | 2013-6-23 17:47 | 只看该作者
qiaoyang123 发表于 2013-6-23 09:04
楼主 adc dma 传输的问题你解决了么?  如何软件清除?  我也遇到了类似的问题 ...

我的疑问没有解决。
至于清除overrun bit位,手册上有说明,在adc_isr寄存器中,有

固件库里有函数:


使用特权

评论回复
7
香水城| | 2013-6-24 15:22 | 只看该作者
第一,F3的DMA模块和F1应该一样的(不像F2的DMA那么复杂:)),在相同软件优先级(very high、high、medium、low)和相同硬件优先级(相同通道号)的情况下,DMA1上的request优先级高于DMA2上的。

第二,按照手册上说,如果使用DMA传输ADC数据时发生了overrun,ADC不会再产生DMA请求,DMA传输应该停止。LZ是如何判断“DMA仍然传送数据到内存”?

使用特权

评论回复
8
hxb20122012| | 2013-6-24 15:49 | 只看该作者
ADC+DMA传输出现数据错位的问题,也许跟你写的程序有点关系,要参照官方例程。初始化的顺序等等。

使用特权

评论回复
9
王小毛wxm|  楼主 | 2013-6-26 22:08 | 只看该作者
本帖最后由 王小毛wxm 于 2013-6-26 22:11 编辑
香水城 发表于 2013-6-24 15:22
第一,F3的DMA模块和F1应该一样的(不像F2的DMA那么复杂:)),在相同软件优先级(very high、high、mediu ...

谢谢香主!
那就是说:
一:DMA 优先级的意思是不是说:1、软件优先级是第一考虑的,DMA1和DMA2的所有通道中,设置了VeryHigh的通道具有最高优先级,设置了 VeryHigh的DMA2_CH3高于设置了High的DMA1_CH1。2、同一个DMA,如果软件优先级相同,则硬件通道号小的优先级高,同样软件优先级,DMA2_CH1高于DMA2_CH2;那都设置了High的DMA2_CH1和DMA1_CH2,是不是DMA2_CH1优先级高呢?3、相同软件优先级,相同硬件通道号,DMA1请求高于DMA2的。

二:我的程序中用DMA1_CH1传送ADC1采样数据到内存变量buf1中,用DMA2_CH5传送ADC3采样数据到buf2中,用在硬件调试过程,设置DMA2通道优先级不够高的话,ADC3状态寄存器会有overrun位被置位,此时如果使能overrun中断,会进中断,但并没有对overrun标志做处理,这时看ADC3采样结果寄存器值还在变,buf2中数据也还在更新。
谢谢香主

使用特权

评论回复
10
qiaoyang123| | 2013-7-1 10:47 | 只看该作者
你好 stm32f303 ADC1和ADC2 双通道采集时 ADC_CDR_ADDRESS    ((uint32_t)0x5000030C)     那我使用ADC3和ADC4他们的ADC_CDR_ADDRESS地址是多少呢?

使用特权

评论回复
11
王小毛wxm|  楼主 | 2013-7-2 09:05 | 只看该作者
qiaoyang123 发表于 2013-7-1 10:47
你好 stm32f303 ADC1和ADC2 双通道采集时 ADC_CDR_ADDRESS    ((uint32_t)0x5000030C)     那我使用ADC3和A ...

你好,ADC3、ADC4的共用数据寄存器ADC_CDR_ADDRESS 是((uint32_t))0x5000070C。
这个东西的计算可参考如下:


该地址=ADC3的基地址(AHB3总线地址+ADC3相对于AHB3的偏移量)+ADC common registers 相对于ADC3的偏移量+ADC CDR register的偏移量
ADC_CDR_ADDRESS=0x5000 0400 (0x5000 0000+0x400)+0x300+0x0C=0x5000 070C.
另外你可以用KEIL 调试时查看寄存器来查看某寄存器地址。如下:


使用特权

评论回复
12
airwill| | 2013-7-2 12:57 | 只看该作者
我倒是进行了高强度数据交换的测试, 想抓住个 OVERRUN. 却没有.

使用特权

评论回复
13
王小毛wxm|  楼主 | 2013-7-2 14:32 | 只看该作者
airwill 发表于 2013-7-2 12:57
我倒是进行了高强度数据交换的测试, 想抓住个 OVERRUN. 却没有.

我用DAC Channel1输出正弦波31.25KHz,每周期64点数据,即2M的输出频率,用DMA2_CH3传送内存正弦波数据到DAC_DR。这个正弦波激励芯片外部的传感器,传感器感应出信号,然后用三路ADC采样信号。ADC在一个正弦激励周期内采样128点,即采样频率4M,ADC1/2common data的采样值用DMA1传送到内存,ADC3的采样值用DMA2 Channel5传送到内存。当DMA2_CH3的优先级设置高于DMA2 Channel5时,ADC3就会出现over run。

使用特权

评论回复
14
qiaoyang123| | 2013-7-2 16:40 | 只看该作者
本帖最后由 qiaoyang123 于 2013-7-2 17:03 编辑
王小毛wxm 发表于 2013-7-2 09:05
你好,ADC3、ADC4的共用数据寄存器ADC_CDR_ADDRESS 是((uint32_t))0x5000070C。
这个东西的计算可参考如 ...

谢谢  现在又有新问题了  我之前adc1 和adc2的程序  改成了adc3和adc4的程序就不能采集数据了,是不是ADC3和ADC4的使用有什么特殊的地方?


刚刚搞定了 查了一下资料发现adc3 和adc4的dma通道不同   老大能加你好友么?  我QQ:348611093

使用特权

评论回复
15
王小毛wxm|  楼主 | 2013-7-2 16:53 | 只看该作者
qiaoyang123 发表于 2013-7-2 16:40
谢谢  现在又有新问题了  我之前adc1 和adc2的程序  改成了adc3和adc4的程序就不能采集数据了,是不是ADC ...

你这问题问的我没法回答呀?你都改了哪?该改的有没有改,我不知道 啊
adc3/4没有啥特殊的

使用特权

评论回复
16
qiaoyang123| | 2013-7-2 17:04 | 只看该作者
王小毛wxm 发表于 2013-7-2 16:53
你这问题问的我没法回答呀?你都改了哪?该改的有没有改,我不知道 啊
adc3/4没有啥特殊的
...

刚刚搞定了 查了一下资料发现adc3 和adc4的dma通道不同   老大能加你好友么?  我QQ:348611093

使用特权

评论回复
17
stjohn1650| | 2015-5-15 09:04 | 只看该作者
qiaoyang123 发表于 2013-7-2 16:40
谢谢  现在又有新问题了  我之前adc1 和adc2的程序  改成了adc3和adc4的程序就不能采集数据了,是不是ADC3 ...

我想问下,我现在也使用303的ADC3,ADC4,发现dma传输时,使用ADC4的dma通道,ADC3才进行转换,但是,有overrun标志,你最后是怎么搞定的?

使用特权

评论回复
18
runningwzf| | 2015-5-15 09:08 | 只看该作者
1系列和2系列进行了大量数据传输实验,表示没有发现过过载

使用特权

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

本版积分规则

12

主题

138

帖子

0

粉丝