Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Stm32l051c6t6 problemleri

Başlatan yldzelektronik, 25 Mart 2015, 15:47:48

yldzelektronik

Merhaba,

Stm32l051c6t6 ile yaptığım devrede programlama için swd pinlerini kullanmak üzere ayırdım. Şimdi devreyi dizmeye başladım.Ancak ne jlink ile st link ile mcuya erişemiyorum.Hem keilde hem stlink utulity ile deniyorum.Görmüyor mcuyu.
Sebebi ne olabilir?Keil 5.11a ile ilk kurulumdan sonra debug ayarlarına girdim.Bu mcu için elle seçmek istermisiniz bu versiyonda vs gibi şeyler söylüyor.Elimdeki jlink standart olandan.Yazılımı da 4.50.




Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Sepiroth

Selamlar hocam, st link tam olarak ne hatasi veriyor? Bir de ben SWD icin reset pinini kullanmiyorum, reset pinin baglantisi ile ilgili bir sorun olmus olabilir mi?
Either you feel it, or not...

CoşkuN

Keil'de SWD/ JTAG seçimi vardı ondan olabilir mi?

X-Fi

Hocam keil 5.13 ve sonrası bir versiyona geçin bu sayede ücretsiz dağıtılan floating lisansı kullanabilirsiniz. Sizdeki versiyon desteklemiyor olabilir yada gerektiği gibi kıramamışsınızdır.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

yldzelektronik

Sorunu hallettim.Çok beklemediğim yerden çıktı. Regülatörü dizmemiştim.Dizdikten sonra düzeldi.Yanlız power vermesem de görüyor.

Şimdi başka bir sorum var.Mcu üzerindeki eepromu yazmak için fonksiyon var da nasıl okuyacağım?Hal library kullanıyorum. Siz nasıl yapıyorsunuz?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Arkadaşlar bir şey sormak istiyorum. Bu kez muhtemelen Keil ile ilgili. Keil 5.11 ile ilgili. Kullandığım denetleyici aynı.Stm32l051c6t6.

CubeMx ile kodları oluşturdum.Hal library kullanıldığı aşikar.
Oluşturulan MX_GPIO_Init diye isimlendirilmiş fonksiyonları sildim ancak fonksiyon içeriklerini alıp kendi fonksiyonuma kopyaladım.Bazı koşullamalara bağlı olarak değiştirebilmek istedim.
Yani Board_Init.c isimli bir dosya oluşturup orada void GPIO_Init(void) isimli fonksiyona cubemx'in mx_gpio_init isimli fonksiyon içeriğini yapıştırdım. Daha bir çok kod var.Ancak sorun diğer kısımlara gelmeden başlıyor.

Kodu derliyorum sorun yok. Debuga geçiyorum. Hal_init fonksiyonunu F10 ile geçiyorum.Sıkıntı yok.System_Init di (clock ayarları yapılıyor) adı sanırım.Onu da aynı şekilde F10 ile geçiyorum.Sıkıntı yok. Ancak GPIO_Init fonksiyonunu F11 ile görmek istiyorum.Giriyorum.GPIO_InitStructure var.Std libden de hatırlarsınız.Haldeki de benzeri.Onun elemanlarına atamalarını yapıyor.Nispeten sıkıntı yok.Ancak bu yapıyı HAL_GPIO_Init e parametre geçince sıkıntı başlıyor. Bu fonksiyona da F11 ile giriyorum.Fonksiyonda işini bitirip ayrılacakken, fonksiyonun son satırındaki süslü parantezden sonra debug devam etmiyor.Sanki adım adım koşturmayı bırakıp kendim Go demişim gibi davranıyor.Ancak Sol üstteki go butonu basılmamış ve basılmaya hazır duruyor.

Go ya basıyorum.Stop a basıyorum.Device not stop gibi bir şeyler söyleyip hata veriyor.Haliyle debug sonlanıyor.Çok zorladığım zaman hardfault_handlerda son buluyor iş.

Ben bu duruma spi ile uğraşırken geldim.Spi a veri yazan fonksiyonlarım vardı.Spi sürekli error ile dönüyordu.Hatta çoğunlukla geri bil dönmeden hardfault a düşüyordu.

Ama şunu da yaşıyorum sürekli.Eğer hiçbir fonksiyonu f11 ile takip etmez, her fonksiyonu f10 ile geçersem sorun olmuyor.yine spi veri yazmıyor okumuyor ama hardfault handler olmuyor.

Ben bu sorunu F4 ile uğraşırken de çok kez yaşadım.Bu durum keilin bir olayı mı?

Bazen oluşturduğum struct elemanlarına değer atadığım fonksiyonlarda debug ekranında bütün satırları debug etmiyor.Bazı satırlarda iki kez F11 yaptırıp altındakini atlatabiliyor.Hadi bu optimizasyondur diyelim.Peki bu durum nedendir?

Benimle mi ilgilidir?Mcu ile mi?

Bu arada Eeprom olayını hallettim.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

#6
Merhabalar,

Aynı denetleyiciyle bir yerde tıkandım.Spi ile veri yazmaya çabalıyorum.Kütüphane HAL.

Bir şekilde olmaması gereken şeyler olup, debugda program çöküyor.Bilmediğim bir yerde program çakılıyor.

