STM32F4'ü C# ile programlama

Başlatan memo333, 26 Nisan 2012, 22:56:24

memo333

Merhaba,

.NET MicroFramewrok Microsot'un WinCE gibi yüksek donanım gereksinimi duymadan, MMUya sahip olamayan mikrokontrolcülere C# ile kod yazabilmeye imkan veriyor. Birçok standart donanımı destekliyor.(I2C, SPI , CAN vs.) ayrıca birçok değişik destekte veriyor XML desteği gibi. Mesel TCP/IP ve USB desteği olan bir projeyi kolaylıkla yazabiliyorsunuz. tabii eksiklikleri de var.

Neyse çok fazla uzatmayalım bunlar zaten buranın konusu değil.

GHI Electronics,  .Net MF'yi STM32f4'e open source olarak port etmiş ve kendileride satıyorlar(http://www.ghielectronics.com/catalog/product/349) ve birkaç modifikasyon ile elimizdeki STM32F4 boardlarla da uygulanabiliyor.

Öncelikle Donanımsal modifikasyonlar:

1-R68 direncini sökün. (ST-LINK çalışmaya devam ediyor)
http://wiki.tinyclr.com/index.php?title=File:FEZCerberusDiscoveryR68.jpg
2-8Mhzlik kristali 12MHz lik kristal ile değiştirin.
http://wiki.tinyclr.com/index.php?title=File:FEZCerberusDiscoveryX2.jpg
3-(Opsiyonel ama yapın) PA9 ile +5V pinlerini bir kablo ile lehimleyin.
http://wiki.tinyclr.com/images/thumb/f/fb/FEZCerberusDiscoveryVDD.jpg/200px-FEZCerberusDiscoveryVDD.jpg

Resimler ve orjinal anlatım için
http://wiki.tinyclr.com/index.php?title=FEZ_Cerberus_Firmware_On_Discovery

4-En Son olarak bir jumper ile BOOT0 ve VDD'yi kısadevre edin. Bu sayede STM32 USB'den HEX kod yüklemenize izin veren DFU moduna geçecek.
http://wiki.tinyclr.com/index.php?title=File:FEZCerberusDiscoveryBOOT0.jpg

5-(opsiyonel) tembellik etmeyin, Adamlar ne yazıyorsa tek tek okuyun sonra benim gibi "lan bu niye çalışmıyor" diye yarım saat aranırsınız.

Artık işimiz yazılımsal, önce stm32 içine bir bootloader yükleyeceğiz daha sonra sadece microusb kablosu ile programlarımızı VS altından yükleyebileceğiz.

1- STDFU'yu indirin ve kurun. http://www.ghielectronics.com/downloads/Gadgeteer/Mainboard/Cerberus/STM_DFU.zip

2- Bootloder'ı indirin(cerberus.dfu). http://www.ghielectronics.com/downloads/Gadgeteer/Mainboard/Cerberus/Cerberus.dfu

3- STDFUTester Programını açın. Şöyle birşey görüyor olmanız lazım http://wiki.tinyclr.com/images/thumb/8/8e/DFU-01-a-b.png/642px-DFU-01-a-b.png

4- Protokol Sekmesine geçin ve

a. "Create from Map" butonuna basın.
b. "Erase" seçin ve "Go" butonuna basın böylelikle Stm32nin Flash belleği silinecek.

http://wiki.tinyclr.com/images/thumb/7/77/DFU-05-a-b-c.png/200px-DFU-05-a-b-c.png

5- Aynı Sekmeden

a."Load DFU file" deyin ve indirdiğimiz DFU dosyasını seçin.
b."Download" u seçin (upload değil) ve "Go" butonuna basıp Bootloader'ı yükleyin.

http://wiki.tinyclr.com/images/thumb/2/27/DFU-03.png/200px-DFU-03.png

6- Artık DFU durumunda kalmamıza gerek yok bu yüzden Jumper'ı sökün(yarım saatiniz gitmesin)

7-Şimdi yaptığımı işlemi kontrol edelim. MFDeploy'u indirin ve programı açın. http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=5475

8-"Device" olarak USB seçin muhtemelen FEZ Cerberus Bootloaderı görecektir. Ping tuşuna bastğında size "TinyCLR" olarak cevap verecektir.
başka bir cihaz için örnek resim http://wiki.tinyclr.com/images/thumb/b/bb/Start07.jpg/400px-Start07.jpg

Bu sayede STM32F4 boardumuz için yazılımsal ve donanımsal işlemleri bitirdik. Sıra Geldi PC tarafına...

1- VS2010 Express C# indirin ve kurun.

2- .NET MF 4.2 SDK'yı indirin ve kurun. (4.1 çalışmaz)

3- C# altında yeni bir .NET MF "Console Application" oluşturun.

3.5- C# altında "Tools->Settings->Expert Settings" seçin ileride işimize yarayacak.

4- "View->Output"  program çıktılarını görmemize yarar. VS bazen kendisi kapatıyor bu yüzden arasıra açmanız gerekebilir.

5- "Project->Properties" altından açılan pencerede  ".NET Micro Framework" sekmesine geçin ve "Emülatörü" seçin.

using System;
using Microsoft.SPOT;
namespace MFConsoleApplication1
{
  public class Program
  {
    public static void Main()
    {
      Debug.Print("Amazing!");
    }
  }
}


yukarıdaki kodu bir derleyin.

6-Output bölümünde Amazing! yazarsa .net MF kurulmuş demektir. İsterseniz BreakPoint koyup F11 ile debug yapabilirsiniz.

http://wiki.tinyclr.com/index.php?title=File:Start05.jpg

7- "Project->Properties" altından açılan pencerede  ".NET Micro Framework" sekmesine geçin ve bu sefer Transport olarak "USB" seçin. Muhtemelen Device olarak FEZ Cerberus gibi bişey yazacak.

başka bir cihaz için örnek http://wiki.tinyclr.com/images/8/8c/Start08.jpg

8- Şimdi derlediğiniz zaman kodunuz stm32ye yüklenecek ve Output bölümünden artık stm32nizden gelen cevapları alacaksınız.

OLASI BİR HATA;

Bazı namespaceler projenize yüklenmemiş olabilir ve siz şu tip bir derleme hata kodu alabilirsiniz.

http://wiki.tinyclr.com/images/5/53/CS1_04.jpg

Bu durumda yapmanız gereken ilgili namespace'i şu şkeilde yüklemektir.

Sağ taraftaki proje bölümünden "References" sağ klik ve "Add Reference "

http://wiki.tinyclr.com/images/c/c4/CS1_05.jpg

.NET sekmesi ve ilgili NameSpace işaretlenir

http://wiki.tinyclr.com/images/thumb/b/be/CS1_06.jpg/400px-CS1_06.jpg

Şimdilik bu kadar LEd yakıp Söndürmeyi yarın anlatmaya çalışıcam.

İyi çalışmalar....

Kaynaklar:

* http://wiki.tinyclr.com/index.php?title=Firmware_Update_FEZ_Cerberus
* http://wiki.tinyclr.com/index.php?title=First_Project
* http://wiki.tinyclr.com/index.php?title=FEZ_Cerberus_Firmware_On_Discovery
Gömülü Linux Notları --> http://linuxedu.xyz/

CLR

Tebrikler, güzel çalışma olmuş
Knowledge and Experience are Power

mcan

bu netmf e driver nasil eklenir?

alisoy

R68 direncini soktukten sonra yine eskisi gibi kart programlanabiliyor mu?yani iki şekilde de calısmak istenirse?

memo333

Alıntı yapılan: mcan - 27 Nisan 2012, 07:38:09
bu netmf e driver nasil eklenir?

aslında driver ekleme olayı biraz değişik. sonuçta .net mfnin kendi driverları var bunların port edilmesi gerekiyor...

http://www.ghielectronics.com/downloads/FEZ/Beginners%20Guide%20to%20Porting%20NETMF.pdf

öte yandan cihaz ekleme olayı da şurada arkadaşlar RF433 kiti ile ilgili class yazmışlar....

http://wiki.tinyclr.com/index.php?title=FEZ_RF433

buda native kodlama ile ilgili

http://wiki.tinyclr.com/index.php?title=Register_Access_-_Managed_Drivers
Gömülü Linux Notları --> http://linuxedu.xyz/

memo333

Alıntı yapılan: alisoy - 27 Nisan 2012, 08:29:37
R68 direncini soktukten sonra yine eskisi gibi kart programlanabiliyor mu?yani iki şekilde de calısmak istenirse?

denemedim :D vaktim olunca denerim...
Gömülü Linux Notları --> http://linuxedu.xyz/

kantirici

Güzel yazı olmuş teşekkürler.Peki c#ın tüm nimetlerinden yararlanabiliyormuyuz mesela thread oluşturmak gibi?

mcan

Hepsi kendi kartina gore library yapmislar fez ,ghi, netduino fakat nasil yapilir kismini goremedim.Mesela can normalde netmf de yok ancak kendileri nasil eklemis hangi noktada eklemis adim adim anlatan bir dokuman bulamadim.elinde olan varmi?

memo333

Alıntı yapılan: alisoy - 27 Nisan 2012, 08:29:37
R68 direncini soktukten sonra yine eskisi gibi kart programlanabiliyor mu?yani iki şekilde de calısmak istenirse?

st-link çalışıyor...
Gömülü Linux Notları --> http://linuxedu.xyz/

memo333

Alıntı yapılan: kantirici - 27 Nisan 2012, 09:22:57
Güzel yazı olmuş teşekkürler.Peki c#ın tüm nimetlerinden yararlanabiliyormuyuz mesela thread oluşturmak gibi?

böyle bişey buldum ama denemek lazım...

http://www.uerkal.com/Posts/MFThreading.aspx
Gömülü Linux Notları --> http://linuxedu.xyz/

memo333

Alıntı yapılan: mcan - 27 Nisan 2012, 22:07:51
Hepsi kendi kartina gore library yapmislar fez ,ghi, netduino fakat nasil yapilir kismini goremedim.Mesela can normalde netmf de yok ancak kendileri nasil eklemis hangi noktada eklemis adim adim anlatan bir dokuman bulamadim.elinde olan varmi?

http://www.ghielectronics.com/downloads/FEZ/Beginners%20Guide%20to%20Porting%20NETMF.pdf

kendi kartlarını hacklemişler ve yeni bir portasyon yapmışlar...
Gömülü Linux Notları --> http://linuxedu.xyz/

memo333

Pekala Şimdi birde LED yakalım...

Pin Hesaplaması şekilde:

Alıntı Yap***NOTE*** The CPU.Pin convention is 0~15 for each port. PA5 is (CPU.Pin)5 whereas PB5 is (CPU.Pin)16 + 5 and PC5 is (CPU.Pin)32 + 5.

Kartlarımızda Ledler PD12/13/14 olduğu için bizim için hesap (3*16 + 14) yada (48+14) olacak.

Önemli : Derleme sırasında Referans Hatası verecektir. "Microsoft.SPOT.Hardware" Referansını Projenize eklemeyi unutmayın...

Aşağıdaki program PortD.14 teki ledi yakacaktır.

using System;
using Microsoft.SPOT;
using System.Threading;
using Microsoft.SPOT.Hardware;

namespace MFConsoleApplication1
{
    public class Program
    {
        public static void Main()
        {
            Debug.Print("Amazing!");
            OutputPort LED;
            LED = new OutputPort((Cpu.Pin)(3*16 + 14), true);

            Thread.Sleep(Timeout.Infinite);
        }

    }
}
Gömülü Linux Notları --> http://linuxedu.xyz/

SERRO EFE

Hocam bilgiler için teşekkürler denedim çalıştırdım ama küçük bi sıkıntı var gibi
Thread.Sleep(1500); komutuyla gerçek uygulamadaki süreler tutmuyor. Yaklaşık 2 kat uzun gibi

memo333

Alıntı yapılan: SERRO EFE - 30 Nisan 2012, 13:09:00
Hocam bilgiler için teşekkürler denedim çalıştırdım ama küçük bi sıkıntı var gibi
Thread.Sleep(1500); komutuyla gerçek uygulamadaki süreler tutmuyor. Yaklaşık 2 kat uzun gibi

port işlemi daha beta aşamada belki ondan kaynaklanan bir hata olabilir. forumlarında sormak lazım. birde şu portasyon işini öğrenmek.

ales nedeniyle fazla yüklenemiyorum bu konuya....
Gömülü Linux Notları --> http://linuxedu.xyz/