问答

汇集网友智慧,解决技术难题

阿斯顿发大水

TA的家园币:10  

  • G032实现双通道ADC+DMA出现采集错误

    N32G032实现双通道ADC+DMA实现数据采集voidRCC_Configuration(void){ErrorStatusHSIStartUpStatus;//HSI启动状态//1.使能ADC、DMA、GPIOA时钟(确保时钟已使能)RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA,ENABLE);RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_DMA,ENABLE);RCC_EnableAHBPeriphClk(RCC_AHB_PERIPH_ADC,ENABLE);/*使能HSI时钟*/RCC_EnableHsi(ENABLE);/*等待HSI稳定(最多等待10ms,超时则启动失败)*/HSIStartUpStatus=RCC_WaitHsiStable();if(HSIStartUpStatus!=SUCCESS){/*HSI启动失败,进入死循环(需硬件复位)*/while(1);}/*配置ADC时钟(ADC工作频率需≤18MHz)ADC_1MCLK用于内部计时功能,在RCC中配置,频率大小必须配置成1M*/RCC_ConfigAdc1mClk(RCC_ADC1MCLK_SRC_HSI,RCC_ADC1MCLK_DIV8);//ADC1M时钟=HSI/8=1MHz//RCC_ConfigAdcHclk(RCC_ADCHCLK_DIV16);//ADC核时钟=AHB/16=3MHzADC_ConfigClk(ADC_CTRL3_CKMOD_AHB,RCC_ADCHCLK_DIV16);}voidADC_DMA_Configuration(void){ADC_InitTypeADC_InitStructure;DMA_InitTypeDMA_InitStructure;GPIO_InitTypeGPIO_InitStructure;ADC_InitTypeExADC_InitStructureEx;RCC_Configuration();//1.配置PA0、PA1为模拟输入GPIO_InitStruct(&GPIO_InitStructure);GPIO_InitStructure.Pin=PA0_MAINS_ZERO_PIN|PA1_INV_VOLT_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_MODE_ANALOG;GPIO_InitPeripheral(GPIOA,&GPIO_InitStructure);//2.配置DMA通道(单通道传输多个ADC数据)DMA_DeInit(DMA_CH1);//使用通道1DMA_StructInit(&DMA_InitStructure);DMA_InitStructure.PeriphAddr=(uint32_t)&ADC->DAT;//ADC数据寄存器DMA_InitStructure.MemAddr=(uint32_t)&adc_values[0];//起始地址DMA_InitStructure.Direction=DMA_DIR_PERIPH_SRC;//外设→内存DMA_InitStructure.BufSize=2;//传输2个通道数据DMA_InitStructure.PeriphInc

    2025-11-20 0