22 Nisan 2014

ST-LINK "Core is held in reset" Hatası ve Çözümü

Yeni çalışmaya başladığım STM32F103C8T6 denetleyicileri ile bir sorun yaşadım. Chip şeklinde aldığım denetleyiciye kendim bir kart tasarlayıp baskı devresini yaptım. Discovery kartlardan bildiğimiz SWD (Serial Wire Debug) ile bu işlemcileri programlamaya başladım. Discovery üzerindeki jumperı çıkarıp SWD konnektörden kartıma aldığım bağlantılarla programlayıp sorunsuz gerçekleştirmiştim.Fakat sonradan denetleyiciye yazdığım programdaki bir sorun nedeniyle denetleyiciyi programlayamaz oldum. Keil'de Cortex-M3 cihaza ulaşılamıyor şeklinde bir hata verirken, ST-LINK UTILITY programında ise "Core is held in reset" hatası alıyordum. Hiçbir şekilde işlemciye ulaşmak mümkün değildi. Araştırdığım bazı forumlarda NRST pinini çıkardıktan sonra iletişimin gerçekleştiğini yazmışlar fakat bu bende işe yaramadı.
 İşlemciyi kurtarmak için kullandığım yöntem şu şekildeydi;
->Öncelikle işlemciyi herhangi bir program çakılmasından kurtarabilmek için void SystemInit (void) fonksiyonun ilk satırına bir miktar bekleme koymak gerekiyor. İşlemci resetlendikten sonra  SystemInit fonksiyonundan çalışmaya başlıyor. Buraya eklenilen bekleme ile programlayıcıya işlemcimize ulaşması için bir süre tanımış olacağız.
->ST-LINK programı ile bu işi halledebildim. TARGET->SETTING altından Connexion mode seçeneğini "Connect Under Reset" olarak seçtim.
->Daha sonra TARGET-> Automatic Mode yi açtım. Buradan bekleme eklenmiş kodumu seçtim. Full Chip Erase ve Flash Programming seçeneklerini işaretleyip "Start" dedim.
-> Asıl zor kısım burdan sonra başladı. Program işlemciye bağlanmak için bekliyor. Uzun süre bekledikten sonra hata veriyor."Start" dedikten sonra bağlanmaya çalışırken STM32F103'e giden enerjiyi hızlı bir şekilde kesip tekrar bağladım. Bu çok hızlı yapılmalı eğer çok hızlı yapılırsa hiçbir işe yaramıyor, çok yavaş yapılırsa da cihaz bulunamadı hatası veriyordu. Burada sabretmek gerekli işlemciye bağlandığında ST-LINK 'te bağlandığını gösterecektir.Bağlandıktan sonra da bu enerjiyi kesip-verme işlemine devam ettim.Eğer şanslıysanız 5-10 dk içinde sonuç alacaksınız. Benim işlemim saatler sürdü. Fakat bir defa Flash'ı silip yeni programı yükleyebilirseniz işlemciniz kurtuldu demektir. :)
-> Daha sonra bağlantı ayarlarını eski haline getirip normal şekilde bağlanmayı deneyebilirsiniz.


30 Ocak 2014

Microsoft Visual Studio 2010 Ultimate C Kodu Derleme Hatası (lnk1123)

Bugün Visual Studio 2010 Ultimate sürümünde C kodu derlemeye çalışırken aldığım bir hatadan ve çözümünden bahsedeceğim. Bilindiği gibi Visual Studio birçok programlama dili ile programlama yapmamıza izin veriyor. Bunlardan birisi de C dili. Visual Studio ’nun yeni versiyonlarında artık C dili için ayrı bir Template göremesek de bu işlemi C++ Template ’ini seçerek halledebiliyoruz. C++ ile C arasındaki tek fark dosyaların adı olmuş oluyor. C++ .cpp uzantılı dosyalar derleniyor C’ de ise .c uzantılılar derleniyor. Yapmamız gereken tek şey proje oluşturduktan sonra dosya ismini .cpp den .c ye çevirmek.
Benim karşılaştığım hata ise derleme sırasında ortaya çıktı.

Hata şu şekilde:
fatal error lnk1123 failure during conversion to coff file invalid or corrupt 
Hatanın çözümü için nette farklı yöntemler önerilmiş. Service Pack ve add-on güncellemelerinden bahsedilmiş. Benim bulduğum çözüm ise herhangi bir kurulum gerektirmeden ayarlar bölümünden yapılacak bir değişikten ibaret.

