Rozdział 4. Konfiguracja STM32
Rozdział 3. Architektura oprogramowania | OpenDiag - STM32 CAN Tool | Rozdział 5. Interfejsy
Tak. I tutaj chciałbym oddzielić konfigurację STM32 od konfiguracji projektu. Rozdział 4 dotyczy wyłącznie tego, co ustawiamy w CubeMX/CubeIDE, żeby uzyskać bazę sprzętową dla dalszego rozwoju.
Rozdział 4. Konfiguracja STM32
4.1 Cel
Przygotowanie podstawowej konfiguracji mikrokontrolera STM32F767ZI, zapewniającej obsługę:
- debugowania,
- komunikacji USB,
- komunikacji CAN,
- sygnalizacji LED,
- przyszłej rozbudowy projektu.
Po zakończeniu tego etapu firmware ma jedynie uruchomić wszystkie peryferia — bez implementacji ELM327, FORScan czy OBD-II.
4.2 Platforma
Płytka:
STM32 Nucleo-144 F767ZI
IDE:
STM32CubeIDE
Generator:
STM32CubeMX
4.3 Zegar systemowy
Na początek:
- źródło: HSE z ST-Link (MCO)
- SYSCLK: 216 MHz (domyślna konfiguracja CubeMX dla F767)
Na tym etapie nie optymalizujemy taktowania.
4.4 Debug
Interfejs:
SWD
Opcje:
- Serial Wire Debug
Interfejs ST-Link pozostaje aktywny przez cały projekt.
4.5 UART (ST-Link Virtual COM)
Wykorzystujemy UART podłączony do ST-Link.
Przeznaczenie:
- logi
- debug
- diagnostyka
Nie będzie używany przez FORScan.
Przykładowe parametry:
- 115200 b/s
- 8N1
- bez kontroli przepływu
4.6 USB Device
Typ:
USB Device FS
Klasa:
CDC
Przeznaczenie:
- komunikacja z FORScan
- terminal
- przyszła komunikacja z własną aplikacją
Na tym etapie używamy wyłącznie CDC.
4.7 CAN
Aktywujemy wszystkie trzy kontrolery CAN.
CAN1
Status:
Enabled
Tryb:
Normal
CAN2
Status:
Enabled
Tryb:
Normal
CAN3
Status:
Enabled
Tryb:
Disabled w firmware (na razie)
Pozostaje skonfigurowany sprzętowo, aby łatwo go włączyć w przyszłości.
4.8 GPIO
Konfigurujemy:
- LED USER
- ewentualne LED diagnostyczne
- linie CAN
- USB
Pozostałe piny pozostają w stanie domyślnym.
4.9 NVIC
Aktywujemy przerwania:
- USB
- CAN RX
- CAN TX
- UART
Priorytety pozostawiamy domyślne.
Na razie bez optymalizacji.
4.10 DMA
Na pierwszym etapie:
Nie używamy DMA.
Powód:
- prostsze debugowanie,
- mniejsza liczba zmiennych podczas uruchamiania projektu.
-
DMA będzie można dodać później dla USB lub UART, jeśli okaże się potrzebne.
4.11 Middleware
Na pierwszym etapie:
USB Device (CDC)
Nie włączamy:
- FreeRTOS
- FATFS
- LwIP
4.12 Struktura projektu CubeMX
Pozostawiamy standardowy układ:
Core/
Drivers/
USB_DEVICE/
Middlewares/
Nasze moduły dodamy później we własnych katalogach, bez modyfikowania kodu generowanego przez CubeMX.
4.13 Kod generowany przez CubeMX
Przyjmujemy zasadę:
Kod wygenerowany przez CubeMX jest traktowany jako kod zewnętrzny.
Oznacza to:
nie modyfikujemy plików HAL,
nie zmieniamy plików USB Middleware,
własny kod dodajemy wyłącznie w sekcjach USER CODE BEGIN/END lub w osobnych modułach.
4.14 Wynik rozdziału
Po wykonaniu tej konfiguracji projekt powinien:
- uruchamiać STM32,
- działać pod debuggerem,
- udostępniać Virtual COM przez ST-Link,
- udostępniać USB CDC,
- inicjalizować trzy kontrolery CAN,
- być gotowy do rozpoczęcia implementacji.
Chciałbym jednak zaproponować jedną zmianę
Nie konfigurowałbym od razu wszystkich trzech kontrolerów CAN w pierwszym projekcie CubeMX.
Moja propozycja:
- CAN1 – włączony (będzie używany jako pierwszy),
- CAN2 – włączony (żeby od razu przygotować obsługę HS/MS),
- CAN3 – pozostawiony wyłączony.
Dlaczego?
- konfiguracja jest prostsza,
- mniej przerwań do analizy,
- łatwiejsze debugowanie,
- projekt szybciej osiągnie pierwszy działający etap.
CAN3 dodamy w momencie, gdy faktycznie będziemy analizować piny 1/8 w S-Maxie. Architektura z Rozdziału 3 już teraz przewiduje trzeci kanał, więc jego późniejsze dołączenie nie będzie wymagało zmian w strukturze projektu. Moim zdaniem to zmniejszy złożoność startu, nie ograniczając przyszłych możliwości.