+ All Categories
Home > Documents > STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET...

STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET...

Date post: 08-Jun-2020
Category:
Upload: others
View: 16 times
Download: 0 times
Share this document with a friend
25
STM32F4 Discovery + .NET MicroFramework Projekt BROB ÚSTAV: UAMT ŠKOLNÍ ROK: 2013/2014 VEDOUCÍ: Tomáš Jílek ZPRACOVÁNÍ: Martin Pavloň Petr Ručka
Transcript
Page 1: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

STM32F4 Discovery + .NET MicroFramework

Projekt BROB

ÚSTAV: UAMT

ŠKOLNÍ ROK: 2013/2014

VEDOUCÍ: Tomáš Jílek

ZPRACOVÁNÍ: Martin Pavloň

Petr Ručka

Page 2: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

Obsah

STM32F4 Discovery + .NET MicroFramework 1

Projekt BROB 1

OBSAH 2

ZADÁNÍ 4

TEORETICKÝ ÚVOD 5

MICROSOFT .NET MICRO FRAMEWORK 5

GPIO 6

DAC/ADC 6

USART 6

I2C 6

ETHERNET 6

PWM 7

SPI 7

CAN 7

USB 8

MOUNTAINEER USB MAINBOARD 9

MOUNTAINEER ETHERNET MAINBOARD 10

FEZ CERBERUS MAINBOARD 12

STM32F4DISCOVERY 14

TABULKA SROVNÁNÍ JEDNOTLIVÝCH PORTACÍ 15

INSTALACE .NETMF PŘES ST-LINK 16

INSTALACE .NETMF PŘES DFUSE 17

ZPRACOVANÉ ÚKOLY 18

USART 18

DA/AD 18

GPIO 18

ETHERNET 18

I2C 18

SPI 18

PŘESNOST ČASOVÁNÍ 18

PŘÍKLADY KÓDŮ PRO JEDNOTLIVÉ TYPY KOMUNIKACÍ 19

Page 3: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

GPIO A AD/DA 19

I2C 20

USART VIRTUAL COM 21

USART LOOP BACK 21

ETHERNET 22

PŘESNOST ČASOVÁNÍ 23

ZÁVĚR 24

ZDROJE 25

Page 4: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

4

Zadání

Vyzkoušejte instalaci prostředí .NET MicroFramework na kit STM32F4

Discovery (příp. i na jiné). Otestujte použitelnost (odezvy, přesnost časování,

atd.) pro použití jako řídicí desky mobilních robotů. Otestujte funkčnost

základních subsystémů použitého MCU (GPIO, DAC/ADC, UART, I2C,

Ethernet, atd.) v .NET MicroFramework. Srovnejte low-cost řešení s STM32F4

Discovery s komerčně dostupnými embedded moduly s již nainstalovaným

.NET MicroFramework s ohledem na jejich nízkou cenu. Testovací aplikaci

realizujte v .NET/C#.

Page 5: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

5

Teoretický úvod

Microsoft .NET Micro Framework

open source .NET platforma určená pro zařízení s omezenými systémovými

prostředky

obsahuje zmenšenou verzi .NET runtime a podporuje vývoj v C#, Visual Basic .NET a

podporuje debugging jak v emulátoru tak na fyzickém hardware

obsahuje dodatečné knihovny specifické pro embedded aplikace

cílí na usnadnění, zrychlení a zlevnění vývoje vestavěných systémů

paměťová náročnost zhruba 300kB

může běžet rovnou „na železe“ bez operačního systému přičemž běh pod OS je také

možný

podporuje běžné integrované periferie a komunikace, včetně Flash paměti, EEPROM,

GPIO, I2C, SPI, Serial port, USB

nevyžaduje MMU (jednotka správy paměti)

hlídá pády a tuhnutí aplikace

Ne každá portace podporuje všechny HW periferie, ale je možné si vytvořit vlastní,

nebo použít zdrojové kódy k portacím např. od Fez, nebo mountaineer a zkompilovat

si pouze to co potřebujeme.

Díky univerzálnímu kódu lze programy přenášet na různá zařízení, pokud na nich běží

