Comunicazione tra terminale "TeraTerm" e scheda Nucleo STM32 F401RE

Alcune volte è necessario mettere in comunicazione il microcontrollore con il computer, tramite terminale, per mostrare informazioni sotto forma di testo, come numeri o segnali di avvertimento.

Per mettere in comunicazione il microcontrollore con il terminale TeraTerm, è prima di tutto necessario aprire un progetto nell'IDE di sviluppo STM32Cube. La scheda di sviluppo Nucleo F401RE, come molte altre schede ST, hanno già preimpostato il protocollo di comunicazione USART2 attivato. Il baudrate, bit per secondo, è impostato su 115200 bits/s e le parole hanno lunghezza 8 bit. 

La prima cosa da fare, per comunicare con il terminale, è l'attivazione di una richiesta di accesso diretto alla memoria DMA per la trasmissione USART da memoria a periferica:

1. Nel file .ioc, sezione Pinout & Configuration, seguire System core -> DMA -> Add -> UART2_TX mostrato in figura 1.

Figura 1: Attivazione di una richiesta DMA per conto della UART
Effettuare quindi il caricamento del firmware sulla scheda.

2. Aprire TeraTerm. Nella prima schermata, attivare la connessione Serial (COM: STMicroelectronics...) e cliccare OK Figura 2.

Figura 2: Creazione della connessione su TeraTerm


3. Sempre su TeraTerm, fare clic su Setup -> Terminal... -> Receive: AUTO e fare clic su OK. Mostrato in figura 3.

Figura 3: configurazione del terminale.

4. Per allineare i parametri del terminale a quelli della periferica UART del microcontrollore, cliccare su Setup -> Serial port ... -> Baud Rate: 115200  e cliccare su OK come mostrato in figura 4. 

Figura 4: Parametrizzazione della porta seriale

Il terminale è pronto per ricevere messaggi dalla periferica UART.
Per esempio, se nel while(1) della funzione main viene scritto un codice per il quale appare su terminale una stringa di testo ogni qualvolta viene premuto il pulsante blu a bordo della scheda è il seguente:
in alto al file main.c:

#include <string.h>
#include <stdio.h>
uint8_t ok[] = "Ho premuto il pulsante.\n";

 nel while(1) dello stesso file sorgente:

if((HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)) == GPIO_PIN_RESET){

    HAL_UART_Transmit(&huart2, ok, sizeof(ok), 10);

    HAL_Delay(200);

}


Il risultato finale, su terminale, sarà il seguente (figura 5):
Figura 5: Risultato finale








Commenti

Post popolari in questo blog

Conversione analogico - digitale (ADC) e digitale - analogico (DAC) con amplificatori operazionali

Tempo di propagazione nella logica pass-transistor - legge di Elmore (39)

Modello di Ebers & Moll delle correnti nel BJT - Guadagni di corrente (15)