微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > ADC采集DMA传输出现问题

ADC采集DMA传输出现问题

时间:10-02 整理:3721RD 点击:
我用ADC采集三路电压,然后用DMA传输,但是我对DMA传输一半和传输完成设置了中断,但是似乎并没有进入到中断函数中,以下是我的程序,大神们请看看哪里出错了?
NVIC_InitTypeDef NVIC_InitStructure;
  DMA_InitTypeDef DMA_InitStructure;
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);        //ê1?üDMA′?ê?
        
        NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;  //
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; //
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            //
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;       //
  NVIC_Init(&NVIC_InitStructure);
        
  DMA_DeInit(DMA1_Channel1);   //??DMAμ?í¨μà1??′??÷??éè?aè±ê??μ
        //DMA1_MEM_LEN=cndtr;
        DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;  //DMAíaéè?ùμ??·
        DMA_InitStructure.DMA_MemoryBaseAddr = (u32)AD_Value;  //DMA?ú′??ùμ??·
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //êy?Y′?ê?·??ò£?′ó?ú′??áè?·¢?íμ?íaéè
        DMA_InitStructure.DMA_BufferSize = M*N;  //DMAí¨μàμ?DMA?o′?μ?′óD?
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //íaéèμ??·??′??÷2?±?
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //?ú′?μ??·??′??÷μY??
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;  //êy?Y?í?è?a8??
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; //êy?Y?í?è?a8??
        DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //1¤×÷?ú?y3£?£ê?
        DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMAí¨μà xóμóD?Dó??è??
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //DMAí¨μàx??óDéè???a?ú′?μ??ú′?′?ê?
        DMA_Init(DMA1_Channel1, &DMA_InitStructure);  //?ù?YDMA_InitStruct?D???¨μ?2?êy3?ê??ˉDMAμ?í¨μàUSART1_Tx_DMA_Channel?ù±êê?μ???′??÷
        DMA_ITConfig(DMA1_Channel1, DMA_IT_HT,ENABLE);//′?ê?1y°?
        DMA_ITConfig(DMA1_Channel1, DMA_IT_TC,ENABLE);//′?ê?íê3é?D??
       DMA_Cmd(DMA1_Channel1, ENABLE);
以上是我的DMA设置,
void DMA1_Channel1_IRQHandler(void)
{
        if(DMA_GetITStatus(DMA1_IT_HT1)!=RESET)
        {
                DMA_ClearITPendingBit(DMA1_IT_HT1);//′?ê?ò?°?
                DMA_ClearFlag(DMA1_FLAG_HT1);
                flag=1;
        }
        if(DMA_GetITStatus(DMA1_IT_TC1)!=RESET)
        {
                DMA_ClearITPendingBit(DMA1_IT_TC1);//′?ê?íê3é±ê??
    DMA_ClearFlag(DMA1_FLAG_TC1);
                flag=2;
        }
               
}
这是我的中断函数,设置在stm32f10x_it.c.,然后adc我也都设置好了,但是这个flag似乎一直不变为1,我设置是传输到一半就变为1 啊

求解释啊

再次求解释

看看你的adc工作了没有

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top