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

同一个程序,打开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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版