Çözüm: Proje açıkken
Project->Properties ->Linker->General sekmesi açılır.
Enable Incremental Linking ->No (/INCREMENTAL:NO) olarak değiştirilir. Uygula ve Tamam tıklandıktan sonra sorun çözülmüştür.


Herkese iyi çalışmalar.

20 Eylül 2012

ARM 'ye Geçiş

  Mikro denetleyici programlamaya herkes gibi Pic'ler ile değilde başka denetleyicilerle başlayan nadir insanlardan birisiyim galiba. Türkiye'yi etkisi altına alan PIC fırtınasına yakalanmadan bu işi öğrenmeye başladığım ilk günden beri epey yol kat ettim sayılır. 16 bitlik MSP430'larla epey haşır neşir oldum. Bir kaç dişe dokunur uygulama da yaptım.Fakat artık bir üst seviyeye geçmenin vakti geldi deyip, şu sıralar herkesin gözdesi olan ARM çekirdekli denetleyicilerle çalışmaya başlamam üzerinden 6 aydan uzun bir süre geçti.STM32F4 Discovery seti artık iyice yakından tanıdığım elimden düşürmediğim bir kart oldu. Hatta üniversitedeki bitirme tezimde de bu kartı kullandım. Tabi iş burada bunlarla bitmiyor.Bu kartla yapılacak daha bir sürü uygulama beni bekliyor. Bu aralar iletişim protokollerini inceleyip bir bir uygulamasını yapmak istiyorum.UART,SPI,I2C,CAN gibi protokolleri bir çok farklı kaynaktan araştırıyorum. Fakat araştırmalarım sonucunda bir eksikliği tamamlamak öncelikli görevim olacak. Bu konulardaki Türkçe kaynak eksikliği büyük sorun.Bulabildiğim yarım yamalak bilgileri düzenleyip uygulamasını yapıp burada paylaşmayı planlıyorum.

 Bu çalışmalar hem benim için güzel bir deneyim, hemde kaynak sıkıntısı çeken arkadaşlar için yardımcı bir kaynak olacağı kanısındayım.

21 Eylül 2011

msp430 Saat Projesi

6 aydır uğraştığım ve öğrenmeye çalıştığım msp430 mikro denetleyicileri ile ilk somut projem ortaya çıktı.Launch Pad üzerinde gelen msp430G2231 i bir saat devresinde kullanmaya karar verdim.Yeni denetleyicilerim geldiği için 2231'i kullanma fırsatım oldu.Denetleyicinin port sayısı az olduğundan ek başka elemanlar kullanarak port sayısını arttırdım.Devre seven segment göstergede saat ve dakikanın gösterilmesinden ibaret.Ayrıca tuş takımıyla saatin ayarlanması yapılabiliyor.


 
Mikrodenetleyici timer sinyalini harici olarak bağladığım bir saat kristalinden alıyor.1 snyeyi hesaplayarak işlemlerini yapıyor.Kristalin sıcaklığına bağlı olarak ürettiği frekans değişebilir ama henüz bunu gözlemlemedim.24 saatten fazla süredir çalışıyor henüz bir sapma yok :-) oldukça güvenilir.




Devre Şeması
Denetleyiciden gelen sinyaller 74LS47 entegresi ile decimale çevriliyor ve böylece 7 çıkış kullanacağımız yerde 4 çıkışla hallediyoruz.Aynı zamanda tarama sinyalleri 74xx139 ile decode edilerek 2 çıkıştan 4 çıkış elde ettik.

TTL entegreler için gerekli olan 5 V 'tu 7805 entegresiyle sağladım.Msp430G2231 ise en fazla 3.6 V ile çalışabiliyor.Ben 3.4 V luk bir regüle devresiyle kararlı bir gerilim elde ettim ve denetleyici bununla besledim.Beslemelere taktığım kondansatörleri büyük seçtim ki bi kaç sn lik kesintilerde devre resetlenmesin.7805 in çıkışına 3300u F, 3.4 V da 500u  F lik taktım.


.

21 Aralık 2010

açılış

blog sayfamı sabahın erken saatlernde açmış bulunuyorum.fırsat oldukça bişeyler eklemeye açlışacağım.çok kullanacağımdan değil sadece geleceğe yönelik olarak bu sayfayı açtım umarım devam ettirebilirim.