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

同一个程序,打开DMA_Channel1就能进入DMA中断,可是换成DMA_C...

[复制链接]
watercici 提问时间:2018-7-30 17:12 /
本帖最后由 watercici 于 2018-7-30 17:19 编辑

带DMA的AD,同一个程序,打开DMA_Channel1就能进入DMA中断,可是换成DMA_Channel2就不行了,希望
帮我看看。程序如下:  在线等,谢谢。是不是ADC1只能用DMA_Channel1通道???
  1. void DMA1_Channel2_IRQHandler(void)
  2. {        

  3.         if(DMA_GetFlagStatus(DMA1_FLAG_TC1)==SET)
  4.         {  
  5.                 dma1_irq_status1 = EVENT_PENDING;                        
  6.                 DMA_ClearFlag(DMA1_FLAG_TC1);         
  7.                 Stop_adc();
  8.         }        
  9. }
复制代码
  1. void init_adc()
  2. {
  3.         ADC_InitTypeDef  adc_obj;        
  4.         GPIO_InitTypeDef gpio_obj;
  5.         DMA_InitTypeDef  dma_obj;
  6.         NVIC_InitTypeDef NVIC_InitStructure;

  7.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);

  8.         //NVIC config                                   
  9.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  10.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel2_IRQn;
  11.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  12.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  13.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  14.         NVIC_Init(&NVIC_InitStructure);
  15.         
  16.         /*DMA1 channel2 configuration*/
  17.         DMA_DeInit(DMA1_Channel2);
  18.         dma_obj.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;
  19.         dma_obj.DMA_MemoryBaseAddr = (u32)&sample_value;
  20.         dma_obj.DMA_DIR = DMA_DIR_PeripheralSRC;
  21.         dma_obj.DMA_BufferSize = SAMPLE_SZIE;
  22.         dma_obj.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  23.         dma_obj.DMA_MemoryInc = DMA_MemoryInc_Enable;
  24.         dma_obj.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  25.         dma_obj.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  26.         dma_obj.DMA_Mode = DMA_Mode_Normal;
  27.         dma_obj.DMA_Priority = DMA_Priority_VeryHigh;
  28.         dma_obj.DMA_M2M = DMA_M2M_Disable;
  29.         
  30.         DMA_Init(DMA1_Channel2 , &dma_obj);
  31.         
  32.         /*Enable DMA1 channel2*/
  33.         DMA_Cmd(DMA1_Channel2 , ENABLE);        
  34.         DMA_ITConfig(DMA1_Channel2, DMA_IT_TC, ENABLE);

  35.         //periph clcok
  36.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  37.         //gpio config
  38.         gpio_obj.GPIO_Pin =        GPIO_Pin_1;
  39.         gpio_obj.GPIO_Mode = GPIO_Mode_AIN;
  40.         GPIO_Init(GPIOA , &gpio_obj);

  41.         ADC_DeInit(ADC1);
  42.         /*ADC1 configuration*/
  43.         adc_obj.ADC_Mode = ADC_Mode_Independent;
  44.         adc_obj.ADC_ScanConvMode = DISABLE;
  45.         adc_obj.ADC_ContinuousConvMode = ENABLE;
  46.         adc_obj.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
  47.         adc_obj.ADC_DataAlign = ADC_DataAlign_Right;
  48.         adc_obj.ADC_NbrOfChannel = 1;
  49.         ADC_Init(ADC1 , &adc_obj);

  50.         RCC_ADCCLKConfig(RCC_PCLK2_Div8); //9Mhz

  51.         ADC_RegularChannelConfig(ADC1 , ADC_Channel_1 , 1 , ADC_SampleTime_1Cycles5);
  52.         /*Enable ADC1 DMA*/
  53.         ADC_DMACmd(ADC1 , ENABLE);
  54.         /*Enable ADC1*/
  55.         ADC_Cmd(ADC1 , ENABLE);

  56.         ADC_ResetCalibration(ADC1);
  57.         while(ADC_GetResetCalibrationStatus(ADC1));
  58.         
  59.         ADC_StartCalibration(ADC1);
  60.         while(ADC_GetCalibrationStatus(ADC1));
  61.         
  62.         ADC_SoftwareStartConvCmd(ADC1 , ENABLE);
  63. }
复制代码


DMA1请求一览表

DMA1请求一览表
收藏 评论4 发布时间:2018-7-30 17:12

举报

4个回答
watercici 回答时间:2018-7-30 17:23:36
我发帖之后,在手册中看到了这个表,我想问,如果ADC1只能用DMA的通道1,那当ADC1中的多个通道同时采集数据,而这几通道都用DMA通道时怎么办呢?
zhao.zhao 回答时间:2018-7-31 09:02:54
指定通道的,不能够改动

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

STM1024 回答时间:2018-7-31 09:45:38
通道是严格对应的,没法自定义。
像你说的想多路采集,一直使用ADC1的CH1,把采集频率提高,用轮询的方式实现。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

watercici 回答时间:2018-7-31 11:53:21
stm1024 发表于 2018-7-31 09:45
通道是严格对应的,没法自定义。
像你说的想多路采集,一直使用ADC1的CH1,把采集频率提高,用轮询的方式实 ...

哦,好的,谢谢

所属标签

相似问题

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