STM32F10X Çalışmalarım

Başlatan Mucit23, 12 Mart 2012, 11:17:48

Mucit23

#75
Teşekkürler hocam. Oldu şimdi.

mesaj birleştirme:: 26 Kasım 2012, 17:20:38

Hocam Sayenizde PWM, Timer ve SPİ gibi donanımların kullanımını öğrendim. Sıra Geldi I2C ye.

Hedefim I2C ile Deney kiti üzerindeki ivme sensörünü okumak. İvme sensörü olarak LIS302DL kullanılmış. Discovery kitlerin üzerindekilerle aynı fakat discovery kitlerde işlemciye SPİ ile bağlanmış. Bendekinde I2C hattına bağlanmış. I2C ile ilgili örnek bir uygulama gösterebilirmisiniz

Mucit23

Arkadaşlar Merhaba ARM ye devam..

DS1302 için kullandığınız önerebileceğiniz bir kütüphane varmı?

Mucit23

#77
Arkadaşlar merhaba

bugün eskiden başka bir bilgisayarda çalıştığım bir keil projesini açıp derlemeye çalıştım. Fakat bazı hatalar alıyorum.

pic upload

Projeyi derlerken ilk başta resimde gördüğünüz hatanın aynısını verip stm32f10x_lib.h dosyası yok diyordu. Bu dosyayı internetten bulup Keil>>ARM>>INC>>ST>>STM32F10X klasörü içerisine kopyaladım. Derlemeye çalıştığımda bu sefer stm32f10x_lib.c dosyası yok dedi. Aynı işlemleri bu dosya içinde yapıp derlediğimde bu sefer map.h dosyası yok dedi. Bunuda bulup aynı yere kopyaladım. Bu sefer resimdeki gibi stm32f10x_conf.h yok diyor. Bu böyle sonsuza kadar gidecek diye düşünmeye başladım. Acaba problem ne olabilir?

Geçenlerde keili güncellemiştim. 4.60 versiyonuna yükselttim ama eski versiyonu silmeden üzerine yüklemiştim.

edit; Sorun çözülmüştür. Sanırım güncelleme ile birlikte tüm kütüphane dosyaları silinmiş..

erolca

#78
Merhaba,
Eski dosyalarınızı backup dosyasının içinden çekebilirsiniz.
Güncelleme esnasında Keil, Keil klasörüne Backup.001 şeklinde klasör oluşturup içine atmakta..
eroool

Mucit23

Arkadaşlar STM32F107 de dahili eepromu nasıl kullanırım. Bu konuda fazla örnek yok malesef

eeproma 16 bitlik datalar yazıp okumak istiyorum

camby

Dahili EEPROM yok diye hatırlıyorum , sadece low power modellerde vardı

Mucit23

Hocam eepromun bulunmaması çok kötü benim için Flash hafızayı kullanmam gerekiyor. Bu konuda bilginiz varmı? harici eeprom kullanmadan ramdeki bazı değerleri nasıl saklarım?


camby

Bir de battery backup memory olacaktı , pil olduğu sürece canlı tutulan bir RAM alanı var. Yazma/okuma sınırsız.

Mucit23

Alıntı yapılan: gerbay - 22 Ocak 2013, 14:07:06
hocam "mesela" şöyle bir yol izleyebilirsiniz;

MCU nun kendi flash ının en üst bölgesindeki ihtiyacınızı görecek kadar alanı bu iş için ayırın, flash ın boyutu o kadar daha az gibi düşünüp programlarken o kısmın üzerinde yazılmasına izin vermeyin. Kendi yazılımınızda flash ınızın o bölgesine istediğiniz gibi yazıp çizin..

Normal MCU nun içindeki NOR flash dan bahsediyorum.

ST nin AN3226 sına bir göz atın..

Hocam bakayım dediğinize

Sistemde CR2032 saat pili var. Bu pili Vbat girişine bağlarsam değişkeler silinirmi? Silinmemesi için ne yapmalıyım?

Mucit23

Timer1 konusunda anlamadığım bazı terimler var.

Timer1 kesmesini kurmak için timer 1 sayacını aşağıdaki kodlarla set ediyorum.

void setTimer1(u32 period,u32 prescaler,u32 clockdivision){
	
		TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
		/* TIM1 clock enable */
  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); 
		/* TIM1 ayarlari */
  	TIM_TimeBaseStructure.TIM_Period = period;
  	TIM_TimeBaseStructure.TIM_Prescaler = prescaler;
  	TIM_TimeBaseStructure.TIM_ClockDivision = clockdivision;
  	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
 
  	/* TIM1 güncelleme kesmesi aktif */
	   TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
	
			/* TIM1 sayici aktif */
			TIM_Cmd(TIM1, ENABLE);
}


