Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: memo333 - 26 Nisan 2012, 22:56:24

Başlık: STM32F4'ü C# ile programlama
Gönderen: memo333 - 26 Nisan 2012, 22:56:24
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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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=Firmware_Update_FEZ_Cerberus)
* http://wiki.tinyclr.com/index.php?title=First_Project (http://wiki.tinyclr.com/index.php?title=First_Project)
* http://wiki.tinyclr.com/index.php?title=FEZ_Cerberus_Firmware_On_Discovery (http://wiki.tinyclr.com/index.php?title=FEZ_Cerberus_Firmware_On_Discovery)
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: CLR - 27 Nisan 2012, 00:19:26
Tebrikler, güzel çalışma olmuş
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: mcan - 27 Nisan 2012, 07:38:09
bu netmf e driver nasil eklenir?
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: alisoy - 27 Nisan 2012, 08:29:37
R68 direncini soktukten sonra yine eskisi gibi kart programlanabiliyor mu?yani iki şekilde de calısmak istenirse?
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 27 Nisan 2012, 09:22:04
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 (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 (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 (http://wiki.tinyclr.com/index.php?title=Register_Access_-_Managed_Drivers)
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 27 Nisan 2012, 09:22:35
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...
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: 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?
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: 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?
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 28 Nisan 2012, 12:14:24
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...
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 28 Nisan 2012, 12:17:18
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 (http://www.uerkal.com/Posts/MFThreading.aspx)
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 28 Nisan 2012, 12:18:02
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 (http://www.ghielectronics.com/downloads/FEZ/Beginners%20Guide%20to%20Porting%20NETMF.pdf)

kendi kartlarını hacklemişler ve yeni bir portasyon yapmışlar...
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 28 Nisan 2012, 16:52:41
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);
        }

    }
}
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: 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
Başlık: Ynt: STM32F4'ü C# ile programlama
Gönderen: memo333 - 02 Mayıs 2012, 09:54:42
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....