Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Konfigurujemy zestaw stm32F429I do programowania w Mbed

Dziś opiszę konfigurację zestawu uruchomionego firmy STMicroelectronics stm32F429l. Zanim przejdę do omawiania procedury konfiguracji zestawu stm32 pod ide online Mbed, opiszę stmf429l i Mbed.

STM32F429I

Płytka developerska wyposażona jest w procesor ARM STM32F429ZIT6 rodziny Cortex M4, rdzeń procesora jest taktowany zegarem 180 MHz, procesor posiada 2 MB pamięci Flash, 256 KB RAM oraz zintegrowany kontroler LCD.
Jest to schemat blokowy rdzenia Cortex M4 firmy ARM
Na płytce znajduje się ekran 2.4" QVGA TFT LCD, żyroskop 3 osiowy L3GD20, ST MEMS, 64MB SRAM, stlinkv2 programator/deburger z interfejsem SWD. Użytkownik dostaje dodatkowo do dyspozycji 2 diody i jeden wyłącznik programowalny, wyłącznik reset i usb otg. Płytka ma wszystkie piny procesora wyprowadzone na dwustronne goldpiny na obu bokach. Poniżej została zamieszczona pełna specyfikacja płytki.
Key Features
STM32F429ZIT6 microcontroller featuring 2 Mbytes of Flash memory, 256 Kbytes of RAM in an LQFP144 package
On-board ST-LINK/V2 on STM32F429I-DISCO or ST-LINK/V2-B on STM32F429I-DISC1
mbed™-enabled (mbed.org) with ST-LINK/V2-B only
USB functions:
debug port
virtual COM port with ST-LINK/V2-B only
mass storage with ST-LINK/2-B only
Board power supply: through the USB bus or from an external 3 V or 5 V supply voltage
2.4" QVGA TFT LCD
64-Mbit SDRAM
L3GD20, ST MEMS motion sensor 3-axis digital output gyroscope
Six LEDs:
LD1 (red/green) for USB communication
LD2 (red) for 3.3 V power-on
Two user LEDs: LD3 (green), LD4 (red)
Two USB OTG LEDs: LD5 (green) VBUS and LD6 (red) OC (over-current)
Two push-buttons (user and reset)
USB OTG with micro-AB connector
Extension header for LQFP144 I/Os for a quick connection to the prototyping board and an easy probing
Comprehensive free software including a variety of examples, part of STM32CubeF4 package or STSW-STM32138 for legacy standard libraries usage
ST.com

Mbed

Środowisko developerskie online dla procesorów ARM. W skład IDE wchodzi edytor kodu, kompilator i zbiór bibliotek do peryferiów Developer board.
Mbed obsługuje język c/c++, natomiast składnia kodu jest podobna do arduino, dzięki temu pisanie programów jest równie proste, jak w zwykłym arduino.Mbed

Konfiguracja