.NETMF(nejlépe stejné verze) a pokud daná portace podporuje vše co je v kódu

napsáno, avšak pokud není portace dostupná stojí za zvážení zda ji vytvářet, nebo

radši použít C.

Nevýhoda portace je to, že zpomaluje běh procesoru, a má určité nároky na paměť,

což u malých procesorů není zanedbatelné

I když je kód univerzální, .NETF je relativně nový a často vychází nové verze což

komplikuje situaci s vývojem portace.

Page 6: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

6

GPIO

General Purpose Input/Output - piny (vývody), které lze programovat pomocí

softwaru

do těchto pinů lze posílat elektrický signál nebo jej z nich naopak přijímat, tím lze ve

finále pracovat s připojeným hardware na té nejnižší úrovni

DAC/ADC

převodníky z digitálního signálu na analogový a naopak

většina vstupních signálů jsou analogové, a aby je mohl daný přístroj zpracovat, je

potřeba je převést na signál digitální

USART

synchronní / asynchronní sériové rozhraní (Universal Synchronous / Asynchronous

Receiver and Transmitter)

zařízení pro sériovou komunikaci, které lze nastavit buď pro asynchronní režim (pro

linky RS232), anebo pro synchronní režim (SPI)

USART může být nakonfigurován v následujících módech:

o Asynchronní (full duplex) – v tomto módu může komunikovat s periferiemi

(CRT terminály…)

o Synchronní (half duplex) – může komunikovat s perifériemi A/D a D/A

převodníky, sériová EEPROM…

můžeme jej nastavit jako Master nebo Slave

I2C

Inter-Integrated Circuit

multi-masterová počítačová sériová sběrnice používána k připojování nízko

rychlostních periferií k základní desce, vestavěnému systému nebo mobilnímu

telefonu

sběrnice rozděluje připojená zařízení na řídící (master – zahajuje a ukončuje

komunikaci; generuje hodinový signál SCL) a řízené (slave – zařízení adresované

masterem)

Ethernet

souhrn technologií pro lokální počítačové sítě (LAN)

Page 7: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

7

propojení pomocí kroucené dvou linky, optickým kabelem (a dříve i koaxiálním

kabelem)

komunikace přenosovými rychlostmi od 10 Mbit/s po 10 Gbit/s

sítě Ethernet realizují fyzickou a linkovou vrstvu referenčního modelu OSI, takže je

možné po nich provozovat jeden nebo více protokolů síťové vrstvy

PWM

Pulse Width Modulation - pulzně šířková modulace

diskrétní modulace pro přenos analogového signálu pomocí dvouhodnotového signálu

signál je přenášen pomocí střídy

demodulace signálu pomocí dolno frekvenční propusti.

často využívána ve výkonové elektronice pro řízení velikosti napětí nebo proudu

kombinace PWM modulátoru a dolno frekvenční propusti bývá rovněž využívána jako

levná náhrada D/A převodníku

SPI

Serial Peripheral Interface - sériové periferní rozhraní

použití pro komunikaci mezi řídícími mikroprocesory a integrovanými obvody

(EEPROM, A/D převodníky, displeje…)

komunikace realizována pomocí společné sběrnice

adresace pomocí zvláštních vodičů, které při logické nule aktivují příjem a vysílání

zvoleného zařízení (piny SS nebo CS)

Master

o řídí komunikaci pomocí hodinového signálu

o určuje, se kterým zařízením na sběrnici bude komunikovat pomocí SS - Slave

Select (někdy CS - Chip Select)

Slave

o vysílá podle hodinového signálu, pokud je aktivován pomocí SS/CS

CAN

Controller Area Network -

využívána pro vnitřní komunikační síť senzorů a funkčních jednotek

sériová datová sběrnice, nejvyšší možnost přenosu dat 1 Mb/s

Page 8: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

8

USB

Universal Serial Bus

univerzální sériová sběrnice, způsob připojení periferií k počítači

nahrazuje dříve používané způsoby připojení (sériový a paralelní port, PS/2, Gameport

apod.)

pro běžné druhy periférií – tiskárny, myši atd.

pro přenos dat

On The GO

