Sommario:

STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx): 5 passaggi
STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx): 5 passaggi

Video: STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx): 5 passaggi

Video: STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx): 5 passaggi
Video: STM32F4 Программирование на C 5. Кодирование акселерометра в Keil с использованием STM32CubeMx. 2024, Luglio
Anonim
STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx)
STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx)
STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx)
STM32F4 Discovery Board e comunicazione Python USART (STM32CubeMx)

Ciao! In questo tutorial cercheremo di stabilire una comunicazione USART tra STM32F4 ARM MCU e Python (può essere sostituito da qualsiasi altro linguaggio). Quindi iniziamo:)

Passaggio 1: requisiti software e hardware

In termini di hardware hai bisogno di:

  • STM32F4 Discovery Board (o qualsiasi altra scheda STM32)
  • Convertitore da USB a TTL

In termini di software:

  • STM32CubeMX
  • Keil uVision5
  • Python con libreria seriale installata

Passaggio 2: configurazione STM32CubeMX

Per prima cosa capiamo cosa vogliamo fare. Vogliamo trasmettere i dati alla scheda da Python su USART e verificare se abbiamo dati corretti e led di commutazione. Quindi, abbiamo bisogno di abilitare USART e Led.

  • Abilita USART2 dalla scheda Connettività.

    • Cambia modalità in Asincrono
    • Velocità di trasmissione fino a 9600 bit/s
    • Lunghezza della parola a 8 bit senza parità
    • Nessun bit di parità
    • Dalle impostazioni DMA aggiungi USART2_RX in modalità circolare
    • Da NVIC Settings abilita l'interrupt globale USART2
  • Abilita LED facendo clic su PD12

Quindi genera il codice:)

Passaggio 3: sviluppo software Keil

#includere

#includere

Queste librerie saranno necessarie nelle operazioni sulle stringhe e per definire la variabile booleana.

/* CODICE UTENTE BEGIN 2 */ HAL_UART_Receive_DMA(&huart2, (uint8_t *) data_buffer, 1); /* FINE CODICE UTENTE 2 */

Qui, la ricezione UART con DMA è iniziata.

/* USER CODE BEGIN 4 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { /* Previeni l'avviso di compilazione degli argomenti non utilizzati */ UNUSED(huart); /* NOTA: Questa funzione non deve essere modificata, quando è necessaria la richiamata, l'HAL_UART_RxCpltCallback potrebbe essere implementato nel file utente */ if(data_buffer[0] != '\n'){ data_full[index_] = data_buffer[0]; indice_++; }else{ indice_ = 0; finito = 1; } //HAL_UART_Transmit(&huart2, data_buffer, 1, 10); } /* FINE CODICE UTENTE 4 */

Questo è ISR che viene attivato quando otteniamo un byte di carattere. Così. otteniamo quel byte e lo scriviamo nel data_full che contiene tutti i dati ricevuti finché non otteniamo '\n'. Quando otteniamo '\n' creiamo il flag 1 finito e nel ciclo while:

while (1) { /* USER CODE END WHILE */ if(finished){ if(strcmp(data_full, cmp_) == 0){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); } memset(data_full, '\0', strlen(data_full)); finito = 0; }else{ _NOP (); } /* CODICE UTENTE BEGIN 3 */ }

Se il flag di fine è ALTO confrontiamo il contenuto dei dati ricevuti completi e dei dati che desideriamo e se sono uguali attiviamo il led. Dopodiché cancelliamo il flag finito e aspettiamo nuovi dati e cancelliamo anche l'array data_full per non sovrascrivere l'array.

Passaggio 4: sviluppo software Python

Quindi, qui vogliamo inviare il nostro numero con '/n' alla fine, perché il software Keil dovrà vederlo per conoscere la fine.

importazione seriale

ser = serial. Serial('COM17') #controlla quella porta sul tuo dispositivo da Gestione dispositivi

ser.write(b'24\n')

Dovresti vedere che il LED si attiva ogni volta che invii '24\n'. Se invii qualcos'altro, non dovrebbe influire su di esso.

Passaggio 5: conclusione

Siamo arrivati alla fine del tutorial. se hai qualche problema o domanda non esitare a chiedere. Cercherò di aiutare il più possibile. Grazie mille:)

Consigliato: