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.

r   e   k   l   a   m   a

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