[UWAGA]
Przed aktualizacją firmware zdejmujemy 2 zworki stlink v2, żeby odłączyć stlink od procesora. Podpięte zworki uniemożliwią aktualizacje oprogramowania pokładowego stlink .
Pobieramy sterownik stlink v2 ze strony Stlinkv2 tools. Podłączamy zestaw developerski do usb komputera. Instalujemy program i sterownik, przez wszystkie etapy instalacji przechodzimy dalej.
Następnie otwieramy program STM32 ST-LINK Utility i wybieramy ST-Link, w rozwiniętym menu klikamy na firmware update.
Klikamy w device conect, a następnie button "yes”, po zakończaniu aktualizacji firmware wyjmujemy wtyczkę usb ,zakładamy z powrotem zworki stlink i ponownie podłączamy wtyczkę usb do usb komputera . Pominę etap zakładania konta na mbed, bo jest to standardowa procedura jak przy zakładaniu konta na stronach www.
Wchodzimy na link ten i klikamy na platform, wyszukujemy STM32F429I
Dodajemy płytkę do Mbed, poprzez klikniecie "Open Mbed Compile".
Pojawi się kompilator z szablonami i pustym projektem.
Zeby wgrać program do płytki musimy kliknąć "Compile", a po chwili przeglądarka wyświetli komunikat o akcji pobierania, wybieramy drugą opcję pokazaną na obrazku.
W programie STM32 ST-LINK Utility wybieramy "Open File" i szukamy nasz plik, zatwierdzamy go opcją Otwórz, następnie przechodząc do menu "Target" , wybieramy pozycję Program i zatwierdzamy operację kliknięciem "Start".
Na koniec chciałbym podziękować za przeczytanie tego wpisu i mam nadzieję, że udało mi się dokładnie opisać wszystkie etapy konfiguracji. Na koniec knight stm32f429 + atnel atb 1.04 na czystym C arm
Na prośbę @Cyrylo podaje kod knight z filmiku,kod nie jest dokładnie opisany./** ****************************************************************************** * @file main.c * @author Ac6 * @version V1.0 * @date 01-December-2013 * @brief Default main function. ****************************************************************************** */ //PLIKI NAGLOWKOWE #include "stm32f4xx.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); //ZEGARA PORTU g GPIO_InitTypeDef GPIO_InitDef; //INICIACJA PORTU GPIO_InitDef.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6 |GPIO_Pin_5 | GPIO_Pin_4 ; // inicjacja pinow GPIO_InitDef.GPIO_OType = GPIO_OType_PP; //typ pinow GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT; //piny jako wyjsciowe GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_UP; // programowy rezystor GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz; //ustawienie taktowania zegara pinow GPIO_ToggleBits(GPIOG , GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6 |GPIO_Pin_5 | GPIO_Pin_4); //GPIO_ToggleBits(GPIOG, GPIO_Pin_14); GPIO_Init(GPIOG, &GPIO_InitDef); //aktywacja pinow RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); //ZEGARA PORTU g //GPIO_InitTypeDef GPIO_InitDef; //INICIACJA PORTU GPIO_InitDef.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6; // inicjacja pinow GPIO_InitDef.GPIO_OType = GPIO_OType_OD; //typ pinow GPIO_InitDef.GPIO_Mode = GPIO_Mode_OUT; //piny jako wyjsciowe GPIO_InitDef.GPIO_PuPd = GPIO_PuPd_UP; // programowy rezystor GPIO_InitDef.GPIO_Speed = GPIO_Speed_100MHz; //ustawienie taktowania zegara pinow GPIO_ToggleBits(GPIOC , GPIO_Pin_8 | GPIO_Pin_7 |GPIO_Pin_6 ); //GPIO_ToggleBits(GPIOG, GPIO_Pin_14); GPIO_Init(GPIOC, &GPIO_InitDef); //aktywacja pinow volatile int i; for (i = 0; i < 500000; i++); while (1) { //Dioda 1 GPIO_ResetBits(GPIOG, GPIO_Pin_4); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_4); for (i = 0; i < 500000; i++); //Dioda 2 GPIO_ResetBits(GPIOG, GPIO_Pin_5); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_5); for (i = 0; i < 500000; i++); //GPIO_ToggleBits(GPIOG, GPIO_Pin_14); //Dioda 1 GPIO_ResetBits(GPIOG, GPIO_Pin_6); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_6); for (i = 0; i < 500000; i++); //Dioda 2 GPIO_ResetBits(GPIOG, GPIO_Pin_7); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_7); for (i = 0; i < 500000; i++); GPIO_ResetBits(GPIOG, GPIO_Pin_8); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_8); for (i = 0; i < 500000; i++); GPIO_ResetBits(GPIOC, GPIO_Pin_6); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOC, GPIO_Pin_6); for (i = 0; i < 500000; i++); //Dioda 2 GPIO_ResetBits(GPIOC, GPIO_Pin_7); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOC, GPIO_Pin_7); for (i = 0; i < 500000; i++); GPIO_ResetBits(GPIOC, GPIO_Pin_8); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOC, GPIO_Pin_8); for (i = 0; i < 500000; i++); //prawo //Dioda 1 GPIO_ResetBits(GPIOC, GPIO_Pin_8); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOC, GPIO_Pin_8); for (i = 0; i < 500000; i++); //Dioda 2 GPIO_ResetBits(GPIOC, GPIO_Pin_7); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOC, GPIO_Pin_7); for (i = 0; i < 500000; i++); //GPIO_ToggleBits(GPIOG, GPIO_Pin_14); //Dioda 1 GPIO_ResetBits(GPIOC, GPIO_Pin_6); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOC, GPIO_Pin_6); for (i = 0; i < 500000; i++); //Dioda 2 GPIO_ResetBits(GPIOG, GPIO_Pin_8); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_8); for (i = 0; i < 500000; i++); GPIO_ResetBits(GPIOG, GPIO_Pin_7); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_7); for (i = 0; i < 500000; i++); GPIO_ResetBits(GPIOG, GPIO_Pin_6); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_6); for (i = 0; i < 500000; i++); //Dioda 2 GPIO_ResetBits(GPIOG, GPIO_Pin_5); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_5); for (i = 0; i < 500000; i++); GPIO_ResetBits(GPIOG, GPIO_Pin_4); // czas migniecia for (i = 0; i < 500000; i++); GPIO_SetBits(GPIOG, GPIO_Pin_4); for (i = 0; i < 500000; i++); } }  

porady programowanie inne

Komentarze

0 nowych
cyryllo   16 #1 04.02.2016 08:03

Pokaż kod ! ;)
Ja jakiś czas temu kupiłem sobie STM32 NUCLEO ale jakoś nie mam czasu na naukę ;) Może jak pociągniesz temat to się za niego zabiorę ;)

En_der   9 #2 04.02.2016 08:42

@cyryllo: Jest taki kurs na Forbocie ;)

cyryllo   16 #3 04.02.2016 08:51

@En_der: Wiem ;) Tylko ja czasu nie mam ;)

mikolaj_s   13 #4 04.02.2016 11:36

A można programować na Linuksie?

revcorey   6 #5 04.02.2016 12:23

problemem bibliotek hal(tam wykorzystywanych w mbed) jest to że zawierają błędy szczególnie w wcześniejszych wersjach STMCUBE to było widoczne.

foreste   14 #6 04.02.2016 15:04

@cyryllo: Zakamarkach dysku ten kod mam , jak znajdę pokaże
m@mikolaj_sTak można po instalacji stlink dla linuxa https://github.com/texane/stlink
https://github.com/fpoussin/QStlink2 ;).

  #7 04.02.2016 17:45

@mikolaj_s: Oczywiście i nie potrzeba żadnych sterowników :)

foreste   14 #8 06.02.2016 10:17

@Artysta Malarz (niezalogowany): Sterowników oczywiście nie, ale programu do wgrania wsadu raczej tak :) .

Autor edytował komentarz.
  #9 06.02.2016 13:32

Muszę dodać w końcu do MBedExplorera płytki z STM pod J-Linka :)

foreste   14 #10 08.02.2016 18:04

@SunRiver (niezalogowany): Hoho kto napisał :) mój mentor, nauczyciel elektroniki ;) po testuje 1 kolejności mbedexploer :).

Autor edytował komentarz.
foreste   14 #11 18.02.2016 02:17

@cyryllo: Kod knight dodałem na blogu ;).