请问stm32f407的三重DMA模式有对应的相应的数据流和通道吗?

2019-07-14 17:59发布


请问大侠,这边手册说的生成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请求?
不知道是上面的哪种情况,还是都不是?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
redsworm
2019-07-15 04:29

  • /***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寄存器地址

一周热门 更多>