Wstęp
Głównym parametrem z jakiego zdecydowałem się na tą płytkę była jej cena (55zł), która jak na możliwości jakie zapewnia jest dosyć niska. Więc w związku z tym, że jestem osobą początkującą, takie rozwiązanie jak najbardziej mi wystarcza.
Minusem tego układu jest brak już wlutowanego oscylatora zewnętrznego (kwarcu - HSE). Nie stanowi to większego problemu ponieważ można korzystać z wbudowanego oscylatora wewnętrznego. Jeśli natomiast zależy nam na większej precyzji generacji sygnału (dla wbudowanego źródła taktującego w normalnych warunkach temperaturowych błąd generacji sygnału wynosi 1%). istnieje możliwość przylutowania oscylatora zewnętrznego wraz z kondensatorami. Przygotowano pod to lutowanie specjalnie przystosowane miejsca znajdujące się tuż obok oscylatora. Możliwe jest podłączenie zewnętrznego źródła o częstotliwości 4-26 MHz. Wewnętrzny natomiast ma częstotliwość 16 MHz. Możliwe jest zaprogramowanie układu do monitorowania błędów z oscylatora zewnętrznego. Wtedy gdy wystąpi problem z działaniem układ automatycznie przeskoczy z zewnętrznego na wewnętrzny sygnał.
Rys. 1.2. Miejsce na przylutowanie oscylatora zewnętrznego
Specyfikacja mikrokontrolera zastosowanego w przedstawianej płytce [1]:
- Rdzeń ARM Cortex M4;
- Częstotliwość 100 MHz;
- Flash 512 kB;
- Pamięć SRAM 128 kb;
- Przetwornik AC: 12 bitowy, 16 kanałowy;
- Timery: 10;
- Porty I/O: 81
- 3xI2C
- 3xUSART
- 5xSPI
- USB 2.0 Full Speed
Opis wyprowadzeń
Płytka wyposażona jest w dwa rodzaje wyprowadzeń. Pierwsze z nich znajdujące się od wewnątrz płytki ( złącza goldpin żeńskie ) pozwalają na podłączenie nakładek do Arduino. Nucleo jest z nimi w pełni zgodne. Drugi typ połączeń są to złącza Morpho, które stanowią wszystkie wyprowadzenia mikrokontolera.
Poniżej przedstawiam rysunek zaczerpnięty z dokumentacji do modułu. Przedstawia on rozkład elementów na warstwie górnej.
Rys. 1.3. Rozmieszczenie elementów na płytce - warstwa górna
Nucleo składa się z dwóch zasadniczych części, górna na której znajduje się programator/debugger ST-Link/V2. Pozwala on na oddzielną pracę z wyjściem SWD. Aby możliwa była praca na zewnętrznych układach należy odłączyć obie zworki na CN2. Druga część płytki natomiast składa się z mikrokontrolera oraz umieszczonych wyprowadzeń, przycisków funkcyjnych itp.
Jedną z możliwości jaką oferuje nam rodzina STM nucleo jest programowanie układu z wykorzystaniem kompilatora on-line mbed.pl. Dzięki tej platformie dostajemy możliwość napisania programu bez fizycznej instalacji kompilatora.
Rys. 1.4. Opis wyprowadzeń układu [3]
Pierwszy program
Pierwszy program będzie standardowy, czyli mruganie diodą wbudować. Nie ma tutaj żadnych cudów. W pierwszej kolejności deklarujemy wykorzystywane porty GPIO, potem w pętli cyklicznie włączamy i wyłączamy diodę. Przez to, że występuje tutaj mikrokontroler z tym samym rdzeniem sterowanie i wykorzystywane komendy są takie same jak w Discovery.
Dioda LED w tym przypadku jest podłączona do pinu PA5. W płytkach nucleo mamy możliwość obsługi tylko pojedynczej diody wbudowanej.
#include "stm32f4xx.h" void delay(int time) { int i; for (i = 0; i < time * 5000; i++) {} } void DiodeOn(uint16_t led); void DiodeOff(uint16_t led); void DiodeConfig(void); int main(void) { DiodeConfig(); while (1) { DiodeOn(GPIO_Pin_5); // zapalenie diody delay(1000); DiodeOff(GPIO_Pin_5); // zgaszenie diody delay(2000); } } //Konfiguracja diody wbudowanej PA5 void DiodeConfig(void) { GPIO_InitTypeDef gpio; // obiekt gpio z konfiguracja portow GPIO // uruchomienie zegara modulu GPIO RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_StructInit(&gpio); //domyslna konfiguracja gpio.GPIO_Pin = GPIO_Pin_5; //konfigurujemy pin 5 gpio.GPIO_Mode = GPIO_Mode_OUT; //jako wyjscie gpio.GPIO_OType = GPIO_OType_PP; gpio.GPIO_PuPd = GPIO_PuPd_NOPULL; gpio.GPIO_Speed = GPIO_Speed_25MHz; GPIO_Init(GPIOA, &gpio); // inicjalizacja modulu GPIOA } //Funkcja odpowiedzialna za zapalenie diody void DiodeOn(uint16_t led) { GPIO_SetBits(GPIOA, led); } //Funkcja odpowiedzialna za zgaszenie diody void DiodeOff(uint16_t led) { GPIO_ResetBits(GPIOA, led); }
Bibliografia
[1] www.botland.com.pl
[2] UM1724 User Manual, STM32 Nucleo Boards
[3] http://www.waveshare.com/wiki/XNUCLEO-F411RE