[mw_shl_code=c,true]#include "pbdata.h"
#define N 50 //????50 ?
#define M 4 //?12 ???
vu16 AD_Value[N][M]; //????ADC ????,??DMA ?????
vu16 After_filter[M]; //?????????????
int i,j,k,l;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);
void ADC_Configuration(void);
void DMA_Configuration(void);
//void init_All_Periph(void);
//void SysTick_Initaize(void);
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
/*int main(void)
{
u32 ad=0;
u8 i=0;
RCC_Configuration(); //?????±????????
GPIO_Configuration();//??????????
USART_Configuration();
NVIC_Configuration();
ADC_Configuration();
while(1)
{
ad=0;
for(i=0;i<50;i++)
{
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
ad=ad+ADC_GetConversionValue(ADC1);
}
ad=ad/50;
printf("ad =%f\r\n",3.3/4095*ad);//??????????
//×??? delay_ms????????·??§??1-1863
//?ù??×??ó???±??1.8??
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
}
} */
void RCC_Configuration(void)
{
SystemInit();//72m
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_ADCCLKConfig(RCC_PCLK2_Div6);//12M ×??ó14M
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//LED
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
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(GPIOC,&GPIO_InitStructure);
}
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void USART_Configuration(void)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate=115200;
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
USART_InitStructure.USART_StopBits=USART_StopBits_1;
USART_InitStructure.USART_Parity=USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
USART_ClearFlag(USART1,USART_FLAG_TC);
}
void ADC_Configuration(void)
{
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
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_InitStructure.ADC_NbrOfChannel=M;
ADC_Init(ADC1,&ADC_InitStructure);
//ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5);
//????ADC ??????,??????????????
//ADC1,ADC ??x,????????y,?????239.5 ??
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_239Cycles5 );
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 4, ADC_SampleTime_239Cycles5 );
ADC_TempSensorVrefintCmd(ENABLE);
ADC_DMACmd(ADC1,ENABLE);
ADC_Cmd(ADC1,ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1,ENABLE);
}
/*??DMA*/
void DMA_Configuration(void)
{
/* ADC1 DMA1 Channel Config */
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel1); //?DMA ???1 ?????????
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA ?????
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //????????????
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; //?
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //????
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 ??????
}
/*??ADC ??,??????????*/
u16 GetVolt(u16 advalue)
{
return (u16)(advalue * 330 / 4096); //???????100 ?,????????
}
/*??????*/
void filter(void)
{
int sum = 0;
u8 count;
i=k;
//for(i=0;i<4;i++)
//{
for ( count=0;count<N;count++)
{
sum += AD_Value[count];
}
After_filter=sum/N;
sum=0;
}
//}
int main(void)
{
u16 value[M];
RCC_Configuration(); //?????±????????
GPIO_Configuration();//??????????
USART_Configuration();
DMA_Configuration();
NVIC_Configuration();
ADC_Configuration();
//init_All_Periph();
//SysTick_Initaize();
/* Start ADC1 Software Conversion */
//_adcResult = 0x0FFF;
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
DMA_Cmd(DMA1_Channel1, ENABLE); //??DMA ??
while(1)
{
/*for(j=0; j<16; j++)
{
if (j==0)
{ printf("12V_AI_");
delay_ms(100);}
else if (j==1)
{ GPIO_SetBits(GPIOA,GPIO_Pin_15); //AI0
printf("AI0_");
delay_ms(100);}
else if (j==2)
{GPIO_SetBits(GPIOC,GPIO_Pin_10);//AI1
printf("AI1_");
delay_ms(100); }
else if (j==3)
{GPIO_SetBits(GPIOC,GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//AI2
printf("AI2_");
delay_ms(100);}
else if (j==4)
{GPIO_SetBits(GPIOC,GPIO_Pin_11);//ai3
printf("AI3_");
delay_ms(100);}
else if (j==5)
{GPIO_SetBits(GPIOC,GPIO_Pin_11);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//ai4
printf("AI4_");
delay_ms(100);}
else if (j==6)
{GPIO_SetBits(GPIOC,GPIO_Pin_11);
GPIO_SetBits(GPIOC,GPIO_Pin_10);//AI2
printf("AI5_");
delay_ms(100);}
else if (j==7)
{ GPIO_SetBits(GPIOC,GPIO_Pin_11);
GPIO_SetBits(GPIOC,GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//AI6
printf("AI6_");
delay_ms(100);}
else if (j==8)
{ GPIO_SetBits(GPIOC,GPIO_Pin_12);//AI7
printf("AI7_");
delay_ms(100);}
else if (j==9)
{GPIO_SetBits(GPIOC,GPIO_Pin_12);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//ai8
printf("AI8_");
delay_ms(100);}
else if (j==10)
{GPIO_SetBits(GPIOC,GPIO_Pin_12);
GPIO_SetBits(GPIOC,GPIO_Pin_10);//ai4
printf("AI9_");
delay_ms(100);}
else if (j==11)
{ printf("20V_AO_");
delay_ms(100);}
else if (j==12)
{GPIO_SetBits(GPIOC,GPIO_Pin_13);//AO0
printf("AO0_");
delay_ms(100);}
else if (j==13)
{GPIO_SetBits(GPIOC,GPIO_Pin_14);//AO1
printf("AO1_");
delay_ms(100);}
else if (j==14)
{GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_SetBits(GPIOC,GPIO_Pin_14);//AO2
printf("AO2_");
delay_ms(100);}
else if (j==15)
{GPIO_SetBits(GPIOC,GPIO_Pin_15);//AO3
printf("AO3_");
delay_ms(100);}
else if (j==16)
{GPIO_SetBits(GPIOC,GPIO_Pin_15);
GPIO_SetBits(GPIOC,GPIO_Pin_13);//AO4
printf("AO1_");
delay_ms(100);}
*/
for(k=0;k<4;k++)
{
if (k==3)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//????????
filter();
//i=k;
value= GetVolt(After_filter);
value=(140-value)*10000/43+2500;
printf("temp_");
printf("PC[%d]:\t%d.%d\n",i,value/100,value%100) ;
delay_ms(100);
delay_ms(100);
}
else if (k==2)
{
for(l=0; l<6; l++)
{ if (l==0)
{ printf("20V_AO_");
//delay_ms(100);
}
else if (l==1)
{GPIO_SetBits(GPIOC,GPIO_Pin_13);//AO0
printf("AO0_");
// delay_ms(100);
}
else if (l==2)
{GPIO_SetBits(GPIOC,GPIO_Pin_14);//AO1
printf("AO1_");
// delay_ms(100);
}
else if (l==3)
{GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_SetBits(GPIOC,GPIO_Pin_14);//AO2
printf("AO2_");
// delay_ms(100);
}
else if (l==4)
{GPIO_SetBits(GPIOC,GPIO_Pin_15);//AO3
printf("AO3_");
// delay_ms(100);
}
else if (l==5)
{GPIO_SetBits(GPIOC,GPIO_Pin_15);
GPIO_SetBits(GPIOC,GPIO_Pin_13);//AO4
printf("AO4_");
// delay_ms(100);
}
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//????????
filter();
//i=k;
value= GetVolt(After_filter);
//printf("20V_AO_");
printf("PC[%d]:\t%d.%dv\n",i,value/100,value%100) ;
delay_ms(100);
delay_ms(100);
}
}
else if (k==1)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//????????
filter();
//i=k;
value= GetVolt(After_filter);
printf("12V_NI_");
printf("PC[%d]:\t%d.%dv\n",i,value/100,value%100) ;
delay_ms(100);
delay_ms(100);
}
else if
(k==0)
{
for(j=0; j<11; j++)
{
if (j==0)
{ printf("12V_AI_");
//delay_ms(100);
}
else if (j==1)
{ GPIO_SetBits(GPIOA,GPIO_Pin_15); //AI0
printf("AI0_");
//delay_ms(100);
}
else if (j==2)
{GPIO_SetBits(GPIOC,GPIO_Pin_10);//AI1
printf("AI1_");
//delay_ms(100);
}
else if (j==3)
{GPIO_SetBits(GPIOC,GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//AI2
printf("AI2_");
// delay_ms(100);
}
else if (j==4)
{GPIO_SetBits(GPIOC,GPIO_Pin_11);//ai3
printf("AI3_");
// delay_ms(100);
}
else if (j==5)
{GPIO_SetBits(GPIOC,GPIO_Pin_11);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//ai4
printf("AI4_");
//delay_ms(100);
}
else if (j==6)
{GPIO_SetBits(GPIOC,GPIO_Pin_11);
GPIO_SetBits(GPIOC,GPIO_Pin_10);//AI2
printf("AI5_");
// delay_ms(100);
}
else if (j==7)
{ GPIO_SetBits(GPIOC,GPIO_Pin_11);
GPIO_SetBits(GPIOC,GPIO_Pin_10);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//AI6
printf("AI6_");
//delay_ms(100);
}
else if (j==8)
{ GPIO_SetBits(GPIOC,GPIO_Pin_12);//AI7
printf("AI7_");
//delay_ms(100);
}
else if (j==9)
{GPIO_SetBits(GPIOC,GPIO_Pin_12);
GPIO_SetBits(GPIOA,GPIO_Pin_15);//ai8
printf("AI8_");
//delay_ms(100);
}
else if (j==10)
{GPIO_SetBits(GPIOC,GPIO_Pin_12);
GPIO_SetBits(GPIOC,GPIO_Pin_10);//ai4
printf("AI9_");
//delay_ms(100);
}
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//????????
filter();
//i=k;
value= GetVolt(After_filter);
//printf("12V_AI\n");
printf("PC[%d]:\t%d.%dv\n",i,value/100,value%100) ;
delay_ms(100);
delay_ms(100);
}
}
}
//FOR
//k=0;
}//WHILE
}
//INT
[/mw_shl_code]
|