תוכן עניינים:

לוח גילוי STM32F4 ותקשורת Python USART (STM32CubeMx): 5 שלבים
לוח גילוי STM32F4 ותקשורת Python USART (STM32CubeMx): 5 שלבים

וִידֵאוֹ: לוח גילוי STM32F4 ותקשורת Python USART (STM32CubeMx): 5 שלבים

וִידֵאוֹ: לוח גילוי STM32F4 ותקשורת Python USART (STM32CubeMx): 5 שלבים
וִידֵאוֹ: BTT Octopus V1.1 - Basics 2024, נוֹבֶמבֶּר
Anonim
לוח גילוי STM32F4 ותקשורת PARTON USART (STM32CubeMx)
לוח גילוי STM32F4 ותקשורת PARTON USART (STM32CubeMx)
לוח גילוי STM32F4 ותקשורת PARTON USART (STM32CubeMx)
לוח גילוי STM32F4 ותקשורת PARTON USART (STM32CubeMx)

היי! במדריך זה ננסה ליצור תקשורת USART בין STM32F4 ARM MCU לבין פייתון (ניתן להחליף אותה בכל שפה אחרת). אז בואו נתחיל:)

שלב 1: דרישות תוכנה וחומרה

מבחינת חומרה אתה צריך:

  • לוח גילוי STM32F4 (או כל לוח STM32 אחר)
  • ממיר USB ל TTL

מבחינת תוכנה:

  • STM32CubeMX
  • Keil uVision5
  • פייתון עם ספרייה טורית מותקנת

שלב 2: תצורת STM32CubeMX

ראשית הבה נבין מה אנו רוצים לעשות. אנו רוצים להעביר נתונים ללוח מ- Python באמצעות USART ולבדוק אם יש לנו נתונים נכונים והחלפת LED. אז, אנחנו צריכים לאפשר USART ולד.

  • אפשר USART2 מהכרטיסייה קישוריות.

    • שנה מצב לאסינכרוני
    • קצב שידור עד 9600 סיביות/שניות
    • אורך המילה עד 8 ביטים ללא זוגיות
    • בלי קצת זוגיות
    • מהגדרות DMA הוסף USART2_RX במצב cicular
    • מהגדרות NVIC אפשר הפסקת USART2 העולמית
  • אפשר LED על ידי לחיצה על PD12

אז צור קוד:)

שלב 3: פיתוח תוכנת Keil

#לִכלוֹל

#לִכלוֹל

ספריות אלה יהיו נחוצות בפעולות מחרוזת ובהגדרת משתנה בוליאני.

/ *CODE USER BEGIN 2 */ HAL_UART_Receive_DMA (& huart2, (uint8_t *) data_buffer, 1); / * סיום קוד משתמש 2 */

כאן, UART לקבל עם DMA התחיל.

/ *CODE USER BEGIN 4 */void HAL_UART_RxCpltCallback (UART_HandleTypeDef *huart) {/ *מניעת אזהרת אוסף טיעונים שאינם בשימוש */UNUSED (huart); / * הערה: אין לשנות פונקציה זו, כאשר יש צורך בחיוג חוזר, ניתן ליישם את HAL_UART_RxCpltCallback בקובץ המשתמש */ if (data_buffer [0]! = '\ N') {data_full [index_] = data_buffer [0]; אינדקס _ ++; } אחר {index_ = 0; סיים = 1; } // HAL_UART_ שידור (& huart2, data_buffer, 1, 10); } / * סיום קוד משתמש 4 * /

זהו ISR המופעל כאשר אנו מקבלים בתים אחד של תו. לכן. אנו מקבלים את הבייט הזה וכותבים אותו ל- data_full המכיל את הנתונים שהתקבלו במלואם עד שנקבל '\ n'. כאשר אנו מקבלים '\ n' אנו מסיימים את הדגל 1 ולולאה תוך כדי:

בעוד (1) { / * END CODE USER WHILE * / if (הסתיים) {if (strcmp (data_full, cmp_) == 0) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); } memset (data_full, '\ 0', strlen (data_full)); סיים = 0; } אחר {_NOP (); } / * קוד משתמש התחיל 3 * /}

אם הדגל המוגמר הוא גבוה אנו משווים את תכולת הנתונים שהתקבלו במלואם ונתונים שאנו מעוניינים בהם ואם הם שווים אנו מחליפים לד. לאחר מכן אנו מנקים את הדגל המוגמר ומחכים לנתונים חדשים וגם מנקים את מערך data_full כדי לא להחליף למערך.

שלב 4: פיתוח תוכנת פייתון

אז כאן אנחנו רוצים לשלוח את המספר שלנו עם '/n' בסוף, כי תוכנת Keil תצטרך לראות אותו כדי לדעת את הסוף.

ייבוא סדרתי

ser = serial. Serial ('COM17') #בדוק את היציאה במכשיר שלך ממנהל ההתקנים

ser.write (b'24 / n ')

אתה אמור לראות כי נורית ה- LED מתחלפת בכל פעם שאתה שולח '24 / n '. אם אתה שולח משהו אחר זה לא אמור להשפיע עליו.

שלב 5: מסקנה

הגענו לסוף ההדרכה. אם יש לך בעיה או שאלה, אנא אל תהסס לשאול. אנסה לעזור כמה שאוכל. תודה רבה לך:)

מוּמלָץ: