[PRZYKŁAD] STM32 NUCLEO-L476RG i KA-Nucleo-UniExp
Podczas programowania mikrokontrolera wykorzystałem system STM32Cube do konfiguracji peryferiów. W projekcie wykorzystane zostaną: przetwornik analogowo-cyfrowy do odczytu danych z czujnika temperatury, magistrala I2C do komunikacji z akcelerometrem oraz port szeregowy UART do sterowania modułem Bluetooth. Potrzebuję również ustawić pin PA0 jako wyjście cyfrowe – za pomocą tej linii będę wprowadzał moduł HC-05 w tryb komend AT.
Szczegółowy opis narzędzia CubeMX znajduje się w artykule:
STM32Cube graficzny konfigurator STM32
Po zainicjowaniu nowego projektu w programie STM32Cube należy odnaleźć płytkę NUCLEO-L476RG. Po dwukrotnym kliknięciu na nazwę płytki otworzy się okno, w którym można skonfigurować peryferia mikrokontrolera.
W zakładce Pinout należy oznaczyć wszystkie linie mikrokontrolera, z których będzie korzystał projekt. Intuicyjny schemat wyprowadzeń nakładki znajduje się w dokumentacji. Poniżej w tabeli opisałem, których pinów użyłem oraz jaka jest ich funkcja.
Pin STM32L476RG |
Funkcja w projekcie |
PA9 | USART1_TX |
PA10 | USART1_RX |
PA0 | HC05 – pin KEY (GPIO_Output) |
PB8 | I2C1_SCL |
PB9 | I2C1_SDA |
PA4 | Sygnał Termometru (ADC1_IN9) |
Następnie należy włączyć odpowiednie peryferia w pasku po lewej stronie obrazka mikrokontrolera. W liście ADC1 należy ustawić kanał 9 jako IN9 Single-ended. Magistralę I2C1 jako I2C. Na poniższym rysunku zaznaczono odpowiednie opcje.
Rys.3. STM32Cube – konfiguracja pinoutu mikrokontrolera(1)
Oprócz tego, należy także włączyć port szeregowy USART1 w trybie Asynchronous. Przedstawiono to na poniższym rysunku.
Rys. 4. STM32Cube – konfiguracja pinoutu mikrokontrolera (2)
W zakładce Configuration można dokonać konfiguracji poszczególnych peryferiów. Zacznę od przetwornika ADC. W tym oknie ustawiłem: Clock Prescaler na Asynchronous Clock Mode divided by 8, Resolution na ADC 12-bit resolution oraz w sekcji ADC_Regular_ConversionMode – Sampling Time na 12.5 Cycles. Takie ustawienia pozwalają na dobrą precyzję pomiaru.
Rys. 5. STM32Cube – konfiguracja przetwornika ADC
W oknie USART1 należy ustawić szybkość transmisji na 38400 a długość słowa na 8 bits (including Parity). W zakładce NVIC Settings należy włączyć przerwania od portu szeregowego (USART1 Global interrupt).
Rys. 6. STM32Cube – konfiguracja portu szeregowego (UART)
W oknie GPIO warto ustawić etykietę pinu HC-05. Ja wybrałem nazwę BT_KEY. Należy też ustawić początkowy stan pinu na wysoki. Spowoduje to, że uruchamiając projekt, moduł HC05 od razu wejdzie w stan wprowadzania komend AT, co umożliwi jego konfigurację.
Rys. 7. STM32Cube – konfiguracja GPIO