o schopnost vzájemné komunikace přes USB na úrovni point-to-point (peer-to-

peer), tuto komunikaci jen připomíná, ale ve skutečnosti je to upravená

komunikace mezi Master - Slave

o přenos dat mezi dvěma rovnocennými zařízení bez potřeby nadřazeného

systému (PC)

o např. komunikace mezi dvěma telefony, fotoaparátem a tiskárnou…

o řadiče jsou schopny pracovat v režimu Host či Device, ale vždy jeden z nich

musí být Host a druhý Device

DEVICE (Slave)

o je podřízený Hostu

o např. telefon, flash disk

HOST (Master)

o nadřazený nad Device

o např. PC

při připojení USB zařízení Hostu a Device, tak zařízení typu Host ovládá zařízení typu

Device např. posílání dat

Page 9: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

9

Mountaineer USB Mainboard

o cena 89,5$

o deska obsahuje 9 slotů pro: GPIO, SPI, I2C, UART, AD/DA, PWM, USB

Device/Host, CAN

o dále obsahuje micro USB konektor, dvě tlačítka, 8 MB Flash paměti

o s procesorem STM32F407 na frekvenci 168 MHz, který má Flash paměť 1 MB a

RAM paměť 192 KB

o deska je napájena 5V přes USB, ale toto napětí je potom sníženo na 3,3 V

o pracuje ve třech módech:

Active: 70 mA

Sleep: 26 mA

Deep: 20 mA

o funkčnost při teplotě 0 – 70°C

Page 10: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

10

Mountaineer Ethernet Mainboard

o cena 100$

o Ethernet konektor (RJ 45): HTTP, TCP, UDP, ICMP

o pro komunikaci není potřeba další ethernetový modul

o deska obsahuje 8 slotů pro: GPIO, SPI, I2C, UART, AD/DA, PWM, CAN

o dále obsahuje micro USB konektor, dvě tlačítka, 8 MB Flash paměti

o s procesorem STM32F407 na frekvenci 168 MHz, který má Flash paměť 1 MB a

RAM paměť 192 KB

o deska je napájena 5V přes USB, ale toto napětí je potom sníženo na 3,3 V

o pracuje ve třech módech:

Active (spolu s Ethernetem): 170 mA

Active (bez ethernetu): 80 mA

Sleep: 37 mA

Deep: 8 mA

o funkčnost při teplotě 0 – 70°C

Page 11: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

11

Mapování pinů pro Mountaineer(společná tab. pro USB a Ethernet desku)

Page 12: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

12

FEZ Cerberus Mainboard

o cena 29,95$

o deska obsahuje 8 slotů pro: GPIO, SPI, I2C, UART, AD/DA, PWM, USB Device /

Host, CAN

o podporuje komunikaci přes ethernet jen s připojeným modulem, plně podporováno

TCP/IP s HTTP, TCP, UDP, DHCP

o dále obsahuje tlačítko, 8 MB Flash paměti

o s procesorem STM32F405VG na frekvenci 168 MHz,

o celkově dostupná Flash paměť 1 MB více jak 300KB pro uživatelský kód

o celkově dostupná paměť RAM 119 KB nebo 104 KB

o funkčnost při teplotě -20 – 70°C

Page 13: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

13

Mapování pinů

Page 14: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

14

STM32F4DISCOVERY

o cena 20$

o osazena procesorem STM32F407VGT6 s 1 MB Flash a 192 KB RAM

o deska je napájena 5 V přes USB

o externí aplikace napájeny 5 V a 3 V

o obsahuje:

akcelerometry LIS302DL, LI3DSH ST MEMS 3

zvukový senzor MP45DT02 - digitální mikrofon

8 LED

2 tlačítka

3,5 mm jack konektor

o podporuje komunikaci přes Ethernet, USART, AD/DA, SPI, I2C, CAN, I2S, SDIO,

UART

o možnost připojení displeje

o obsahuje USB OTG (on the go)

o pomocí USB mini je deska napájena, pomocí USB micro je do procesoru nahráván

program a tak pomocí něj deska komunikuje

o oproti předchozím deskám nemá piny pro jednotlivé periferie pohromadě, ale

