Po zmontowaniu układu można przejść do zaprogramowania mikrokontrolera STM32. Do tego celu użyto programu STM32Cube do konfiguracji oraz środowiska programistycznego System Workbench for STM32.
Szczegółowy opis narzędzia CubeMX znajduje się w artykule:
STM32Cube graficzny konfigurator STM32
Po utworzeniu projektu i wybraniu mikrokontrolera STM32F411CEUx można przejść do deklaracji pinów używanych w projekcie.
Rys.4. STM32Cube – zakładka Pinout
W zakładce ADC1 należy zaznaczyć opcje IN5, IN6, IN7 włączając kanały 5, 6 i 7 przetwornika analogowo-cyfrowego. W zakładce RCC należy oznaczyć źródło zegara mikrokontrolera – zewnętrzny rezonator kwarcowy HSE. W tym celu opcję High Speed Clock (HSE) ustawiamy jako Crystal/Ceramic Resonator. Następnie należy ustawić piny używane do sterowania wyświetlaczem jako GPIO_Output. Poniżej znajduje się tabela łącznie z nazwami, jakie należy nadać pinom w programie (później z tych nazw będzie korzystać biblioteka do obsługi ekranu).
Pin KA-NUCLEO-F411CE | Pin mikrokontrolera STM32F411CE | Etykieta |
D4 | PB5 | LED_D4 |
D5 | PB4 | LED_D5 |
D6 | PB10 | LED_D6 |
D7 | PA8 | LED_D7 |
D8 | PA9 | LED_RS |
D9 | PB7 | LED_EN |
Ponadto pin, do którego podłączony jest przycisk obecny na płytce KA-NUCLEO należy skonfigurować jako GPIO_Input. Przyciskowi nadałem etykietę „Przycisk” (rysunek 4).
Rys. 5. STM32Cube – zakładka Clock Configuration
W kolejnym ekranie należy ustawić konfigurację zegarów mikrokontrolera. Warto ustawić oscylator zewnętrzny jako źródło pętli. Należy podać częstotliwość oscylacji w polu Input Frequency – 8 MHz. Jako PLL Source Mux oznaczyć HSE. Po prawej stronie w pole ABP1 Timer Clocks można wpisać np. 100 MHz, co powinno automatyczne ustawić wszystkie wymagane dzielniki w torze na odpowiednie wartości (rysunek 5).
Rys. 6. STM32Cube – konfiguracja GPIO
W zakładce Configuration klikamy przycisk GPIO. Jeśli jeszcze nie nadano etykiet pinom odpowiedzialnym za obsługę wyświetlacza – można zrobić to teraz. Zalecam też ustawić dla tych pinów opcję Maximum output speed na High (rysunek 6).
Rys.7. STM32Cube – konfiguracja ADC DMA
Po naciśnięciu przycisku ADC1 można dokonać konfiguracji przetwornika analogowo-cyfrowego. W przykładzie dane z przetwornika będą przekazywane bezpośrednio do pamięci, a więc z wykorzystaniem DMA. Na samym początku w zakładce DMA Settings należy ustawić transmisję z przetwornika ADC, oraz Stream jako DMA2 Stream 4. Poniżej można ustawić Mode na Circular.
Rys.8. STM32Cube – konfiguracja parametrów ADC
W zakładce Parameter Settings należy włączyć opcje: Scan Conversion Mode, Continuous Conversion Mode oraz DMA Continuous Request. Number of Conversions należy ustawić na 3 – DMA będzie przesyłać 3 próbki z ADC. Warto ustawić w każdym kolejnym Rank inny kanał ADC, który jest przesyłany – tak aby na 3 próbki wysyłane każda pochodziła z innej osi akcelerometru.