STM32F103C8T6 CUBE MX VE KEIL5 DERS3 TEK KANAL ADC ve FLASHI EEPROM OLARAK KULL

Başlatan skara1214, 25 Şubat 2017, 10:08:19

skara1214

3. ders hayırlı olsun
https://youtu.be/YZUs9sRoRTg
//////FLASH EEPROM PROGRALAMA /////
#define x_zorlama_sivi_seviye    	epprom_sabitleri[0]
#define x_zorlama_pozisyon		    epprom_sabitleri[1]
#define y_zorlama_sivi_seviye    	epprom_sabitleri[2]
#define y_zorlama_pozisyon		    epprom_sabitleri[3]
uint16_t epprom_sabitleri[500],i=0;
#define EEPROM_START_ADDRESS ((uint32_t)0x0801F800) //126. page

uint16_t Read_Flash(uint32_t  adr)
{
  uint16_t * Pntr = (uint16_t *)adr;
  return(*Pntr);  
}
///////////////// FLASH KILIDI AÇMA ALT PROGRAMI /////////////////////    
void Unlock_Flash (void)
{
  FLASH->KEYR=0x45670123;  //Flash kilidini açmak için FLASH->KEYR registerine KEY1 ve KEY2 sirayla yazilmalidir
  FLASH->KEYR=0xCDEF89AB;
}
///////////////// FLASH KILITLEME ALT PROGRAMI ///////////////////// 
void Lock_Flash (void)
{
  FLASH->CR=0x00000080;  //FLASH_CR registeri resetlendiginde FLASH kiltlenmis olur
}
//////////////// ISTENILEN ADRESTEKI VERIYI FLASHTAN SILME ALT PROGRAMI //////
void Erase_Flash (uint32_t adr)
{
  FLASH->CR|=0x00000002;            //PER enable
  FLASH->AR=adr;                    //FLASH->AR registerine silinmek istenen adres yazilir
  FLASH->CR|=0x00000040;            //STRT anable
  while((FLASH->SR&0x00000001));    //Islem bitene kadar bekle(BUSY kontrol ediliyor)
  FLASH->CR &= ~0x00000042;         //FLASH->CR ilk durumuna aliniyor (kilit hala açik!) 
}
///////////////// ISTENILEN ADRESE VERI YAZMA ALT PROGRAMI /////////////////////
void Write_Flash (uint32_t adr, uint16_t data)
{
  FLASH->CR|=0x00000001;           //PG enable
  *(__IO uint16_t*)adr = data;     //istenen adrese istenen data yaziliyor
  while((FLASH->SR&0x00000001));   //Islem bitene kadar bekle(BUSY kontrol ediliyor)
}
void epprom_yaz()
{
    Unlock_Flash();
    Erase_Flash(EEPROM_START_ADDRESS); 
    for(i=0;i<=499;i++)
    Write_Flash(EEPROM_START_ADDRESS+(uint32_t)(i*2),epprom_sabitleri[i]);
    Lock_Flash(); 
}	

void eeprom_oku()
{
for(i=0;i<=499;i++)
epprom_sabitleri[i]= Read_Flash(EEPROM_START_ADDRESS+(i*2));
}


uint16_t sonuc_adc;
void ADC_CALIBRATION()
{  
ADC1->CR2|=0x00000001;//adc yi  baslat
ADC1->CR2|=0x00000008;//adc reset calibration yap
while(ADC1->CR2&0x00000008);//reset calibration olana kadar bekle
ADC1->CR2|=0x00000004;//adc calibrationi baslat
while(ADC1->CR2&0x00000004);//adc calibre olana kadar bekle
ADC1->CR2|=0x00000001;//adc yi aktif et !!!burada bir daha start verilmesse dma aktif olmuyor!!
}
Herkes ölür ama herkes gerçekten yaşamaz

mr.selim

Hocam elinize sağlık. Videolarınızı takip edicem ama kime hitap ediyor? Bilene mi bilmeyene mi yoksa yeni öğrenenlere mi. Ben daha yeni stm e geçmeyi düşünüyorum da ne dersiniz bu konuda ?

skara1214

hocam eğer hiç progralama yapmadıysanız videolarım size çok hitap etmez. Ama arduino ,pic v.s. ile uğraşıp , uart , adc ,spi ile ilgili bilginiz varsa ve arm kullanmak istiyorsanız o zaman faydası dokunur
Herkes ölür ama herkes gerçekten yaşamaz

mr.selim


yldzelektronik

Emeğinize sağlık.

Bir sorum var.FLASH programlar iken bir word (32bit alana) alana yazmak istediğimde yalnızca o alanı silip tekrar yazmam yeterli midir?Yoksa o adresin bütün page ini silip tamamını tekrar yazmam mı gerekir?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

skara1214

Herkes ölür ama herkes gerçekten yaşamaz