Funzione di lettura analogica per microcontrollori ST (STM32xxxxxx)
Gran parte delle applicazioni delle schede di sviluppo a microcontrollore, come Arduino e la Nucleo ST, richiedono l'acquisizione di grandezze esterne tramite sensori analogici. Si pensi, ad esempio, alla temperatura o all'intensità luminosa. E' quindi necessario convertire la grandezza analogica ottenuta dai sensori in una grandezza digitale.
Se per Arduino questo procedimento è relativamente semplice, poiché esiste già una funzione atta alla lettura (analogRead(...) per intenderci), per i microcontrollori ST e per le relative schede Nucleo la lettura e conseguente conversione da analogica a digitale richiedono diversi passaggi.
Ho deciso quindi di creare una funzione analoga alla primitiva analogRead(...) di Arduino, che riesca a leggere e convertire una grandezza proveniente da un ingresso analogico.
1. Si apre l'IDE di sviluppo STM32CubeIDE e si crea un nuovo progetto di firmware corrispondente alla scheda di sviluppo/microcontrollore in possesso (nel mio caso F401RE); IMPORTANTE: nella sezione Project Manager entrare in Code Generator e attivare la spunta su "Generate Peripheral initializations as...![]() |
Figura 1: Generazione di file .c/.h per le periferiche |
![]() |
Figura 2: configurazione del clock (1) |
![]() |
Figura 3. configurazione del clock (2) |
![]() |
Figura 4: Inizializzazione dell'ADC. |
4. Nella stessa schermata, entrare nella sezione Parameter settings, settare Clock Prescaler -> PCLK2 divided by 4 e Resolution -> 10 bits. La risoluzione dell'ADC può essere anche lasciata a 12 bit (figura 5): su 10 bit, il valore ottenuto sarà compreso tra 0 e 1023, su 12 bit sarà ottenuto un valore tra 0 e 4095;
![]() |
Figura 5: parametri dell'ADC |
5. Generare il programma tramite l'icona ingranaggio giallo sulla barra strumenti;
![]() |
Figura 6: Generazione del programma |
![]() |
Figura 7: dichiarazione della funzione nel file adc.h |
7. Recarsi sul file adc.c accessibile nella directory Core -> Src. Nella funzione MX_ADC_Init()eliminare le dichiarazioni mostrate in figura 8:
![]() |
Figura 8: sezioni da eliminare nel file adc.c |
val = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
return val;
![]() |
Figura 9: dichiarazione della funzione ADC_Read nel file adc.c |
La funzione potrà ora essere impiegata nel programma principale per la lettura rapida del valore ottenuto dal convertitore AD, passando come argomento il canale (ingresso) da cui leggere.
Commenti
Posta un commento