Πίνακας περιεχομένων:

STM32F4 Discovery Board και Python USART Communication (STM32CubeMx): 5 βήματα
STM32F4 Discovery Board και Python USART Communication (STM32CubeMx): 5 βήματα

Βίντεο: STM32F4 Discovery Board και Python USART Communication (STM32CubeMx): 5 βήματα

Βίντεο: STM32F4 Discovery Board και Python USART Communication (STM32CubeMx): 5 βήματα
Βίντεο: STNucleo: MCP2515 CAN BUS Transceiver tutorial for STM32 (Communication with Arduino) 2024, Ιούλιος
Anonim
STM32F4 Discovery Board και Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board και Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board και Python USART Communication (STM32CubeMx)
STM32F4 Discovery Board και Python USART Communication (STM32CubeMx)

Γεια! Σε αυτό το σεμινάριο θα προσπαθήσουμε να δημιουργήσουμε επικοινωνία USART μεταξύ STM32F4 ARM MCU και Python (μπορεί να αντικατασταθεί από οποιαδήποτε άλλη γλώσσα). Ας ξεκινήσουμε λοιπόν:)

Βήμα 1: Απαιτήσεις λογισμικού και υλικού

Όσον αφορά το υλικό που χρειάζεστε:

  • STM32F4 Discovery Board (ή οποιαδήποτε άλλη πλακέτα STM32)
  • Μετατροπέας USB σε TTL

Όσον αφορά το λογισμικό:

  • STM32CubeMX
  • Keil uVision5
  • Python με εγκατεστημένη σειριακή βιβλιοθήκη

Βήμα 2: Διαμόρφωση STM32CubeMX

Αρχικά ας καταλάβουμε τι θέλουμε να κάνουμε. Θέλουμε να μεταδώσουμε δεδομένα στον πίνακα από την Python μέσω του USART και να ελέγξουμε αν έχουμε σωστά δεδομένα και εναλλαγή led. Έτσι, χρειαζόμαστε ενεργοποίηση USART και Led.

  • Ενεργοποιήστε το USART2 από την καρτέλα Συνδεσιμότητα.

    • Αλλάξτε τη λειτουργία σε ασύγχρονη
    • Ρυθμός Baud στα 9600 Bits/s
    • Μήκος λέξης έως 8 Bits χωρίς ισοτιμία
    • Χωρίς ελάχιστη ισοτιμία
    • Από τις ρυθμίσεις DMA προσθέστε USART2_RX σε κυκλική λειτουργία
    • Από τις ρυθμίσεις NVIC ενεργοποιήστε την καθολική διακοπή USART2
  • Ενεργοποιήστε το LED κάνοντας κλικ στο PD12

Στη συνέχεια, δημιουργήστε κώδικα:)

Βήμα 3: Ανάπτυξη λογισμικού Keil

#περιλαμβάνω

#περιλαμβάνω

Αυτές οι βιβλιοθήκες θα χρειαστούν σε λειτουργίες συμβολοσειράς και για τον ορισμό της μεταβλητής boolean.

/ *ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΞΕΚΙΝΗΣΕ 2 */ HAL_UART_Receive_DMA (& huart2, (uint8_t *) data_buffer, 1); / * ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΤΕΛΟΣ 2 */

Εδώ ξεκίνησε η λήψη UART με DMA.

/ *ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΞΕΚΙΝΗΣΕ 4 */void HAL_UART_RxCpltCallback (UART_HandleTypeDef *huart) {/ *Αποτροπή αχρησιμοποίητου ορίσματος προειδοποίηση σύνταξης */ΧΡΗΣΙΜΟΠΟΙΗΜΕΝΟ (huart); / * ΣΗΜΕΙΩΣΗ: Αυτή η λειτουργία δεν πρέπει να τροποποιηθεί, όταν απαιτείται επανάκληση, το HAL_UART_RxCpltCallback θα μπορούσε να εφαρμοστεί στο αρχείο χρήστη */ if (data_buffer [0]! = '\ N') {data_full [index_] = data_buffer [0]; ευρετήριο _ ++; } else {index_ = 0; τελειωμένο = 1; } // HAL_UART_Transmit (& huart2, data_buffer, 1, 10); } / * ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΤΕΛΟΣ 4 * /

Αυτό είναι ISR το οποίο ενεργοποιείται όταν παίρνουμε ένα byte χαρακτήρα. Ετσι. παίρνουμε αυτό το byte και το γράφουμε στο data_full που περιέχει τα πλήρη ληφθέντα δεδομένα μέχρι να πάρουμε '\ n'. Όταν παίρνουμε '\ n' κάνουμε την τελική σημαία 1 και τον βρόχο while:

ενώ (1) { / * ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΤΕΛΟΣ ΛΟΓΟ * / εάν (τελειώσει) {if (strcmp (data_full, cmp_) == 0) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); } memset (data_full, '\ 0', strlen (data_full)); τελειωμένο = 0; } else {_NOP (); } / * ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΞΕΚΙΝΗΣΕ 3 * /}

Εάν η τελική σημαία είναι Υ HIGHΗΛΗ συγκρίνουμε τα περιεχόμενα των πλήρων ληφθέντων δεδομένων και δεδομένων που επιθυμούμε και αν είναι ίσα αλλάζουμε το led. Στη συνέχεια, καθαρίζουμε την τελική σημαία και περιμένουμε νέα δεδομένα, καθώς και τον πίνακα data_full για να μην αντικατασταθεί από τον πίνακα.

Βήμα 4: Ανάπτυξη λογισμικού Python

Έτσι, εδώ θέλουμε να στείλουμε τον αριθμό μας με '/n' στο τέλος, επειδή το λογισμικό Keil θα πρέπει να το δει για να μάθει το τέλος.

σειρά εισαγωγής

ser = serial. Serial ('COM17') #ελέγξτε τη θύρα στη συσκευή σας από τη Διαχείριση Συσκευών

ser.write (b'24 / n ')

Θα πρέπει να βλέπετε ότι το LED αλλάζει κάθε φορά που στέλνετε '24 / n '. Εάν στείλετε οτιδήποτε άλλο, δεν πρέπει να το επηρεάσει.

Βήμα 5: Συμπέρασμα

Φτάσαμε στο τέλος του σεμιναρίου. εάν έχετε οποιοδήποτε πρόβλημα ή ερώτηση, μη διστάσετε να ρωτήσετε. Θα προσπαθήσω να βοηθήσω όσο μπορώ. Ευχαριστώ πολύ:)

Συνιστάται: