30 stycznia 2013

Hello STM32

Tym razem opuścimy luksusowy świat systemów operacyjnych, grafiki wspomaganej sprzętowo i nieograniczonej, chronionej pamięci. Pożegnamy wygodę oferowaną przez szybkie wielordzeniowe procesory i znaną każdemu architekturę x86 lub x64. Dziś będzie mowa o STM32F4 i w najbliższych notkach pokażę, jak wykorzystać go do kilku niecnych rzeczy.

Z czym to się je ?

Właśnie, czym jest to magiczne urządzenie? W zasadzie jest to w pełni wyposażony komputer, uzupełniony o kilka dodatkowych peryferiów. Przede wszystkim na pokładzie znajdziemy procesor ARM (Cortex M4) pracujący z częstotliwością 168 MHz. Dodatkowym atutem jest tutaj także jednostka FPU, sprzętowo wspomagająca obliczenia na liczbach zmiennoprzecinkowych. Pamięci RAM nie mamy dużo - do 192 kB (zależnie od wersji urządzenia). Na pokładzie znajdziemy jeszcze DSP, akcelerometr, mikrofon, wyjście audio, SDIO (Secure Digital Card Input/Output), USB, UART, cztery programowalne diody led i przycisk. Dodatkowo masa złącz GPIO (General Purpose Input/Output). Całość w bardzo przystępnej cenie. Nic tylko brać i programować! 

Narzędzia

Żeby móc komunikować się z evalem (i jednocześnie go zasilić), potrzebujemy kabla mini USB (nie mylić z mikro). Niestety, nie jest on dołączany do zestawu. Na szczęście płytka wyposażona jest w programator (ST-LINK/V2), więc nie jesteśmy narażeni na dodatkowe koszta. Sterowniki do niego, można ściągnąć tu.
Zostało zatem wybranie IDE. Wybór mamy bardzo szeroki, ja jednak skupię się tylko na jednym - CooCox. Jest to darmowe, oparte na Eclipsie środowisko, z wbudowanym debugerem i bezpośrednią możliwością programowania płytki. Do naszych celów wystarczy w zupełności. Musimy także zaopatrzyć się w dedykowane GCC. Pozostaje nam więc tylko instalacja i krótki kurs pilotażu. 

Pierwsze kroki

Mając wszystko przygotowane, możemy wnieść trochę więcej życia, w ten skostniały sprzęt. Po instalacji wszystkich wyżej wymienionych programów, uruchamiamy CoIDE. Naszym oczom ukaże się znana sylwetka Eclipsowego środowiska. Przechodzimy do menu Project. Wybieramy Select Toolchain Path i tam wklejamy ścieżkę do folderu bin, pakietu GCC (domyślnie jest to C:\Program Files\GNU Tools ARM Embedded\4.7 2012q4\bin). Następnie tworzymy nowy projekt, korzystając z przycisku na ekranie powitalnym. Podajemy nazwę projektu a później chip na którym bazowany jest eval - STM32F4x (gdzie x oznacza konkretną rewizję urządzenia, opisaną na procesorze). Kolejnym krokiem będzie wybranie komponentów. Z dostępnej listy zaznaczamy RCC. Automatycznie powinny dodać się CMSIS BOOT oraz M4 CMSIS Core. Do tego dodajemy jeszcze GPIO i jesteśmy gotowi by uruchomić pierwszy program. W liście plików (dodanych automatycznie podczas wyboru komponentów) znajdujemy main.cpp i wklejamy poniższy kod:
#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"

GPIO_InitTypeDef  GPIO_InitStructure;

void delay(volatile unsigned int uTime)
{
    while((uTime--) > 0)
    {
    }
}

void main(void)
{

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    while(1)
    {
        GPIO_ToggleBits(GPIOD, GPIO_Pin_12);
        delay(100000);

        GPIO_ToggleBits(GPIOD, GPIO_Pin_13);
        delay(100000);

        GPIO_ToggleBits(GPIOD, GPIO_Pin_14);
        delay(100000);

       GPIO_ToggleBits(GPIOD, GPIO_Pin_15);
       delay(100000);
    }
}

Po kompilacji (Project -> Build albo F7) i wlaniu softu na płytkę (Flash -> Program Download), nasz STM powinien pociesznie zamrugać do nas swoimi wszystkimi kolorowymi diodami.
Następnym razem zajmiemy się dokładną analizą powyższego przykładu. Tymczasem to tyle.
Solucja, a właściwie workspace, do pobrania tu.

Brak komentarzy:

Prześlij komentarz