本人新学stm32,本意是传送100个AD转化值到内存,然后再做平均处理。可是现在数组一直没有数值填充,看了很久也没有办法解决。向大家请教。 
ADC配置: 
#include "adc.h" 
void Adc_init(void) 
{  
GPIO_InitTypeDef GPIO_InitStructure; 
ADC_InitTypeDef ADC_InitStructure; 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE); 
RCC_ADCCLKConfig(RCC_PCLK2_Div6); 
  
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;      //开启PB6作为脉冲输出口 
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; 
    GPIO_Init(GPIOB,&GPIO_InitStructure); 
  
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;  
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; 
GPIO_Init(GPIOA,&GPIO_InitStructure);
 
	ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; 
ADC_InitStructure.ADC_ScanConvMode=DISABLE; 
ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; 
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; 
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; 
ADC_InitStructure.ADC_NbrOfChannel=1; 
ADC_Init(ADC1,&ADC_InitStructure); 
  
ADC_DMACmd(ADC1,ENABLE); 
ADC_RegularChannelConfig(ADC1,0,1, ADC_SampleTime_239Cycles5 );
 
	ADC_Cmd(ADC1,ENABLE); 
   
 
	 
ADC_ResetCalibration(ADC1); //使能复位校准   
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束 
ADC_StartCalibration(ADC1);  //开启AD校准 
while(ADC_GetCalibrationStatus(ADC1));  //等待校准结束
 
	ADC_SoftwareStartConvCmd(ADC1,ENABLE); 
} 
 
DMA配置: 
#include "dma.h" 
#include "config.h"
 
	extern volatile u16   logical[BUF_SIZE];
 
	void Init_DMA(void) 
{    
 DMA_InitTypeDef DMA_InitStructure; 
  
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
 
	    DMA_DeInit(DMA1_Channel1); 
    DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1->DR; 
    DMA_InitStructure.DMA_MemoryBaseAddr=(u16) logical;        //内存地址 
    DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; 
    DMA_InitStructure.DMA_BufferSize= BUF_SIZE;    //设置一次传输数据量的大小 
    DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; 
    DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; 
    DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord; 
    DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; 
    DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; 
    DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh; 
    DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; 
 DMA_Init(DMA1_Channel1,&DMA_InitStructure); 
 DMA_Cmd(DMA1_Channel1,ENABLE); 
 ADC_DMACmd(ADC1,ENABLE); 
} 
 
main函数: 
#include"stm32f10x.h" 
#include"delay.h" 
#include"sys.h" 
#include"usart.h" 
#include"dma.h" 
#include"adc.h" 
#include "config.h"
 
	volatile u16   logical[BUF_SIZE]; 
float digital[BUF_SIZE];
 
	 
int main(void) 
{ 
 float  sum=0; 
 float average;  
 float temp=0; 
 u8 i; 
 //NVIC_Configuration(); 
 delay_init(); 
 uart_init(9600); 
 Adc_init(); 
 Init_DMA(); 
 while(1) 
 { 
  for(i=0;i<BUF_SIZE;i++) 
  {    
   digital=(float)logical/4096*3.3; 
   sum=sum+digital;    
   average=sum/BUF_SIZE; 
   printf("%f\n",average); 
        } 
 /*    if((average-temp)>0.02) 
  { 
   GPIO_SetBits(GPIOB,GPIO_Pin_6); 
   GPIO_ResetBits(GPIOB,GPIO_Pin_6); 
   temp=average; 
        }*/ 
   
    } 
} 
不知道问题出在哪里 菜鸟望请教
  |