1. Szczegółowe omówienie środowiska programistycznego STM32CubeIDE
- wybieranie procesora/płytki:
- STM32F411RE
- Clock Configuration – możliwość ustawienia zegarów mikrokontrolera (max. 100MHz)
- Project Manager/Code Generate -> aktywować „Generate peripheral initialization….”
- konfigurowanie wyprowadzeń:
- SYS/Debug -> Serial Wire (SWD)
- PA5 – jako wyjście o nazwie “LED”
- PC13 – jako wejście (pull-up) o nazwie “BUTTON”
- konfigurowanie modułów:
- Connectivity/ USART2 wybrać mode: Asynchronous, ustawić prędkość komunikacji na 9600 (Baud Rate) konfigurowanie modułów
- Analog/ ADC1 – >aktywujemy kanał 1 (IN0)
2. Omówienie plików generowanego projektu
- gpio.c
- usart.c – “huart2”
- main.c – własny kod wpisujemy tylko pomiędzy: ” /* USER CODE BEGIN… , /* USER CODE END ” – dlaczego?
- uruchamiamy program RealTerm – konfigurujemy prędkość na 9600 (Port/Baud), wybieramy port właściwy dla naszej płytki (Port/Port) i klikamy open
- wracamy do main.c i wklejamy poniższy kod:
1 2 3 4 5 6 7 8 9 10 11 |
/* Infinite loop */ /* USER CODE BEGIN WHILE */ char text[50]; int i = 0; while (1) { sprintf(text, "Licznik: %d \r\n", i++); HAL_UART_Transmit(&huart2, text, strlen(text), 50); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ |
3. Zapoznanie się z opcją debugowania kodu.
- uruchamiamy debbuger
- praca krokowa
- dodać breakpoint w linijce z ” HAL_UART_Transmit….”
4.Komunikacja z komputerem z wykorzystaniem interfejsu UART
Zadania – każde zadanie powinno być w osobnej funkcji o nazwie zadanieN (zadanie1,zadanie2 itd.) z komentarzem opisującym jej działanie:
- stworzyć funkcję, która działa jak zegarek. Wyświetla na ekranie, co jedną sekundę kolejne sekundy i minuty (00:01,00:02,….01:01, itd.).
- stworzyć funkcję która odbiera dane z terminala (wykorzystać funkcję “HAL_UART_Receive(huart, pData, Size, Timeout)”). Po uruchomieniu programu przechodzi do trybu czuwania i wyświetla napis “Czekam na komendę:” i oczekuje na jakiś znak z terminala, po jego odebraniu wykonuje operacje i wraca do czuwania:
- ‘q’ – włącza diodę LED,
- ‘w’ – wyłącza diodę LED,
- ‘e’ – wypisuje na terminalu komunikat “Wciśnij przycisk, czekam…”, i oczekuje na wciśnięcie przycisku (BUTTON). Po wciśnięciu przycisku wypisuje na terminalu “Dziękuję”,
- ‘?’ – wypisuje na terminalu “Pomoc do programu xxx, obsługiwane komendy q w e ?” , gdzie xxx to nazwa programu wymyślona przez grupę na zajęciach,
- na każdy inny odebrany znak reaguje komunikatem “Odebralem nieznany znak: x” – gdzie x to wciśnięty znak.
- stworzyć funkcję, która oblicza wiek osoby na podstawie wprowadzonego roku urodzenia z terminala. Program powinien wyświetlać komunikaty dla użytkownika z opisem swojego działania.
- stworzyć funkcję, która działa jak stoper aktywowany/resetowany za pomocą przycisku/komend:
- po uruchomieniu programu stoper jest w trybie czuwania
- wciśnięcie przycisku/odebranie znaku ‘q’ aktywuje stoper, odliczane są kolejne jednostki czasu,
- ponowne przyciśnięcie przycisku/odebranie znaku ‘e’ kończy pomiar, wyświetla na ekranie komunikat “zmierzono: 452,23 sekund”, stoper przechodzi do trybu czuwania
- odebranie znaku ‘w’ wyświetla na terminalu komunikat “Okrazenie n: 452,23 sekund”, i trwa dalsze odliczanie. n to numer kolejnego odebranego znaku ‘w’, resetowane w trybie czuwania
- dokładność stopera może wynosić 100ms
- jeśli stoper jest aktywowany-odlicza czas to na płytce jest to sygnalizowane świeceniem zielonej diody