Programın nerede çakıldığını buldum. Main içinde;

write_multi(SendingPacket, 1, 1); çağırıyorum.O da;

while( ! ( get_status() & ( _BV(TX_DS) | _BV(MAX_RT) ))) ; çağırıyor. get_status;

uint8_t get_status(void){
  return spiTrans(NOP);
}
dan ibaret. spiTrans ise;

uint8_t spiTrans(uint8_t cmd){
  uint8_t status;
	
	nRFCSN_State(LOW);
	if(HAL_SPI_TransmitReceive(&hspi2, &cmd, &status, 1, 1) == HAL_OK){//Burada program çakılıyor.
		NetworkSettings.OpErr = OKNoSpiError;
		nRFCSN_State(HIGH);
		return status;
	}else{
		NetworkSettings.OpErr = SpiReadWriteError;
		nRFCSN_State(HIGH);
		return 0;			
	}
}

Program transmitereceive çağrısında çakılıyor.Gittiği yer ise startup dosyasındaki şu satır;

I2C2_IRQHandler
SPI1_IRQHandler
SPI2_IRQHandler
USART1_IRQHandler
USART2_IRQHandler
LPUART1_IRQHandler

                B       .------------------------------------------------->Programı stop ettiğimde burayı gösteriyor.

                ENDP

                ALIGN

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
                 IF      :DEF:__MICROLIB
                
                 EXPORT  __initial_sp
                 EXPORT  __heap_base
                 EXPORT  __heap_limit
                
                 ELSE
                
                 IMPORT  __use_two_region_memory
                 EXPORT  __user_initial_stackheap


spitrans fonksiyonunu 3 4 fonksiyonunun çağrısından sonra main içinden çağıran fonksiyon var.Ama onda çakılmıyor.Herşeyden evvel şustartup dosyasındaki B   . ne?bir çeşit handler falan mı?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

#7
Pek cevap verilmemiş ama yine sorayım.

Bir önceki mesajımdaki sorunu yaşamaya devam ediyorum. Durumu gösteren video çektim. Sorunun çözümüne ilişkin ne yapılabilir?Aslında sorunun ne olduğunu çok daha fazla merak ediyorum.

Videoda gösterdiğim kısmın (startup dosyasındaki B li kısım) ne olduğunu çok merak ediyorum.

Edit: Proje dosyaları burada. İçerisinde kullanmadığım dosyalar da var.:

https://drive.google.com/file/d/0BxS9lo0yCui7U3c0Z1NQRGt6MTg/view?usp=sharing

http://www.dailymotion.com/video/x2p5aal
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

CLR

@yldzelektronik

Anladığım kadarıyla sorunun interrupt ile alakalı görünüyor. Büyük ihtimalle yanlış interrupt handler name kullanıyorsun, işlemci o interupt handler'ı (fonksiyon name veya fonksiyonun kendini) bulamadığı için assembly branch işleminde "B ."  (sonsuz döngü, kendi adresine branch yapar) takılıyor
Knowledge and Experience are Power

yldzelektronik

Alıntı yapılan: CLR - 05 Mayıs 2015, 12:38:10
@yldzelektronik

Anladığım kadarıyla sorunun interrupt ile alakalı görünüyor. Büyük ihtimalle yanlış interrupt handler name kullanıyorsun, işlemci o interupt handler'ı (fonksiyon name veya fonksiyonun kendini) bulamadığı için assembly branch işleminde "B ."  (sonsuz döngü, kendi adresine branch yapar) takılıyor

Sorunun bu olduğunu nasıl kesinleştirebilirim?Hangi interrupt ile alakalı olduğunu nasıl bulacağım?

NVIC i gözlediğimde bişey belli olmuyor?
Edit:Aslında oluyor.Ama NVIC deki register isimlerini ilgili çipin ds veya ref man de bulamadım?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

CLR

#10
Ben olsam önce assembly listesindeki interrupt fonksiyon isimleri ile program içinde kullandıklarım tamamen aynımı kontrol ederdim, veya interrupt tanımlayıp bir handler yazmadıysan ondanda kaynaklabilir, 

Bulamazsam sırasıyla interruptları açıp denerim, hangisini açtığında kitleniyorsa onunla ilgili fonksiyon eksik veya yanlıştır.

mesaj birleştirme:: 05 Mayıs 2015, 12:57:19

NVIC'te olabilir ama orada doğrudan açık olarak şu interrupt yazmaz(core registers olduğu için), sadece bit sırasını öğrenip, interrupt'ı sıraya göre kendin bulman gerekir.
nvic Registerleri için arm cortex M0 user/programming guide'a bakman lazım
Knowledge and Experience are Power

yldzelektronik

Hocam çok sağol ya.startup dosyasındaki bütün handler lar için fonksiyon tanımladım.

Çakılan yerde durdurdum.Sorun yine çok ama çok basit bir yerden çıktı.

Gpio interrupt tanımlamıştım.Aslında handleri de vardı.

Ama isim yanlışlığından kaybetmişim.7 nolu pin için EXTI4_15_IRQn şeklinde tanımlama var.

Yani 4 den 15. pine kadar bakacağız hangisinden intr geldiğine.Benim anladığım bu.Şimdi sorun çözüldü.

Çok sağol.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.