你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于stm32f407的三重DMA模式

[复制链接]
sjh943498450 提问时间:2014-12-16 15:59 /
FLGKRKUN%W9TST6KU93(@J2.jpg
请问大侠,这边手册说的生成3个DMA请求不知道是哪个DMA通道生成的。ADC1 、ADC2 、ADC3不是在DMA2模块中不是都有对应的相应的数据流和通道。
1、是否是ADC1、ADC2、ADC3只要一个ADC设置相应的DMA通道,并启动。如,设置ADC1相对应的DMA通道,并启动。当ADC1装换完成时,ADC1对应的DMA通道是不是就会发出3个DMA请求?
2、是否是ADC1、ADC2、ADC3每个ADC都要设置相应的DMA通道,并启动。如,要设置ADC1、ADC2、ADC3相对应的通道,并启动。当ADC1转换完成时,就生成一个ADC1相对应的DMA请求,当ADC2转换完成时,就生成一个ADC2相对应的DMA请求,当ADC3转换完成时,就生成一个ADC3相对应的DMA请求?
不知道是上面的哪种情况,还是都不是?


收藏 评论8 发布时间:2014-12-16 15:59

举报

8个回答
zqm656993 回答时间:2014-12-16 18:31:51
希望有用
QQ截图20141216183056.png
wambob 回答时间:2014-12-18 14:17:16
DMA传输有三个步骤:

1.    从外设数据寄存器或者内存中取出数据,外设数据寄存器地址和内存地址分别由DMA_SxPAR寄存器和DMA_SxM0AR寄存器给出

2.   将取出的数据进行存储

3.   DMA_SxNDTR寄存器的自减,DMA_SxNDTR寄存器里的值表示还需要传输的数据个数

通道选择:

每个数据流的通道可以通过DMA_SxCR寄存器中的CHSEL[2:0] 设置。通道和数据流的映射祥参数据手册
奔跑小蜗牛 回答时间:2014-12-18 15:03:31
是情况二,每个ADC通道转换结束都会产生一个DMA请求,产生DMA请求的同时会判断DMA[1:0]位是否为01,是01则一次性完成三个DMA数据传输到SRAM,如果不是会继续按照既定设置ADC采样。
sjh943498450 回答时间:2014-12-18 15:38:54
奔跑小蜗牛 发表于 2014-12-18 15:03
是情况二,每个ADC通道转换结束都会产生一个DMA请求,产生DMA请求的同时会判断DMA[1:0]位是否为01,是01则 ...

没听明白,能否说的详细点。一次性完成三个DMA数据传输到SRAM,这三个DMA请求是不是让一个同一个DMA通道传输三次。还是怎么?
晓枫VS枯叶 回答时间:2014-12-19 09:07:43
  • /***DMA设置***/
  • void ADC_DMA_Config(void)
  • {
  •   RCC->AHB1ENR |= (1<<22); //使能DMA2时钟
  •   ADC3->CR2 &= ~(1<<8);//ADC3 dma发送模式除能
  •   DMA2_Stream0->CR &= 0xFFFFFFFE; //除能DMA2_Stream0
  •   while(DMA2_Stream0->CR & 0x00000001);//确保DMA可以被设置
  •   DMA2->LIFCR |= 0x0000003D;//传送前清空DMA2_Stream0所有中断标志
  •   DMA2_Stream0->PAR = (uint32_t)&ADC->CDR;//设置外设地址
  •   DMA2_Stream0->M0AR = (uint32_t)ADCConvertedVault; //设置内存地址
  •   DMA2_Stream0->CR |= 0x0002800;//16位数据
  •   DMA2_Stream0->NDTR = 10000; //设置dma传输数据的数量
  •   /*
  •     设置dma2通道0,即ADC1
  •     优先级Medium
  •     传输方向外设到内存
  •     内存递增模式
  •     循环模式
  •     传输完成中断
  •   */
  •   DMA2_Stream0->CR |= ( 0x00000000 | 0x00010000 | 0x0 | (1<<10) | (1<<8) | (1<<4) );
  •   NVIC->IP[56] = 0xB0;
  •   NVIC->ISER[1] |= (1<<(56-32));
  •   DMA2_Stream0->CR |= 1; //DMA2数据流0使能
  • }
  • 这是三重ADC转换时DMA设置的函数,不过是寄存器写的, DMA2_Stream0->PAR = (uint32_t)&ADC->CDR;//设置外设地址,DMA2数据流0外设地址指向了ADC->CDR寄存器地址

沐紫 回答时间:2014-12-22 13:41:47
楼主问题是否解决了呢?谢谢楼上几位朋友回答
sjh943498450 回答时间:2014-12-24 15:11:01
谢谢大家的知道,问题已经解决
sjh943498450 回答时间:2014-12-24 15:14:41
沐紫 发表于 2014-12-22 13:41
楼主问题是否解决了呢?谢谢楼上几位朋友回答

管理员大虾,我在写程序的时候,用的双重规则同时模式,发现一旦adc转换设定为定时器触发,软件触发便触发不了adc转换。是程序问题还是单片机自身限制。查阅芯片手册没有发现关于这个的说明。谢谢

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版