CONNESSIONE PC  to  STM32

Per la gestione lato P.C. utilizzeremo il programma in Visual Basic precedentemente scritto negli appunti ‘CONNESSIONE di una scheda a Microcontrollore al P.C.’

 

Utilizzeremo L’MCU  NUCLEO-ST32L432KC PER CONNETTERSI VIA RS232 AL P.C.  ed il solito FTDI questa volta con il jumper settato sui 3,3v che è la tensione di lavoro dell’’STM.

Scheda di sviluppo STM32 Nucleo-32 STMicroelectronics, CPU ARM Cortex M4F

 

Schema di collegamento.

Connessioni pratiche

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Per riutilizzare il software ‘Comm_UnByte_RS232.exe’, precedentemente scritto in Visual Basic, dovremmo scrivere un programma simile

a quello scritto per Arduino che acquisisce un dato e lo restituisce immediatamente incrementato di uno.

 

Unica differenza, rispetto al programma Arduino e che la comunicazione avverrà in Interrupt. Programmeremo l’STM in modo che potrà eseguire il programma principale e solo all’arrivo di un dato da ricevere, interromperà l’esecuzione del programma, solo per il tempo necessario per completare la comunicazione, e poi riprenderà l’esecuzione del programma principale. Questa è la soluzione solitamente più utilizzata nell’ambito professionale.

 Per la scrittura del programma su STM, utilizzeremo STM32CubeIDE 1.15.0

   -àUna guida sintetica e chiara per la programmazione delle MCU stm32 …    https://wiki.st.com/stm32mcu/wiki/Getting_started_with_UART   ]

 

Quindi descriviamo dall’inizio la procedura. (chi ha già esperienza potrà sorvolare le parti per lui scontate!)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Selezionare modalità Asincrona.

Nella finestra sottostante appaiono i parametri di conf.

Alla voce NVIC Setting, Spuntare USART1 global interrupt   ‘ENABLE’

 

Settare parametri trasmissione:9600 Bit/s (le rimanenti config. Sono quelle di default)

 

 

Alla voce ‘GPIO Setting’ I pin utilizzati sono PA9  e PA10. Appaiono già selezionati! Se vogliamo diamo

un nome personalizzato(User Label)

 

 

Per terminare e ritrovare il codice scritto, relativo alla configurazione grafica appena fatta..

 

 

A questo punto apparirà il codice completo della configurazione pronto da usare.

Il codice ha sempre nome main.c

E si trova nella finestra sul lato sinistro del ‘ProiectExplorer(annotare posizione per futuri utilizzi!);

 

 

Completiamo il codice per eseguire le operazioni necessarie.

 

1)   Creiamo il Buffer TX ed RX:

Vengono creati due matrici ad un solo elemento. Normalmente, le matrici sono destinate al contenimento di più elementi ma nel nostro caso ne serv solo uno.

Per le vostre future implementazioni creerete le matrici delle dimensioni necessarie.

La matrice rx_buff[] è naturalmente destinata a contenere il dato da ricevere dal PC mentre nella tx_buff[] verrà collocato il dato ricevuto +1.

       Inserire il seguente codice tra /* USER CODE BEGIN 0 */ e /* USER CODE END 0 */

 

/* USER CODE BEGIN 0 */

uint8_t tx_buff[1];    // USART

uint8_t rx_buff[1];    // USART

/* USER CODE END 0 */

 

 

2)      Avvia la ricezione prima dell’avvio del programma.

 

  /* USER CODE BEGIN 2 */

  HAL_UART_Receive_IT(&huart1, rx_buff, 1);

/* USER CODE END 2 */

 

 

 

3)      Routine di interruzione:

La routine di interruzione va scritta! Non viene creata direttamente dal Configuratore grafico!!!!!!!!!!!!!!!!!!!!

Nella funzione, prima si riceve il dato spedito dal PC e poi lo si restituisce incrementato di uno.

 

Inserire il seguente codice tra /* USER CODE BEGIN 4 */ e /* USER CODE END 4 */

 

/* USER CODE BEGIN 4 */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

HAL_UART_Receive_IT(&huart1, rx_buff, 1);

rx_buff[0]= rx_buff[0] + 1

HAL_UART_Transmit_IT(&huart1, tx_buff, 1);

}

/* USER CODE END 4 */

 

 

Come già accennato, il programma principale ‘gira’ indisturbato

nell loop  While (1),  { .. },   quando, in un qualsiasi momento,  il PC invia un dato, l’STM

subisce una interruzione (il pin RX dell’STM attiva l’interruzione), il programma interrompe l’esecuzione del

programma Principale ed esegue la routine di interruzione (HAL_UART_RxCpltCallback). 

Finita l’esecuzione della routine, il programma riprende a ‘girare’ dal punto in cui si è INTERROTTO.

 

 

 

 

Nota sulle librerie HAL.

Le librerie HAL semplificano notevolmente l’utilizzo dei mmicrocontrollori  STM32.

Con un singolo richiamo ad una funzione, è possibile realizzare una serie di operazioni che, diversamente, sarebbe difficile, lunga e complessa.

In sostanza con la libreria, si dispone di un linguaggio più ad alto livello somigliante al conosciutissimo Wiring utilizzato per la programmazione nell’IDE di Arduino.

Tutte le librerie sono integrate ed immediatamente disponibili nell’IDE STM32CubeIDE.