rozházené ve čtyřech řadách přípojných kolíků, a taky tyto piny spolu nesousedí, takže

člověk musí hledat, jaký pin odpovídá dané periferii

o Pro funkčnost námi testovaných portací je nutné vyměnit originální krystal 8MHz za

12MHz, po tomto zásahu je nutné odstranit odpor R69 ze spodní strany desky, jinak

je krystal přetlumený!

Page 15: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

15

Tabulka srovnání jednotlivých portací

Portace PWM Podpora

Ethernetu SD

karta SPI I2C USART CAN AD/DA USB

Mountaineer USB 4 Ne Ne 3 3 5 1 3/1 Device / Host

Mountaineer Ethernet 4 Ano Ne 3 3 5 1 3/1

Only integrated USB for debug

FEZ Cerberus 5

Ano s externím Modulem ano 2 2

3

Beta verze 12/2 Device

Všechny portace podporují GPIO

AD, I2C, SPI jsou HW na desce pouze 3, více AD převodníků je řešeno multiplexorem.

Page 16: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

16

Instalace .NETMF přes ST-LINK

1.

2. Stáhnout STM32 ST-LINK Utility a nainstalovat

http://www.st.com/web/en/catalog/tools/PF258168

3. Pro funkčnost námi testovaných portací je nutné vyměnit originální krystal 8MHz za

12MHz, po tomto zásahu je nutné odstranit odpor R69 ze spodní strany desky, jinak

je krystal přetlumený!

4. Stáhnout portaci .NETMF

Mountaineer.zip

Samozřejmě je možné použít jinou portaci, ale musí být vytvořena pro verzi

.NETMF kterou budete instalovat(u nás 4.2 QFE2)

Nainstalovat Visual Studio 2010

http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express

5. Nainstalovat .NET MicroFramework SDK

http://netmf.codeplex.com/releases/view/91594

6. Připojit desku přes Mini USB

7. Spustit STM32 Utility

8. Připojit se k desce pomocí STM32 Utility

9. Vymazat vše co je na procesoru (Target->Erase chip, Target->Erase sectors(select all

sector) )

10. Nahrát do čipu ze zipu Tinybooter.hex

11. Resetovat desku

12. Propojit desku s PC i pomocí Micro USB, Mini USB nyní slouží jako napájení

13. Nainstalovat USB driver, toto je nutné udělat ručně, z vlastnosti USB zařízení se

dostat až k nastavení Driveru, a tam ho aktualizovat na verzi jenž je přibalená v zip

souboru. To že WinUsb nemusí hlásit chybu ještě neznamená, že nám bude fungovat.

14. Spustit MFDeploy.exe

15. Vybrat typ zařízení v našem případě USB a měla by se ukázat naše discovery deska

16. Nahrát pomocí MFDeploy do čipu zbytek obsahu smt32discovery.zip

(ER_Config.hex, ER_Flash.hex)

