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