源代码:
void Adc_Init(void)
{
RCC->APB2ENR|=1<<4; //ʹÄÜPORTC¿ÚʱÖÓ
GPIOC->CRL&=0XFFFFFFF0; //PC0 anologÊäÈë
RCC->APB2ENR|=1<<9; //ADC1ʱÖÓʹÄÜ
RCC->APB2RSTR|=1<<9; //ADC1¸´Î»
RCC->APB2RSTR&=~(1<<9); //¸´Î»½áÊø
RCC->CFGR&=~(3<<14); //·ÖƵÒò×ÓÇåÁã
RCC->CFGR|=2<<14; //SYSCLK/DIV2=12M ADCʱÖÓÉèÖÃΪ12MHz£¬ADC×î´óʱÖÓ²»Äܳ¬¹ý14MHz
ADC1->CR1&=0XF0FFFF; //¹¤×÷ģʽÇåÁã
ADC1->CR1|=0<<16; //¶ÀÁ¢¹¤×÷ģʽ
ADC1->CR1&=~(1<<8); //·ÇɨÃèģʽ
ADC1->CR2&=~(1<<1); //µ¥´Îת»»Ä£Ê½
//ADC1->CR2&=(1<<1);
ADC1->CR2&=~(7<<17);
ADC1->CR2|=7<<17; //Èí¼þ¿ØÖÆת»»
ADC1->CR2|=~(1<<20); //±ØÐëʹÓÃÍⲿ´¥·¢(SWSTART) ±ØÐëʹÓÃÒ»¸öʼþÀ´´¥·¢
ADC1->CR2&=~(1<<11); //ÓÒ¶ÔÆë
ADC1->SQR1&=~(0XF<<20);
ADC1->SQR1|=0<<20; //Ò»¸öת»»ÔÚ¹æÔòÐòÁÐÖÐÒ²¾ÍÊÇֻת»»¹æÔòÐòÁÐ1
ADC1->SMPR1&=~7;//ͨµÀ10²ÉÑùʱ¼äÇå¿Õ
ADC1->SMPR1|=7;//ͨµÀ10 239.5ÖÜÆÚ£¬Ìá¸ß²ÉÑùʱ¼ä¿ÉÒÔÌá¸ß¾«È·¶È
ADC1->CR2|=1<<0; //¿ªÆôADת»»Æ÷
ADC1->CR2|=1<<3; //ʹÄܸ´Î»Ð£×¼
while(ADC1->CR2&1<<3); //µÈ´ýУ׼½áÊø
ADC1->CR2|=1<<2; //¿ªÆôADУ׼
while(ADC1->CR2&1<<2); //µÈ´ýУ׼½áÊø
}
u16 Get_Adc(u8 ch)
{
ADC1->SQR3&=0XFFFFFFE0; //¹æÔòÐòÁÐ1ͨµÀch
ADC1->SQR3|=ch;
ADC1->CR2|=1<<22; //Æô¶¯¹æÔòת»»Í¨µÀ
while(!(ADC1->SR&(1<<1))); //µÈ´ýת»»½áÊø
return ADC1->DR; //·µ»ØADCÖµ
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;u8 t;
for(t=0;t
return temp_val/times;
}
int main(void)
{
u16 adcx,one;float temp;
long int i;
u8 cbuf[12];
u8 dot,j;
u8 x=0;
u8 lcd_id[12];
STM32_Clock_Init(9); //72MHz
uart_init(72,9600);
delay(1000);
LED_Init();
KEY_Init();
LCD_Init();
Adc_Init();
POINT_COLOR=RED;
sprintf((char *)lcd_id,"LCD ID:%04X",lcddev.id);
LCD_ShowString(60,50,200,16,16,"Mini STM32");
LCD_ShowString(60,70,200,16,16,"ADC TEST");
LCD_ShowString(60,90,200,16,16,"mailto:ATOM@ALIENTEK");
LCD_ShowString(60,110,200,16,16,"2014/3/9");
POINT_COLOR=BLUE;
LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");
LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");
while(1)
{
adcx=Get_Adc_Average(ADC_CH10,10);
LCD_Show2Num(156,130,adcx,4,16,0);
temp=((float)(adcx))*(3.3/4096.0);
sprintf(cbuf,"%.3lf",temp);
for(i=0;i<12;i++)
{
j=cbuf;
if(j==0)
break;
}
dot=i-6;
for(i=dot;i<6;i++)
{
cbuf=cbuf[i+1];
}
LCD_ShowString(156,150,200,16,16,cbuf);
delay_ms(250);
//for(i=0;i<3000000;i++);
}
}
效果图:
|