[mw_shl_code=c,true]
#define N 10 //?????¨??????50??
#define M 3 //????AD?¨??3??
u16 AD_Value[N][M];
u16 After_filter[M];
int i;
void adcinit1(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 , ENABLE ); //????ADC1?¨???±??
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //72M/6=12,ADC×??ó?±??????????14M
//PA0/1/2/3 ×÷???????¨??????????
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //????????????
GPIO_Init(GPIOA, &GPIO_InitStructure);
ADC_DeInit(ADC1); //?????è ADC1 ???????????÷???è???±????
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC?¤×÷????:ADC1??ADC2?¤×÷??????????
ADC_InitStructure.ADC_ScanConvMode = ENABLE; //????×????¤×÷?????¨??????
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //????×????¤×÷??????×???????
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //×??????í??????????????·?????
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC??????????
ADC_InitStructure.ADC_NbrOfChannel = M; //???ò???????ò×?????ADC?¨????????
ADC_Init(ADC1, &ADC_InitStructure); //?ù??ADC_InitStruct?????¨???????????????èADCx???????÷
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_239Cycles5 );
ADC_DMACmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE); //???????¨??ADC1
ADC_ResetCalibration(ADC1); //???????¨??ADC1????×??????÷
while(ADC_GetResetCalibrationStatus(ADC1)); //????ADC1??????×??????÷??×???,?è??×????ò????
ADC_StartCalibration(ADC1); //???????¨ADC1????×?×???
while(ADC_GetCalibrationStatus(ADC1));
}
//DAM
void MYDMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //????DMA????
DMA_DeInit(DMA1_Channel1); //??DMA???¨??1?????÷???è???±????
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA???èADC?ù???·
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA?????ù???·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //???è×÷??????????????????
DMA_InitStructure.DMA_BufferSize = N*M; //DMA?¨????DMA???????ó??
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //???è???·?????÷??±?
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //???????·?????÷????
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //?????í????8??
DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord; //?????í????8??
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //?¤×÷?????·????????
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA?¨?? x????????????
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA?¨??x?????è??????????????????
DMA_Init(DMA1_Channel1, &DMA_InitStructure); //?ù??DMA_InitStruct?????¨????????????DMA???¨??USART1_Tx_DMA_Channel?ù±ê?????????÷
}
/*????ADC????×???2???????®????*/
u16 GetVolt(u16 advalue)
{
return (u16)(advalue * 330 / 4096);
}
int main(void)
{
u16 value[M];
SystemInit();
delay_init(72); //???±??????
NVIC_Configuration();
uart_init(9600);
// LED_Init();
// KEY_Init();
// LCD_Init();
adcinit1();
MYDMA_Config();
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
DMA_Cmd(DMA1_Channel1, ENABLE);
while(1)
{
for( i = 0; i < 2;i++)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
value= GetVolt(After_filter);
printf("%d:%d",value/100,value%100);
delay_ms(100);
}
}
}
[/mw_shl_code]
求大神帮我看看,为什么我串口发出来的东西是0:0. |