7 Ağustos 2014

STM32F030F4P6 Deneme Kartı

Bu yazımda ST firmasının yeni  keşfettiğim bir ARM denetleyicisi  için tasarladığım karttan bahsedeceğim. STM32F030F4P6 isimli işlemci ile ST’den istediğim bir sample paketi ile tanıştım. İşlemci Cortex-M0 ailesine ait. 48 MHz hızında çalışabiliyor. 16 Kbyte flash hazıfaya sahip ve en sevdiğim özelliği 20 pinlik bir kılıfta olması. Küçük uygulamalar için yeterince güzel performans sağlayabilir. Çevresel donanım olarak da yeterince şey sunuyor bize. SPI,I2C,USART,5 adet timer,ADC ve PWM çıkışları mevcut. ADC modülü 12 Bit çözünürlükte ve 9 kanala kadar giriş bağlanabilir.
Şekilde denetleyicinin pin yapısı görülüyor.

Bu denetleyici için bir uygulama kartı tasarlarken dikkat edilecek bazı noktalar var. Bunlar için referans tasarımlara da bakılabilir. Ben de tasarımımı bunlara göre yaptım.
Devre tasarımı :




Baskı devre tasarımı:


Devrenin Fotoğrafları:




Devre şemasını ve baskı devre çizimini buradan indirebilirsiniz.

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.