17. A nyní můžeme spustit Visual Studio, vytvořit nový projekt(console aplication C#) a

začít programovat.

Page 17: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

17

Instalace .NETMF přes DfuSe

1. Nainstalovat DfuSe 3.0.2 je součástí odevzdání, nebo ho lze nainstalovat s balíkem od

GHI.

2. Pro funkčnost námi testovaných portací je nutné vyměnit originální krystal 8MHz za

12MHz, po tomto zásahu je nutné odstranit odpor R69 ze spodní strany desky, jinak

je krystal přetlumený!

3. Stáhnout portaci .NETMF

Mountaineer.zip

Samozřejmě je možné použít jinou portaci, ale musí být vytvořena pro verzi

.NETMF kterou budete instalovat(u nás 4.2 QFE2)

4. Nainstalovat Visual Studio 2010

http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express

5. Nainstalovat .NET MicroFramework SDK

http://netmf.codeplex.com/releases/view/91594

6. Použít jednu z propojek z ST-LINK a propojit s ní piny BOOT0 a Vdd.

7. Restartovat desku

8. Spustit DFU měli by jste vidět v řádku Device svoje zařízení

9. Dále kliknou na záložku Protocol->Create from Map, zvolit Erase radio button->GO

10. Kliknout na Load DFU file a zvolit soubor stažený v zipu

11. Zvolit Download radio button(neklikat na Upload ihned by se vám poškodil dfu file a

museli by jste ho znovu stáhnout) ->GO

12. Odstranit propojku a restartovat

13. Nainstalovat USB driver, toto je nutné udělat ručně, z vlastnosti USB zařízení se

dostat až k nastavení Driveru, a tam ho aktualizovat na verzi jenž je přibalená v zip

souboru. To že WinUsb nemusí hlásit chybu ještě neznamená, že nám bude fungovat.

14. A nyní můžeme spustit Visual Studio, vytvořit nový projekt(console aplication C#) a

začít programovat.

Anglický návod zde.

Page 18: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

18

Zpracované úkoly

USART

Funkční komunikace zařízení s PC pomocí převodníku do USB

Funkční komunikace zařízení samo se sebou (loopback)

DA/AD

Funkční nastavování napětí v rozsahu 0-3V

GPIO

Funkční spínání testovacích LED diod

Ethernet

Nefunkční pouze odesílá DHCP request, ale již nic dalšího, nastavení statické IP adresy

nepomáhá.

I2C

Funkční s ultrazvukovým měřičem vzdálenosti SFR 10

SPI

Komunikuje s ethernet modulem ENC28J60, jelikož ethernet nefunguje nelze říci, že to

není způsobeno SPI, i když se to nezdá pravděpodobné.

Komunikace s SCA3000 nefunguje, snaha o načtení revize z čidla byla neúspěšná,

odchozí komunikace byla kontrolována osciloskopem a je v pořádku.

Příklad pro SPI komunikaci, by měl být v pořádku, avšak při testování se nám

nepovedlo načíst revizi akcelerometru, ikdyž jsme kontrolovali odchozí data, která jsou

v pořádku!

Přesnost časování

Hodnoty jsou měřeny statistikou z 200 hodnot

fnastavená[HZ] průměr[Hz] min[Hz] max[Hz] Max relativní

chyba[%] rozptyl

hodnot[Hz]

Timer(Cerberus .NETMF 4.2) 500 458,52 443,70 472,06 -11,26 28,35

PWM(MountaineerUSB .NETMF 4.2) 500 500,07247 500,07248 500,07248 0,01 0,00001

Sleep(Cerberus .NETMF 4.2) 500 435,08 430,97 437,35 -13,81 6,38

Page 19: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

19

Příklady kódů pro jednotlivé typy komunikací

GPIO a AD/DA

public static void Main() { OutputPort led_g = new OutputPort((Cpu.Pin)60, false); //definice I/O pinů OutputPort led_o = new OutputPort((Cpu.Pin)61, false); OutputPort led_r = new OutputPort((Cpu.Pin)62, false); OutputPort led_b = new OutputPort((Cpu.Pin)63, false); InputPort vstup = new InputPort((Cpu.Pin)(0 * 16 + 1), true,Port.ResistorMode.PullUp); AnalogInput AD = new AnalogInput((Cpu.AnalogChannel)Cpu.AnalogChannel.ANALOG_1); //definice AD převodníku AD.Offset = 0; //nastavení stejnosměrného posunutí AD převodníku AD.Scale = 3; //nastavení maximálního vstupního napětí AD převodníku double AD_data = 0; AnalogOutput output = new //definice DA převodníku AnalogOutput((Cpu.AnalogOutputChannel)Cpu.AnalogOutputChannel.ANALOG_OUTPUT_0); output.Scale = 1; //nastavení stejnosměrného posunutí DA převodníku output.Offset = 0; //nastavení maximálního vstupního napětí DA převodníku for (; ; ) { if ((vstup.Read()) == false) //cyklus ovládání LED podle stavu pinu vstup { led_g.Write(true); led_o.Write(true); led_r.Write(true); led_b.Write(true); } else { led_g.Write(false); led_o.Write(false); led_r.Write(false); led_b.Write(false); } AD_data = AD.Read(); //metoda pro čtení AD převodníku Debug.Print(AD_data.ToString()); Thread.Sleep(1500); output.Write(0.5); //metoda pro zápis do DA převodníku, double <0,1> z maxima DA } }

Page 20: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

20

I2C

public static void Main() { I2CDevice.Configuration con = new I2CDevice.Configuration(0xE0 >> 1, 10); //definice I2C (nastaveni adresy zařízení, rychlosti komunikace v KHz) I2CDevice MyI2C = new I2CDevice(con); //inicializace I2C int Distance = 9999; I2CDevice.I2CTransaction[] Read = new I2CDevice.I2CTransaction[2]; I2CDevice.I2CTransaction[] Start =new I2CDevice.I2CTransaction[1]; I2CDevice.I2CTransaction[] Init = new I2CDevice.I2CTransaction[2]; byte[] RegisterValue_16 = new byte[2] { 9,9 }; byte[] RegisterValue_16L = Utility.CombineArrays(new byte[] { 0x01 }, new byte[] { 0x01 }); byte[] range = Utility.CombineArrays(new byte[] { 0x02 }, new byte[] { 0xFF }); //nastavení vzdálenosti 43+43x [mm] byte[] gain = Utility.CombineArrays(new byte[] { 0x01 }, new byte[] { 0x0A }); //nastavení šířky laloku 0-16 byte[] mode = Utility.CombineArrays(new byte[] { 0x00 }, new byte[] { 0x51 }); //nastavení typu výstupních dat 50inch 51cm 52us Init[0] = I2CDevice.CreateWriteTransaction(range); //posloupnost dat pro init. Init[1] = I2CDevice.CreateWriteTransaction(gain); Start[0] = I2CDevice.CreateWriteTransaction(mode); //příkaz ke zpuštění Read[0] = I2CDevice.CreateWriteTransaction(new byte[] { 0x02 }); Read[1] = I2CDevice.CreateReadTransaction(RegisterValue_16); //čtení 16b registru if (MyI2C.Execute(Init, 15) < 1) //spuštění inicializace čidla Debug.Print("Failed to perform Init"); for (; ; ) //nekonečná smyčka měření { if (MyI2C.Execute(Start, 10) < 1) Debug.Print("Failed to perform Start"); //impuls čidlu pro začátek měření Thread.Sleep(70); //počkám 70ms if (MyI2C.Execute(Read, 10) < 2) //načtu změřená data Debug.Print("Failed to perform I2C transaction"); else Distance = (RegisterValue_16[0] << 8) + RegisterValue_16[1]; //sloučení 16b registru Debug.Print("Register value: " + Distance); Thread.Sleep(1000); } }

Page 21: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

21

USART virtual com

public static void Main() { SerialPort UART = new SerialPort("COM3", 9600,Parity.None,8,StopBits.One); //inicializace UART linky(Com1-3,parita,počet bitů,typ zakončení) int read_count = 0; byte[] tx_data; byte[] rx_data = new byte[16]; tx_data = Encoding.UTF8.GetBytes("USART Test COM3"); //označení pinů na discovery tx-PD8 rx-PD9 UART.ReadTimeout = 0; UART.Open(); //otevření sériové linky for (; ; ) { rx_data = Encoding.UTF8.GetBytes(" "); //proměná pro načítání dat UART.Flush(); UART.Write(tx_data, 0, tx_data.Length); //odeslání dat po UART Thread.Sleep(100); read_count = UART.Read(rx_data, 0, rx_data.Length); //načtení dat z buffru Debug.Print("Data:" + (char)rx_data[0] + (char)rx_data[1] + (char)rx_data[2] + (char)rx_data[3] + (char)rx_data[4]+ (char)rx_data[5] + (char)rx_data[6] + (char)rx_data[7]); //výpis dat po Debugeru Thread.Sleep(3000); } }

USART loop back

public static void Main() { SerialPort UART = new SerialPort("COM3", 9600); //inicializace UART linky(Com1-3,parita,počet bitů,typ zakončení) int read_count = 0; byte[] tx_data; byte[] rx_data = new byte[16]; tx_data = Encoding.UTF8.GetBytes("USART Test COM3"); //označení pinů na discovery tx-PD8 rx-PD9 UART.ReadTimeout = 0; UART.Open(); //otevření sériové linky for (int x = 0; x < 100; x++) { UART.Flush(); UART.Write(tx_data, 0, tx_data.Length); //odeslání dat Thread.Sleep(100); read_count = UART.Read(rx_data, 0, rx_data.Length); //načtení buffru if (read_count != 15) Debug.Print("Spatna velikost: " + read_count.ToString()); else { Debug.Print("Data uspesne prijata:" + (char)rx_data[0] + (char)rx_data[1] + (char)rx_data[2] + (char)rx_data[3] + (char)rx_data[4] + (char)rx_data[5] + (char)rx_data[6] + (char)rx_data[7] + (char)rx_data[8] + (char)rx_data[9] + (char)rx_data[10] + (char)rx_data[11] +(char)rx_data[12] + (char)rx_data[13] + (char)rx_data[14]); } //výpis dat po Debugeru Thread.Sleep(100); } }

Page 22: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

22

Ethernet

//nastavení interface ethernetu na 0 static NetworkInterface iface = NetworkInterface.GetAllNetworkInterfaces()[0]; static Socket server; public static void Main() { //povolení automatického získání IP adresy z DHCP severu iface.EnableDhcp(); /* //příkazy pro manuální nastavení IP, je nutné nepovolovat DHCP, viz víše iface.PhysicalAddress=(new byte[] { 0x5c, 0x86, 0x4a, 0x00, 0x00, 0xdd }); iface.EnableStaticIP("192.168.1.102", "255.255.255.0", "192.168.1.1"); */ while (iface.IPAddress == "0.0.0.0") //čekání na nastavení IP adresy z DHCP serveru { Debug.Print("Awaiting IP Address"); Thread.Sleep(1000); } Debug.Print("IP Address Granted: " + iface.IPAddress); server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //inicializuje lokální endpoint aby poslouchal na výchozím portu http 80 IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 80); server.Bind(localEndPoint);//použije endpoint pro nastavení serveru server.Listen(10); while (true) { // spuštění serveru, nyní by měl přijímat IP pakety Socket clientSocket = server.Accept(); // funkce pro zpracování příchozích dat ProcessClientRequest(clientSocket); } } static void ProcessClientRequest(Socket m_clientSocket) { const Int32 c_microsecondsPerSecond = 1000000; using (m_clientSocket) { Byte[] buffer = new Byte[1024]; if (m_clientSocket.Poll(5 * c_microsecondsPerSecond,SelectMode.SelectRead)) { if (m_clientSocket.Available == 0) return; Int32 bytesRead = m_clientSocket.Receive(buffer,m_clientSocket.Available, SocketFlags.None); //vrátí html stránku napsanou níže String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<html><head><title>.NET Micro Framework Web Server</title></head>" + "<body><bold><a href=\"http://www.ghielectronics.com/\">Learn more about the .NET Micro Framework with FEZ by clicking here</a></bold></body></html>"; byte[] buf = System.Text.Encoding.UTF8.GetBytes(s); int offset = 0; int ret = 0; int len = buf.Length; while (len > 0) { ret = m_clientSocket.Send(buf, offset, len, SocketFlags.None); len -= ret; offset += ret; } m_clientSocket.Close(); } } }

Page 23: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

23

Přesnost časování

public class Program { class OurClass { public int x; } static void RunMe(object o) { if (OUT1.Read() == false) OUT1.Write(true); else OUT1.Write(false); } static PWM MyFader = new PWM(Cpu.PWMChannel.PWM_3, 5, 0.5, false); //PWM(kanál,start za,frekvence,invertující režim) public static void Main() { OutputPort OUT = new OutputPort((Cpu.Pin)(0 * 16 + 1), false); static OutputPort OUT1 = new OutputPort((Cpu.Pin)(0 * 16 + 2), false); //definice output pinů MyFader.Start(); //nastartování PWM /* PWMChannel.PWM_0: PD12 //GREEN LED PWMChannel.PWM_1: PD13 //ORANGE LED PWMChannel.PWM_2: PD14 //RED LED PWMChannel.PWM_3: PD15 //BLUE LED PWMChannel.PWM_4: PE9 */ OurClass cls = new OurClass(); cls.x = 5; Timer MyTimer =new Timer(new TimerCallback(RunMe), cls, 3000, 1); /null for (; ; )//Smyčka pro generování 500Hz přes Sleep { OUT.Write(true); Thread.Sleep(1); OUT.Write(false); Thread.Sleep(1); } } }

SPI

public static void Main() { SPI.Configuration MyConfig = new SPI.Configuration(Cpu.Pin.GPIO_Pin10, false/*chip select*/, 0/*time after selected*/, 0/*holt time*/, false/*false idle->clk=0*/, true/*clock edge true=raisig*/, 1, SPI.SPI_module.SPI1); SPI MySPI = new SPI(MyConfig);//vytvoření kanál SPI s deklarací víše ushort[] Init_data16b = new ushort[1] { 0x52C0 }; ushort[] wr_data16b = new ushort[1] { 0xA}; ushort[] rd_data16b = new ushort[1] { 0xFFFF}; ushort[] Buff_W16b = new ushort[1] { 0x002A }; ushort[] Buff_R16b = new ushort[1] { 0xFFFF }; { MySPI.Write(Init_data16b);//instrukce Write zapiše data a načtená data zahodí Thread.Sleep(1000); MySPI.WriteRead(Buff_W16b, Buff_R16b);//WriteRead zapíše i načte data while (true) { MySPI.WriteRead(wr_data16b, rd_data16b); Thread.Sleep(250); Debug.Print("Register value16b: " + Buff_R16b[0] + rd_data16b[0]); } } }

Page 24: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

24

Závěr

Podařilo se nám zprovoznit komunikaci před GPIO, USART, I2C, AD/DA, SPI. Z části se

povedlo komunikovat i přes ethernet, odesílá se pouze DHCP request. SPI jsme zkoušeli, při

komunikaci přes ethernet. Z toho vyplývá, že odchozí komunikace by měla být v pořádku.

Z měření časování při nastavené frekvenci 500Hz vyplívá, že časovač má o 11,26% menší

frekvenci než jsme mu nastavili a Sleep dokonce o 13,81%, u PWM jsme naměřil o 0.1%

více než bylo nastaveno, také stabilita PWM je výborná oproti časovači, který má rozptyl

28,35Hz. Sleep mód je na tom o něco lépe s rozptylem 6,38Hz.

Doporučuji používat pro nahrátí portace program DfuSe, jelikož je to snadnější a nezávislé na

programátoru a pokud potřebujete občas něco odpájet(časté) z desky může se vám stát, že ST-

Link už vám stejně nepoběží, navíc je tento způsob často rychlejší, neboť například portace

mountaineeru je pouze jeden .dfu soubor na místo 3 .hex souborů pro ST-LINK.

Zapůjčená deska se jeví jako výhodná koupě, vzhledem k její relativně nízké ceně a možnosti

nahrát si do ní SW z produktů i několikanásobně dražších. Na této desce je osazeno množství

periférií což může být výhoda i problém, pokud chcete využívat některé její piny. Další

možností je si koupit Fez Cerberus, což je produkt o něco dražší, ale s již nahranou portací a

bez nutnosti cokoliv na desce modifikovat, na této desce však již nenajdeme žádné periferie.

Poslední zkoumanou možností jsou desky od mountaineer, ty jsou však mnohem dražší, než

předcházející, avšak nabízí zpracovanou HW a SW vrstvu buď pro ethernet, nebo pro USB,

podle typu desky

Page 25: STM32F4 Discovery + .NET MicroFrameworkrobotika/2014_BROB/2014... · Obsah STM32F4 Discovery + .NET MicroFramework 1 Projekt BROB 1 OBSAH 2 ZADÁNÍ 4 TEORETICKÝ ÚVOD 5 MICROSOFT

25

Zdroje

http://mc2.unl.edu/uploads/discoveryCerberus.zip

https://www.ghielectronics.com/catalog/product/349

http://www.mountaineer.org/resources/release-4-2-qfe1/

http://www.mountaineer.org/mountaineer-platform/


Recommended