Timer1 Periyot ve prescaller terimleri anlayamadım. Bu terimlerle neyi değitiryorum. Mesela 1 saniyede oluşacak timer1 kesmesi sayısını arttırmam için ne yapmam gerekir?


Mucit23

Merhabalar hocam.

STM32F107 nin usartında problem yaşıyorum. Usart Donanımı yanlış fakat Benim Data gönderme fonksiyonumda terslik var.

Data göndermek için basitçe şöyle bir fonksiyon hazırlamıştım

void Send_Data(char data){
		USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
	//USART1 kanali reset durumunda degilse
	if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
  {
    USART_SendData(USART1, data);
    USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
  }
}


1 Byte datayı bu şekilde problem olmadan gönderiyorum. Ama mesela bir diziyi gönderecem Dizinin her bir elemanını gönderdikten sonra araya delya koymasam dizideki datalar yarım yamalak gidiyor.  Mesela şöyle birşey yaptım.

  while(1){

       Send_Data(char_data1[x]);
       x++;if (x>149){x=0;}
			 delayMs(1);
 }


1ms delay koymasam usart modülü sanırsam işlemci hızına yetişemiyor olacakki dataların bazılarını gönderemiyor yani saçmalıyor.

Bu arada 115200 baudrate ile haberleşiyorum

Benim Tahminim şöyle. Usartın bir adet TX bufferi var.

USART_SendData(USART1, data);

Biz bu komutla elimizdeki datayı bu buffere yerleştiriyoruz ama demekki buffer boşalmadan bizim main programımız buraya bir data daha yerleştiriryor. Dolayısıyla program saçmalamaya başlıyor.

Bu iş için Data gönderme fonksiyonuna bir Status biti koymalıyım. Usart Bufferi boşalmadığı sürece bu fonksiyon bana 0 gönderecek. boşaldığı zaman status bitini 1 yapıp bana geri dönecek. Bende böylece gönderme işleminin tamamlandığını anlayıp bir sonraki paketi göndereceğim.

Bu işlemi nasıl yaparım?

yldzelektronik

#86
Bu işi dmaya ihale etsen?Bak bir şey buldum işine yarar mı bilmem :)

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf

Sayfa 784 den itibaren bir şeyler anlatıyor ama sana  yarayacak mı?

Ekleme:İleriki sayfalara baktım da şimdi.Bir de transmit data registery empty kesmesi var?

Bir de aşağılarda bir tablo var.Dma usart5 ile kullanılamıyor sanırım.Ben mi yanlış anladım..

Alıntı YapBu iş için Data gönderme fonksiyonuna bir Status biti koymalıyım. Usart Bufferi boşalmadığı sürece bu fonksiyon bana 0 gönderecek. boşaldığı zaman status bitini 1 yapıp bana geri dönecek. Bende böylece gönderme işleminin tamamlandığını anlayıp bir sonraki paketi göndereceğim.

Bu işi yapabileceğini hissettiğim status reg var (usart_sr) 7. bitini sorgulayınca tx bufferın durumunu görüntüleyebiliyormuşsun.
6. bitte ise aktarımın durumunu sorgulayabiliyormuşsun.Metinleri çok okumadım belki de yanılıyorumdur.İdare et artık.

Bak kurcaladıkça çıkıyor arkadaş :) Dma daha ileriki kontrol reglerde.Onlara da bakabilirsin aslında.Neyse faydalı olur inşallah.Beni de bilgilendirirsen ben de hatalarımı göreyim..
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

GreeN

#87
USART register'lerinde status register'inde (USART_SR) TC biti transfer bittiğinde 1 değerini alıyor. Transfer sürerken 0 değerinde.

Sıralı gönderirken , gönderimin arakasına aşağıdaki eklenebilir. Registeri belirtmek için USART->SR->TC yazdım keilde karşılığı nedir onu eklersiniz.

Send_Data(char_data1 [ x ] ) ;
While(USART->SR->TC); //transfer bitene kadar bekle
Terörü Lanetliyoruz.

SERRO EFE

#88
@Mucit23 usartın Tx interrupt enable özelliği vardır. Bunu kurarak her bir byte gönderiminde sana ben bir byte veri gönderdim diyerek kesme oluşturur. @Klein hocamın forumda bir örneği mevcut. https://www.picproje.org/index.php/topic,43436.msg316773.html#msg316773 Buradan daha detaylı öğrenebilirsin.

Mucit23

Şimdilik status registerine bakarak hallederim ama Dma kullansam  super olacak. Usart ın yanında dma kullanımını da öğrenmiş olurum. Yarın bunun üzerine çalışayım biraz.