STM32F4 adc

Başlatan Farukc, 30 Ocak 2014, 14:15:43

Farukc

#include "STM32F4xx.h"

void SystemInit()
{
		unsigned int i;
    (*((int*)0xE000ED88))|=0x0F00000;  
    for (i=0;i<0x00100000;i++);          
    RCC->CFGR |= 0x00009400;         
    RCC->CR |= 0x00010000;        
    while (!(RCC->CR & 0x00020000));
    RCC->PLLCFGR = 0x07405408;   
    RCC->CR |= 0x01000000;     
    while(!(RCC->CR & 0x02000000));   
    FLASH->ACR = 0x00000605;     
    RCC->CFGR |= 0x00000002;      
    while ((RCC->CFGR & 0x0000000F) != 0x0000000A); 
	
	
	
    RCC->AHB1ENR |= 0x0000000F;    // GPIO A,B,C,D clock'u aktif edelim 
    GPIOD->MODER = 0x55555555;     // GPIOD nin 15, 14, 13, 12 pinleri cikis tanimlandi (LEDler icin)
    GPIOD->OSPEEDR= 0xFFFFFFFF;   // GPIOD nin tum cikislari en yuksek hizda kullanacagiz 
		
} 


void ADC_Setup(void)
    {
    GPIOC->MODER=0x00000C00;           //Port C5 analog giris
    RCC->APB2ENR|=0x00000100;          //ADC1 ON
    ADC1->CR1|=0x02000000;           
    ADC1->SMPR2=0x00000007;           
    ADC1->SQR1=0x00000000;             
    ADC1->SQR3 |= 0x0000000F;          
    ADC->CCR|=0x00030000;              
    ADC1->CR2|=0x00000001;             

    }

uint8_t ADC_Read(void)
{
  ADC1->CR2|=0x40000000;         //ADC aktif
  while(!(ADC1->SR & 0x00000002)); //Cevrim bitene kadar bekle
  return ADC1->DR;
  
}

int main()
{
     ADC_Setup();
     while(1)
      {
        float sonuc=ADC_Read() * 0.01160784314;        
        if(sonuc<1) GPIOD->ODR=0x00001000;
        if(sonuc>1 && sonuc<2)GPIOD->ODR=0x00002000;            
        if(sonuc>2 && sonuc<3)GPIOD->ODR=0x00004000;            
        if(sonuc>3)GPIOD->ODR=0x00008000;
            
       }
}


Arkadaşlar böyle bi uygulama yaptım fakat voltajı tam olarak doğru ölçmüyor. Kodda hata varmı?

Farukc


camby

Faruk ADC ile ilgili çok örnek var , hepsini inceledin mi tek tek ?

Farukc

Keil ile ilgili adc örneği göremedim. Link varsa atarsanız gerçekten çok iyi olur. ;D


Klein