הערת יישום HOLTEK HT32 MCU UART מדריך למשתמש
מָבוֹא
מקלט/משדר אוניברסלי אסינכרוני - UART הוא ממשק שידור טורי בשימוש נרחב המספק שידור נתונים אסינכרוני גמיש דופלקס מלא. קוד היישום "Module_UART" המסופק בהערת יישום זו משתמש בפסיקות TX/RX עם מאגרי צלצול תוכנה כדי ליישם פונקציות שידור/קבלה פשוטות של UART באמצעות ממשקי API, שהפונקציות הקשורות אליהם מתוארות להלן. זה יפשט את כל תהליך העברת הנתונים ויאפשר למשתמשים להבין וליישם במהירות יישומי תקשורת UART.
- פונקציות שידור/קבלה: קריאה של בתים, כתיבה של בתים, קריאה במאגר, כתיבת חוצץ וכו'.
- פונקציות סטטוס: השגת אורך המאגר, מצב TX וכו'.
מסמך זה יציג תחילה את פרוטוקול התקשורת של UART, שיעזור למשתמשים להבין טוב יותר את תקשורת UART מעיקרון ליישום. לאחר מכן, הורדה והכנה של המשאבים הנדרשים עבור קוד היישום, כולל ספריית הקושחה, הורדת קוד היישום, file ותצורת ספרייה וכן מבוא לכלי תוכנת המסוף המשמש בהערת היישום. בפרק תיאור פונקציונלי, מבנה ספריית קוד היישום, הגדרות הפרמטרים ותיאור ה-API יוצגו. השימוש ב-API יתואר באמצעות קוד היישום "Module_UART" וצריכת משאבי ה-Flash/RAM הנדרשת עבור ממשקי ה-API יופיעו גם כן. פרק הוראות השימוש ינחה את המשתמש בשלבי ההכנה הסביבתית, הידור והבדיקה כדי לאשר שקוד האפליקציה יפעל כהלכה. לאחר מכן הוא יספק הוראות המסבירות כיצד לשלב את ממשקי ה-API בפרויקטים של המשתמש ולבסוף יספק התייחסות לשינויים ולבעיות נפוצות שעלולות להיתקל בהן.
קיצורים בשימוש:
- UART: מקלט/משדר אוניברסלי אסינכרוני
- ממשק API: ממשק תכנות יישומים
- LSB: קצת פחות משמעותי
- MSB: החלק הכי משמעותי
- PC: מחשב אישי
- SK: ערכת התחלה, לוח פיתוח HT32
- IDE: סביבת פיתוח משולבת
פרוטוקול תקשורת UART
ה-UART הוא ממשק מסוג תקשורת טורית המיישם המרת נתונים מקבילים לטוריים במשדר שלו ולאחר מכן מתקשר באופן סדרתי עם מקלט דומה. לאחר מכן, המקלט מבצע המרת נתונים טוריים-למקבילים לאחר קליטת נתונים. איור 1 מציג תרשים סכמטי של תקשורת טורית המראה כיצד הנתונים מועברים בסדר סיביות. לכן עבור תקשורת דו-כיוונית בין משדר למקלט, נדרשים רק שני חוטים, TX ו-RX, כדי להעביר נתונים באופן סדרתי ביניהם. TX הוא הפין שעליו ה-UART משדר את הנתונים הטוריים ומחובר לפין RX של המקלט. לכן התקני המשדר והמקלט צריכים לחבר את פיני ה-TX וה-RX שלהם כדי לבצע תקשורת דו-כיוונית של UART, כפי שמוצג ב- דְמוּת 2.
איור 1. תרשים תקשורת טורית
איור 2. תרשים מעגל UART
במהלך התקשורת הטורית של UART, העברת הנתונים היא אסינכרונית. המשמעות היא שאין שעון או אות סנכרון אחר בין המשדר למקלט. כאן נעשה שימוש בקצב העברת נתונים, שהוא מהירות שידור/קליטה של נתונים טוריים ואשר נקבע על ידי שני הצדדים לפני העברת נתונים. בנוסף, סיביות מיוחדות כגון סיביות התחלה ועצירה מתווספות להתחלה ולסוף של חבילת הנתונים כדי ליצור חבילת נתונים שלמה של UART. איור 3 מציג את מבנה מנות הנתונים של UART ואילו איור 4 מציג חבילת נתונים של UART 8 סיביות ללא סיביות זוגיות.
איור 3. מבנה מנות נתונים של UART
איור 4. פורמט מנות נתונים של UART 8-bit
כל חלק בחבילת הנתונים של UART מוצג לפי הסדר למטה.
- ביט התחלה: זה מציין את ההתחלה של חבילת נתונים. פין UART TX נשאר בדרך כלל ברמה לוגית גבוהה לפני תחילת השידור. אם העברת נתונים מתחילה, משדר UART ימשוך את פין ה-TX מגבוה לנמוך, כלומר מ-1 ל-0, ולאחר מכן יחזיק אותו שם למשך מחזור שעון אחד. מקלט UART יתחיל לקרוא נתונים כאשר זוהה מעבר גבוה לנמוך בפין ה-RX.
- נְתוּנִים: זהו הנתונים המועברים בפועל, עם אורך נתונים של 7, 8 או 9 סיביות. הנתונים מועברים בדרך כלל עם ה-LSB תחילה.
- סיביות זוגיות: מספר ההיגיון "1" בנתונים משמש כדי לקבוע אם נתונים כלשהם השתנו במהלך השידור. עבור זוגיות זוגית, המספר הכולל של הלוגי "1" בנתונים צריך להיות מספר זוגי, לעומת זאת, המספר הכולל של הלוגי "1" בנתונים צריך להיות מספר אי זוגי עבור זוגיות אי זוגית.
- עצור ביט: זה מציין את סופה של חבילת נתונים, שבה משדר UART ימשוך את פין ה-TX מנמוך לגבוה, כלומר מ-0 ל-1, ואז יחזיק אותו שם למשך פרק זמן של 1 או 2 סיביות.
כפי שהוזכר קודם לכן, מכיוון שאין אות שעון במעגל UART, יש להגדיר את אותה מהירות שידור/קליטה של נתונים טוריים, המכונה קצב ה-baud, בין המשדר למקלט כדי ליישם שידור ללא שגיאות. קצב הביאוד מוגדר על ידי מספר הביטים המועברים בשנייה, ב-bps (סיביות לשנייה). כמה קצבי העברת נתונים סטנדרטיים ונפוצים הם 4800bps, 9600bps, 19200bps, 115200bps וכו'. הזמן המתאים הנדרש להעברת סיביות נתונים בודדים מוצג להלן.
טבלה 1. קצב שידור לעומת זמן שידור של 1-Bit
שיעור באוד | שידור 1 סיביות זְמַן |
4800bps | 208.33 מיקרומטר |
9600bps | 104.16 מיקרומטר |
19200bps | 52.08 מיקרומטר |
115200bps | 8.68 מיקרומטר |
הורדת משאבים והכנה
פרק זה יציג את קוד היישום ואת כלי התוכנה המשמש, כמו גם כיצד להגדיר את הספרייה ו file נָתִיב.
ספריית קושחה
ראשית, ודא שספריית הקושחה Holtek HT32 הורדה לפני השימוש בקוד היישום. קישור ההורדה מוצג למטה. כאן יש שתי אפשרויות, HT32_M0p_Vyyyymmdd.zip לסדרת HT32F5xxxx ו-HT32_M3_Vyyyymmdd.zip לסדרת HT32F1xxxx. הורד ופתח את הרכיב הרצוי file.
הרוכסן file מכיל מספר תיקיות שניתן לסווג כמסמכים, ספריית קושחה, כלים ופריטים אחרים, שנתיב המיקום שלהן מוצג באיור 5. ספריית הקושחה HT32 zip file עם א file השם של HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip נמצא תחת התיקיה Firmware_Library.
איור 5. תוכן HT32_M0p_Vyyyymmdd.zip
קוד יישום
הורד את קוד האפליקציה מהקישור הבא. קוד היישום ארוז ב-zip file עם א file שם של HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. לִרְאוֹת איור 6 עבור ה file מוסכמות שמות.
איור 6. קוד יישום File שם הקדמה
קישור להורדה: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File ותצורת ספריות
מכיוון שקוד היישום אינו מכיל את ספריית הקושחה HT32 files, קוד היישום וספריית הקושחה נפתחו fileיש למקם את s בנתיב הנכון לפני תחילת הקומפילציה. קוד היישום file מכיל בדרך כלל תיקיה אחת או יותר, כגון יישום וספרייה, כפי שמוצג באיור 7. מקם את תיקיית היישום תחת ספריית השורש של ספריית הקושחה HT32 כדי להשלים את file תצורת נתיב, כפי שמוצג באיור 8. לחלופין, פתח את קוד היישום ואת ספריית הקושחה HT32 בו-זמנית לאותו נתיב כדי להשיג את אותן תוצאות תצורה.
איור 7. תוכן HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip
איור 8. נתיב דקומפרסיה
תוכנת מסוף
קוד היישום יכול להעביר הודעות דרך יציאת ה-COM כדי ליישם בחירת פונקציה או תצוגת מצב. זה דורש מהצד המארח להתקין את תוכנת המסוף מראש. המשתמשים יכולים לבחור בתוכנת חיבור מתאימה, או להשתמש בתוכנה חינמית ברישיון כגון Tera Term. בקוד היישום, ערוץ UART מוגדר עם אורך מילה של 8 סיביות, ללא זוגיות, ביט עצור אחד וקצב העברת העברת נתונים של 1bps.
תיאור פונקציונלי
פרק זה יספק תיאור פונקציונלי עבור קוד היישום, כולל מידע על מבנה הספריות, ארכיטקטורת ה-API, תיאור ההגדרות וכו'
מבנה ספריות
קוד האפליקציה file מכיל תיקיית יישום. השכבה הבאה היא תיקיית "Module_UART" המכילה שתי תוכנות יישומים, "UART_Module_Example" ו-"UART_Bridge". הרלוונטי files מפורטים ומתוארים להלן.
טבלה 2. מבנה ספריית קוד יישומים
תיקיה / File שֵׁם | תֵאוּר |
\\application\Module_UART\UART_Module_Example*1 | |
_CreateProject.bat | קבצי סקריפטים ליצירת פרויקט files |
_ProjectSource.ini | אתחול file להוספת קוד מקור לפרויקטים |
ht32_board_config.h | הגדרה file קשור להקצאת קלט/פלט היקפי של IC |
ht32fxxxxxx_01_it.c | תוכנית שירות להפסיק file |
main.c | קוד המקור הראשי של התוכנית |
\\application\Module_UART\UART_Bridge*2 | |
_CreateProject.bat | קבצי סקריפטים ליצירת פרויקט files |
_ProjectSource.ini | אתחול file להוספת קוד מקור לפרויקטים |
ht32_board_config.h | הגדרה file קשור להקצאת קלט/פלט היקפי של IC |
ht32fxxxxxx_01_it.c | תוכנית שירות להפסיק file |
main.c | קוד המקור של התוכנית הראשית |
uart_bridge.h uart_bridge.c | כותרת גשר UART file וקוד מקור file |
\\utilities\middleware | |
uart_module.h*3 uart_module.c*3 | כותרת API file וקוד מקור file |
\\utilities\common | |
ringbuffer.h ring_buffer.c | כותרת חיץ טבעת תוכנה file וקוד מקור file |
פֶּתֶק:
- ב-"UART_Module_Exampקוד היישום le", פעולות הקריאה והכתיבה של ה-API מבוצעות באופן לולאה, עיין ב-"Ex Usage API"ampקטע les" לפרטים נוספים.
- בקוד היישום "UART_Bridge", שני ערוצי UART, UART CH0 ו-UART CH1, מופעלים, ופרוטוקול תקשורת מותאם אישית באמצעות מבני COMMAND מיושם בין שני התקני UART. למידע נוסף, עיין ב"דוגמה לשימוש ב-APIampקטע les.
- קוד היישום צריך להשתמש ב-uart_module.c/h files שיש להם דרישה לגרסת ספריית קושחה. הדרישה עשויה להשתנות מעת לעת בהתאם לעדכון. כדי לאשר את הדרישה הנוכחית של ספריית הקושחה, עיין בתוכן בדיקת התלות על ידי חיפוש מילת המפתח "בדיקת תלות" ב-main.c file. אם גרסת ספריית הקושחה אינה עומדת בדרישות, הורד את הגרסה החדשה ביותר מהקישור המופיע בסעיף "ספריית קושחה".
ארכיטקטורת API
לכל API יש פרמטר חשוב CH, שהוא ערוץ UART. זה קובע באיזה ערוץ UART יש לשלוט. נכון לעכשיו עד ארבעה ערוצי UART נתמכים ולכן ארבעה סמלים קבועים מוגדרים כדלקמן. אלה משמשים כפרמטר CH המספק לממשקי ה-API את הבסיס לשליטה.
- UARTM_CH0: פרמטר קלט - שליטה או תצורה של UART CH0
- UARTM_CH1: פרמטר קלט - שליטה או תצורה של UART CH1
- UARTM_CH2: פרמטר קלט - שליטה או תצורה של UART CH2
- UARTM_CH3: פרמטר קלט - שליטה או תצורה של UART CH3
שטח זיכרון לא יתבזבז אם נעשה שימוש רק בערוץ UART אחד. הסיבה לכך היא שניתן להגדיר את מספר ערוצי ה-UART הנתמכים וקוד ערוץ ה-UART שאינו בשימוש יוסר על ידי המעבד המקדים כדי להגדיל את שטח הזיכרון הפנוי. ארכיטקטורת ה-API מוצגת ב איור 9.
איור 9. תרשים בלוקים של ארכיטקטורת API
כל API מורכב מארבע קבוצות של הגדרות או פקדים הקשורים לערוץ UART כך שמשתמשים צריכים רק להזין את פרמטר ה-CH הרצוי. כדי להגדיר את ה-API הרלוונטי, נדרש רק טבלת פרמטרי תצורה בסיסית נוספת של UART עם טופס המבנה, USART_InitTypeDef. ה-API יישם את התצורה הבסיסית של UART בהתאם לתוכן הפרמטרים בטבלה. עיין בסעיף "תיאור API" עבור טבלת מבנה התצורה הבסיסית של UART.
הקובץ uart_module.c/.h files מכילים רק את ההפרעות (CHx_IRQ) וטבלת המצב (CHx Status) של כל ערוץ UART בעוד שכל ההגדרות הנדרשות לתקשורת UART מסופקות על ידי ht32_board_config.h. הפרמטרים הרלוונטיים לחומרה ב-ht32_board_config.h file מוצגים בטבלה למטה. פרטים נוספים מסופקים בסעיף "תיאור הגדרה".
הפרמטרים הרלוונטיים לחומרה ב-ht32_board_config.h כוללים הגדרות I/O והגדרות יציאת UART פיזית, כדלקמן.
טבלה 3. סמלי הגדרה ב-ht32_board_config.h
סֵמֶל | תֵאוּר |
HTCFG_UARTM_CH0 | שם יציאת UART פיזית; לְשֶׁעָבַרample: UART0, UART1… |
HTCFG_UARTM0_TX_GPIO_PORT | מגדיר את שם היציאה של TX עבור CH0; לְשֶׁעָבַרample: A, B, C… |
HTCFG_UARTM0_TX_GPIO_PIN | מגדיר את מספר ה-PIN של TX עבור CH0; לְשֶׁעָבַרample: 0~15 |
HTCFG_UARTM0_RX_GPIO_PORT | מגדיר את שם היציאה של RX עבור CH0; לְשֶׁעָבַרample: A, B, C… |
HTCFG_UARTM0_RX_GPIO_PIN | מגדיר את מספר ה-PIN של TX עבור CH0; לְשֶׁעָבַרample: 0~15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | מגדיר את גודל מאגר ה-TX עבור CH0; לְשֶׁעָבַרample: 128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | מגדיר את גודל המאגר RX עבור CH0; לְשֶׁעָבַרample: 128 |
כדי לשנות את תצורת ערוץ UART AFIO, עיין בגיליון הנתונים הרלוונטי של המכשיר. נכון לעכשיו רק הגדרות ה-I/O עבור UART CH0 נכנסות לתוקף מכיוון שרק UART CH0 הוגדר ב-ht32_board_config.h. כדי להוסיף UART CH1~3, יש להשלים את הגדרות ה-I/O שלהם על ידי התייחסות להגדרה UART CH0 או הפנייה לסעיף "שינוי הגדרות ושאלות נפוצות".
ישנן שלוש תכונות עיקריות של ארכיטקטורת API:
- עד ארבעה ערוצי UART נתמכים. פרמטרי הקלט שלהם הם UARTM_CH0, UARTM_CH1, UARTM_CH2 ו-UARTM_CH3.
- ניתן להגדיר את מספר ערוצי UART וערוצים שאינם בשימוש לא יקטין את שטח הזיכרון הפנוי.
- כל הגדרות UART והגדרות ה-I/O מופרדות לחלוטין מממשקי ה-API. זה מגביר את נוחות הניהול של הגדרת ערכים ומפחית את האפשרות להגדרות שגויות או חסרות.
תיאור הגדרה
סעיף זה יציג את הגדרות הפרמטרים ב-ht32_board_config.h וב-uart_module.h files.
- ht32_board_config.h: זה file משמש להגדרות פינים והגדרות רלוונטיות ללוח הפיתוח, הכוללות את ערוץ UART IP (UART0, UART1, USART0...) המשמש את ערכת ההתחלה (SK), מיקומי פיני TX/RX תואמים וגודל מאגר TX/RX. איור 10 מציג את תוכן ההגדרות של ערכת המתנע HT32F52352. בהתאם לאינטגרציה הפונקציונלית של הפיתוח, משתמשים יכולים לעיין בסעיף "הקצאת פינים" בגיליון הנתונים של המכשיר בשימוש כדי ליישם את הגדרות הפינים. פרטים נוספים על שינוי הגדרות יתוארו בסעיף "שינוי הגדרות ושאלות נפוצות".
איור 10. הגדרות ht32_board_config.h (HT32F52352)
- uart_module.h: זוהי כותרת ה-API file משמש את קוד היישום, הכולל את הגדרות ברירת המחדל הרלוונטיות, הגדרות פונקציות וכו'. כפי שמוצג באיור 11, ניתן לדרוס את תוכן הגדרות ברירת המחדל על ידי תצורות חיצוניות, כגון ההגדרות ב-ht32_board_config.h file.
איור 11. הגדרות ברירת מחדל ב-uart_module.h
תיאור API
- תיאור סוג הנתונים של קוד האפליקציה.
- USART_InitTypeDef
זהו מבנה התצורה הבסיסי של UART המורכב מתצורות BaudRate, WordLength, StopBits, Parity ו-Mode, כפי שמוצג להלן.מִשְׁתַנֶה שֵׁם סוּג תֵאוּר USART_BaudRate u32 קצב העברת תקשורת UART USART_WordLength u16 אורך מילת תקשורת UART: 7, 8 או 9 סיביות USART_StopBits u16 אורך סיביות עצירת תקשורת UART: 1 או 2 סיביות USART_Parity u16 זוגיות תקשורת UART: זוגיות, אי זוגית, סימן, רווח או ללא זוגיות USART_Mode u16 מצב תקשורת UART; ממשקי ה-API תומכים רק במצב רגיל
- USART_InitTypeDef
- לפני השימוש בפונקציות ה-API, השלם את התצורה הבסיסית של UART בתוכנית הראשית. התצורה הבסיסית של UART עבור קוד יישום זה מוצגת באיור 12. כאן קצב ה-baud הוא 115200bps, אורך המילה הוא 8-bit, אורך סיביות עצור הוא 1-bit, ואין זוגיות.
איור 12. תצורה בסיסית של UART
- איור 13 מציג את פונקציות ה-API המוצהרות ב-uart_module.h file. הטבלאות הבאות מסבירות את הפונקציה, פרמטרי הקלט והשימוש בפונקציות ה-API.
איור 13. הצהרות פונקציות API ב-uart_module.h
שֵׁם | void UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue) | |
פוּנקצִיָה | אתחול מודול UART | |
קֶלֶט | CH | ערוץ UART |
pUART_Init | מצביע מבנה תצורה בסיסי של UART | |
uRxTimeOutValue | ערך פסק זמן של UART RX FIFO. כאשר ה-RX FIFO יקבל נתונים חדשים המונה יתאפס ויתחיל מחדש. ברגע שהמונה יגיע לערך המוגדר מראש ופסקת הזמן המקבילה הופעלה, תיווצר הפסקת פסק זמן. | |
נוֹהָג | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//בצע תצורה בסיסית של UART//עיין באיור 12 לתצורת USART_InitStructure |
שֵׁם | u32 UARTM_WriteByte(u32 CH, u8 uData) | |
פוּנקצִיָה | פעולת כתיבה של מודול UART (TX) | |
קֶלֶט | CH | ערוץ UART |
uData | הנתונים שיכתבו | |
תְפוּקָה | הַצלָחָה | מוּצלָח |
שְׁגִיאָה | נִכשָׁל | |
נוֹהָג | UARTM_WriteByte(UARTM_CH0, 'A'); //UART כותב 1 בייט - 'A' |
שֵׁם | u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLength) | |
פוּנקצִיָה | פעולת כתיבה של מודול UART (TX) | |
קֶלֶט | CH | ערוץ UART |
pBuffer | מצביע מאגר | |
uLength | אורך הנתונים שייכתבו | |
תְפוּקָה | הַצלָחָה | מוּצלָח |
שְׁגִיאָה | נִכשָׁל | |
נוֹהָג | u8 Test[] = "זהו מבחן!\r\n"; UARTM_Write(UARTM_CH0, Test, sizeof(Test) -1); //UART כותב נתוני pBuffer |
שֵׁם | u32 UARTM_ReadByte(u32 CH, u8 *pData) | |
פוּנקצִיָה | פעולת קריאת בתים של מודול UART (RX) | |
קֶלֶט | CH | ערוץ UART |
pData | הכתובת להצבת נתוני הקריאה | |
תְפוּקָה | הַצלָחָה | מוּצלָח |
שְׁגִיאָה | נכשל (ללא נתונים) | |
נוֹהָג | u8 TempData; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//If UARTM_ReadByte() מחזירה SUCCESS אז UART כותב את בייט הנתונים הזה |
שֵׁם | u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLength) | |
פוּנקצִיָה | פעולת קריאה של מודול UART (RX) | |
קֶלֶט | CH | ערוץ UART |
pBuffer | מצביע מאגר | |
uLength | אורך הנתונים שיש לקרוא | |
תְפוּקָה | ספירת לקרוא | אורך הנתונים נקרא |
נוֹהָג | u8 Test2[10]; u32 לן; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() קורא 5 בתים של נתונים ומאחסן נתונים ב-Test2, ומקצה את ספירת הביטים הנקראים ל-Len//כתוב את הנתונים שמקורם ב-Test2 |
שֵׁם | u32 UARTM_GetReadBufferLength(u32 CH) | |
פוּנקצִיָה | השג את אורך מאגר הקריאה (RX) | |
קֶלֶט | CH | ערוץ UART |
תְפוּקָה | uLength | קרא את אורך המאגר |
נוֹהָג | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //אתחול מודול UART while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//המתן עד ש-UARTM_ReadBuffer קיבל 5 בתים של נתונים |
שֵׁם | u32 UARTM_GetWriteBufferLength(u32 CH) | |
פוּנקצִיָה | השג את אורך מאגר הכתיבה (TX) | |
קֶלֶט | CH | ערוץ UART |
תְפוּקָה | uLength | כתוב אורך חיץ |
שֵׁם | u8 UARTM_IsTxFinished(u32 CH) | |
פוּנקצִיָה | השג את סטטוס ה-TX | |
קֶלֶט | CH | ערוץ UART |
תְפוּקָה | נָכוֹן | סטטוס TX: הסתיים |
שֶׁקֶר | סטטוס TX: לא הסתיים | |
נוֹהָג | UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // “uart_module.c” SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif //ממשק API זה יכול לשמש כדי לבדוק את מצב ה-TX, כפי שמוצג לעיל; המתן עד שה-API של UARTM_WriteByte() יסתיים, כלומר, סטטוס TX הוא TRUE, ולאחר מכן המשך בפעולות הבאות.//הוספה הגבלה מכיוון שפונקציה זו לא נוספה עד שמספר הגרסה של SVN ב-uart_module.c הוא 525. |
שֵׁם | בָּטֵל UARTM_DiscardReadBuffer(u32 CH) | |
פוּנקצִיָה | השלך את הנתונים במאגר הקריאה | |
קֶלֶט | CH | ערוץ UART |
שימוש ב-API למשלamples
חלק זה ידגים כתיבה וקריאה של ממשק APIampקבצים של קוד היישום "Module_UART" תוך שימוש בתהליך האתחול ו-"UART_Module_Example” תהליך קוד יישום. לפני השימוש בממשקי ה-API, המשתמשים צריכים לכלול את כותרת ה-API file לתוך קוד המקור הראשי של התוכנית file (#include "middleware/uart_module.h").
כפי שמוצג באיור 14, כאשר נכנסים לתהליך האתחול, הגדר תחילה את מבנה התצורה הבסיסי של UART. לאחר מכן הגדר את חברי מבנה התצורה הבסיסי של UART, כולל BaudRate, WordLength, StopBits, Parity ו-Mode. לבסוף, קרא לפונקציית אתחול ה-API, שהשלמתה מציינת את סוף תהליך האתחול. לאחר מכן המשתמשים יכולים להמשיך בפעולות הכתיבה והקריאה בהתבסס על התצורה הבסיסית של UART המוגדרת מראש.
איור 14. אתחול תרשים זרימה
"UART_Module_Exampקוד היישום le" מדגים את פעולות הקריאה והכתיבה של ה-API בצורה לולאה חוזרת. תרשים הזרימה לכך מוצג באיור 15. פונקציות ה-API המשמשות כוללות UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() ו-UARTM_GetReadBufferLength(). התיאור שלהם מסופק בסעיף "תיאור API".
איור 15. תרשים זרימה של דוגמה לכתיבה וקריאהamples
קיים קוד יישום נוסף של "UART_Bridge" תחת התיקיה "Module_UART" הקשור file התיאור מוצג בסעיף "מבנה ספריה". קוד היישום "UART_Bridge" מפעיל שני ערוצי UART, UART CH0 ו-UART CH1, ולאחר מכן מותאם אישית את פרוטוקול התקשורת בין שני התקני UART באמצעות מבני COMMAND, gCMD1 ו-gCMD2. אלה מוגדרים ב-uart_bridge.c, כפי שמוצג להלן. UARTBridge_CMD1TypeDef gCMD1:
מִשְׁתַנֶה שֵׁם | סוּג | תֵאוּר |
uHeader | u8 | כּוֹתֶרֶת |
uCmd | u8 | פְּקוּדָה |
uData[3] | u8 | נְתוּנִים |
UARTBridge_CMD2TypeDef gCMD2:
מִשְׁתַנֶה שֵׁם | סוּג | תֵאוּר |
uHeader | u8 | כּוֹתֶרֶת |
uCmdA | u8 | פקודה א |
uCmdB | u8 | פקודה ב' |
uData[3] | u8 | נְתוּנִים |
בקוד היישום "UART_Bridge", השתמש ב-gCMD1 כדי לקבל נתונים כחבילת פקודה ולאחר מכן נתח אותם. לאחר מכן על פי פרוטוקול התקשורת המותאם, הגדר את gCMD2 כחבילת תגובה ושדר אותה. להלן אקסample של חבילת פקודה gCMD1) וחבילת תגובה (gCMD2). חבילת פקודה (UARTBridge_CMD1TypeDef gCMD1):
בייט 0 | בייט 1 | בייט 2 ~ בייט 4 |
uHeader | uCmd | uData [3] |
"א" | "1" | "x, y, z" |
חבילת תגובה (UARTBridge_CMD2TypeDef gCMD2):
בייט 0 | בייט 1 | בייט 2 | בייט 3 ~ בייט 5 |
uHeader | uCmdA | uCmdB | uData [3] |
"ב" | "א" | "1" | "x, y, z" |
עיסוק במשאבים
לוקח את ה-HT32F52352 כאקסample, המשאבים התפוסים על ידי מודול UART מוצגים להלן.
HT32F52352 | |
גודל ROM | 946 בתים |
גודל זיכרון RAM | 40*1 + 256*2 בתים |
פֶּתֶק:
- משתנים גלובליים כולל דגלים וסטטוס לערוץ בודד תופסים 40 בתים של זיכרון RAM.
- זה מיועד למצב שבו נעשה שימוש בערוץ בודד וגודל המאגר TX/RX הוא 128/128 בתים. ניתן להגדיר את גודל המאגר בהתאם לדרישות היישום.
טבלה 4. עיסוק במשאבים בקוד יישום
- סביבת קומפילציה: MDK-Arm V5.36, ARMCC V5.06 עדכון 7 (build 960)
- אפשרות אופטימיזציה: רמה 2 (-O2)
הוראות שימוש
פרק זה יציג את ההכנה הסביבתית לקוד היישום "Module_UART", כמו גם את שלבי ההידור והבדיקה.
הכנה סביבתית
החומרה והתוכנה הדרושים עבור קוד היישום "Module_UART" מפורטות להלן.
טבלה 5. הכנה סביבתית של חומרה/תוכנה
חומרה/תוכנה | לִסְפּוֹר | פֶּתֶק |
ערכת התחלה | 1 | הערת יישום זו משתמשת בערכת המתנע HT32F52352 כאקסample |
כבל USB | 1 | מיקרו USB, מחובר למחשב |
קוד יישום | — | נתיב ההורדה, file ותצורת ספריה מוצגים בסעיף "הורדה והכנת משאבים". נתיב: "\\application\Module_UART\UART_Module_Example ” |
Term Tera | — | עיין בסעיף "תוכנת טרמינלים". |
Keil IDE | — | Keil uVision V5.xx |
ראשית, השתמש בערכת Starter HT32F52352 בשילוב עם פונקציית יציאת ה-Virtual COM (VCP) של e-Link32 Lite עבור היכרות עם יישום UART. לשם כך יש ליישם את ההכנה הסביבתית הבאה:
- ישנם שני ממשקי USB על הלוח. השתמש בכבל ה-USB כדי לחבר את המחשב האישי ואת ממשק eLink32 Lite על הלוח כפי שמוצג באיור 16-(א).
- מכיוון שקוד היישום צריך להשתמש בפונקציה e-Link32 Lite Virtual COM Port (VCP), ודא שה-PAx*2 ו-DAP_Tx של UART Jumper-J2*1 קוצרו באמצעות מגשר. מיקום J2 מצוין על ידי איור 16-(ב).
פֶּתֶק
- ל-J2 בערכת המתנע יש שתי אפשרויות, PAx ו-DAP_Tx קצרים או PAx ו-RS232_Tx קצרים. עיין במדריך למשתמש של ערכת Starter עבור פונקציות ההגדרה המפורטות.
- מיקום סיכת MCU UART RX בערכות המתנע השונות שונה. האקסית הזוample משתמש ב-PAx כדי לציין את סיכת ה-RX.
איור 16. תרשים בלוקים של ערכת המתנע HT32
כעת השתמש בלוח היעד של המשתמש בשילוב עם פונקציית יציאת ה-Virtual COM (VCP) של ה-e-Link32 Pro עבור היכרות עם יישום UART. לשם כך יש ליישם את ההכנה הסביבתית הבאה:
- צד אחד של e-Link32 Pro מחובר למחשב באמצעות כבל מיני USB והצד השני מחובר ללוח היעד של המשתמש באמצעות הכבל האפור 10 סיביות שלו. החיבור בין ממשקי ה-SWD של הכבל ולוח היעד מיושם באמצעות קווי Dupont, כפי שמוצג באיור 17-(א).
- פיני התקשורת הטוריים של ה-e-Link32 Pro הם Pin#7 VCOM_RXD ו-Pin#8-VCOM_TXD. אלה צריכים להיות מחוברים לפיני TX ו-RX של לוח היעד של המשתמש, כפי שמוצג באיור 17-(ב).
איור 17. תרשים בלוקים של e-Link32 Pro + לוח יעדי משתמש
קומפילציה ובדיקה
סעיף זה ייקח את "application\Module_UART\UART_Module_Example" כאקסampלהציג את תהליכי ההידור והבדיקה. לפני כן, ודא שכל ההכנות שתוארו בסעיף הקודם יושמו ושהורדה תוכנת המסוף Tera Term.
שלבי הפעולה המפורטים מסוכמים להלן.
שלב 1. בדיקת הפעלה
הגדר את סביבת החומרה כמתואר בסעיף הקודם. לאחר ההפעלה, נורית ההפעלה של D9 בפינה השמאלית התחתונה של ערכת המתנע תואר. נורית ה-USB D1 ב-e-Link32 Lite בצד ימין למעלה תואר לאחר סיום ספירת ה-USB. אם D1 אינו מואר לאחר פרק זמן ארוך, ודא אם כבל ה-USB מסוגל לתקשר. אם לא, הסר אותו והכנס אותו שוב.
שלב 2. צור פרויקט
פתח את היישום\Module_UART\UART_Module_Exampהתיקיה, לחץ על _CreateProject.bat file כדי ליצור פרויקט, כפי שמוצג באיור 18. מכיוון שהערת יישום זו משתמשת בערכת Starter HT32F52352, פתח את פרויקט Keil IDE "Project_52352.uvprojx" שנמצא מתחת לתיקיית MDK_ARMv5.
איור 18. הפעל את _CreateProject.bat כדי ליצור פרויקט
שלב 3. קומפילציה ותכנת
לאחר פתיחת הפרויקט, תחילה לחץ על "Build" (או השתמש בקיצור "F7"), ולאחר מכן לחץ על "הורד" (או השתמש בקיצור "F8"). לאחר מכן, תוצאות הבנייה וההורדה יוצגו בחלון Build Output. ראה איור 19.
איור 19. בנה והורד תוצאות
שלב 4. פתח את תוכנת Tera Term והגדר את היציאה הטורית
פתח את תוכנת Tera Term ואת יציאת ה-COM. שימו לב אם מספר יציאת ה-COM שנוצר על-ידי ערכת המתחילים נכון או לא. לאחר מכן לחץ על "הגדרה >> יציאה טורית" כדי להיכנס לממשק התצורה. תצורת ממשק UART של קוד היישום "Module_UART" מתוארת בסעיף "תוכנת טרמינל". תוצאת ההגדרה מוצגת באיור 20.
איור 20. תוצאת הגדרת יציאה טורית של Tera Term
שלב 5. אפס את המערכת ובדוק
לחץ על מקש איפוס SK – B1 Reset. לאחר מכן, "ABCThis is test!" הודעה תהיה
מועבר דרך ה-API ויוצג בחלון Tera Term, כפי שמוצג באיור 21. לגבי פונקציית הקבלה, בעת הזנת נתונים לחלון Tera Term, ה-API הרלוונטי ישמש לקביעת אורך מאגר הקבלה. כאשר הנתונים המתקבלים על ידי המחשב מגיעים ל-5 בתים, 5 בתים של נתונים שהתקבלו יישלחו ברצף. כפי שמוצג באיור 22, הנתונים שהוזנו ברצף הם "1, 2, 3, 4, 5", אשר מתקבלים ונקבעים באמצעות ה-API. לאחר מכן, הנתונים "1, 2, 3, 4, 5" יודפסו לאחר חמש הכניסות.
איור 21. "Module_UART" בדיקה פונקציונלית של קוד יישום - שידור
איור 22. "Module_UART" מבחן פונקציונלי של קוד יישום - קבלה
הוראות השתלה
חלק זה יציג כיצד לשלב את ממשקי ה-API בפרויקטים של המשתמש.
שלב 1. הוסף את ה-uart_module.c file לתוך הפרויקט. לחץ לחיצה ימנית על תיקיית המשתמש. בחר "הוסף קיים Files לקבוצה 'משתמש'...", ולאחר מכן בחר את uart_module.c file ולחץ על "הוסף", כפי שמוצג באיור 23. עיין בסעיף "מבנה ספריה" עבור file תיאור הנתיב.
איור 23. הוסף uart_module.c File לפרויקט
שלב 2. הוסף את ring_buffer.c file לתוך הפרויקט. לחץ לחיצה ימנית על תיקיית המשתמש. בחר "הוסף קיים Files לקבוצה 'משתמש'...", ולאחר מכן בחר את ring_buffer.c file ולחץ על "הוסף", כפי שמוצג באיור 24.\ עיין בסעיף "מבנה ספרייה" עבור file תיאור הנתיב.
איור 24. הוסף ring_buffer.c File לפרויקט
שלב 3. כלול את כותרת ה-API file לתוך ההתחלה של main.c, כפי שמוצג באיור 25. (שלוחה: #include "middleware/uart_module.h")
איור 25. כלול כותרת API File ל-main.c
שלב 4. יישם את ההגדרות הנדרשות לתקשורת UART באמצעות ht32_board_config.h file. זה מוצג בפירוט בסעיפים "תיאור הגדרות" ו"שינוי הגדרות ושאלות נפוצות".
שינוי הגדרות ושאלות נפוצות
חלק זה יציג כיצד לשנות את הגדרות UART ויסביר כמה שאלות נפוצות שנתקלו במהלך השימוש.
שנה הקצאת Pin UART
- בהתייחס לפרק "הקצאת פינים" בגליון הנתונים של HT32F52352, חפש את טבלת מיפוי הפונקציות החלופיות המפרטת את פונקציות AFIO של סוג ההתקן. עבור הפינים הרלוונטיים ל-UART, עיין בעמודה "AF6 USART/UART", כפי שמוצג באיור 26.
איור 26. HT32F52352 טבלת מיפוי פונקציות חלופיות
- שלב זה ינחה את המשתמשים לאתר את פיני UART התואמים באמצעות הטבלה לעיל. ה-HT32F52352 לשעברample משתמש ב-USART1 כערוץ ברירת המחדל. כאן, פיני ה-TX וה-RX הם USR1_TX ו-USR1_RX וממוקמים על PA4 ו-PA5 בהתאמה. איור 27 מציג את התאמת הפינים כמו גם את הגדרות הפינים ב-"ht32_board_config.h". השדות הריקים של "Package" בטבלת הקצאת הפינים פירושם שאין GPIOs רלוונטיים בחבילה זו. כדי לשנות את פיני UART, מצא את מיקומי פיני היעד והגדר מחדש את הפינים באמצעות "ht32_board_config.h" file.
איור 27. התכתבות פינים ושינוי הגדרות
הוסף ערוץ UART
לוקח את ה-HT32F52352 HTCFG_UARTM_CH1 כאקסample, כאן מתואר כיצד להוסיף ערוץ UART חדש.
שנה את ה-ht32_board_config.h file
בהתייחס לפרק "הקצאת פינים" בגליון הנתונים של HT32F52352, חפש את טבלת מיפוי הפונקציות החלופיות המפרטת את פונקציות AFIO של סוג ההתקן. מכיוון ש-USART1 שימש כ-HTCFG_UARTM_CH0, ה-HTCFG_UARTM_CH1 החדש שנוסף יכול לבחור ב-USART0. כאן, פיני TX ו-RX ממוקמים על PA2 ו-PA3 בהתאמה, כפי שמוצג במחצית העליונה של איור 28. השינויים המתאימים מיושמים באמצעות שורות קוד 120~126 ב-ht32_board_config.h, כפי שמוצג על ידי התיבה המקווקת האדומה באיור 28.
איור 28. הוסף ערוץ UART
שאלות נפוצות
Q: בשלב 5 של סעיף הידור ובדיקה, הבדיקה התפקודית של השידור היא תקינה. הנה, "ABCThis is test!" ההודעה הוצגה בהצלחה, אולם עבור פונקציית הקבלה, מדוע חמשת ערכי הקלט אינם מוחזרים ומוצגים?
A: בדוק אם פיני MCU UART RX ו-DAP_Tx של UART Jumper-J2 קוצרו באמצעות מגשר. מכיוון שקוד היישום "Module_UART" צריך להשתמש ביציאת ה-Virtual COM (VCP) של e-Link32 Lite, יש להחיל את הגדרת הקצר על שני הפינים השמאליים של UART Jumper-J2, כפי שמוצג באיור 29.
איור 29. הגדרת UART Jumper-J2
ש: אחרי ביצוע "Build" (או קיצור דרך "F7"), מופיעה הודעת שגיאה המציינת שגרסת ספריית הקושחה ישנה יותר מזו הנדרשת? ראה איור 30.
A: היישום של קוד היישום "Module_UART" צריך לכלול את ה-uart_module.c/h files שיש לו דרישה לגרסת ספריית קושחה מסוימת. כאשר מופיעה הודעת שגיאה כזו, פירוש הדבר שספריית הקושחה הנמצאת בשימוש כעת היא גרסה ישנה יותר. לכן יש צורך להוריד את הגרסה החדשה ביותר דרך הקישור המופיע בסעיף "ספריית קושחה".
איור 30. הודעת שגיאה של גרסת ספריית קושחה
מַסְקָנָה
מסמך זה סיפק מבוא בסיסי כדי לסייע למשתמשים בהבנה טובה יותר של קוד היישום "Module_UART" ופרוטוקול התקשורת של UART. לאחר מכן הורדה והכנה של המשאבים. פרק התיאור הפונקציונלי הציג את ה file מבנה ספריות, ארכיטקטורת ה-API, תיאור ה-API ושימוש ב-API, למשלamples. פרק ההוראות לשימוש הדגים את ההכנה הסביבתית, ההידור והבדיקה של קוד היישום "Module_UART". זה גם סיפק הנחיות להגדרת השתלת קוד ושינוי, כמו גם הסבר על כמה בעיות נפוצות שעלולות להיתקל בהן. כל זה יחד יאפשר למשתמשים להבין במהירות כיצד להשתמש בממשקי ה-API ובהמשך להפחית את משך הזמן להתחיל.
חומר עזר
למידע נוסף, עיין ב- Holtek webאתר: www.holtek.com
גרסאות ומידע על שינויים
תַאֲרִיך | מְחַבֵּר | לְשַׁחְרֵר | מידע על שינוי |
2022.04.30 | 蔡期育(צ'י-יו צאי) | V1.00 | גרסה ראשונה |
כתב ויתור
כל המידע, הסימנים המסחריים, הלוגואים, הגרפיקה, הסרטונים, קטעי האודיו, הקישורים ופריטים אחרים המופיעים באתר זה webהאתר ('מידע') הינם לעיון בלבד ונתון לשינויים בכל עת ללא הודעה מוקדמת ולפי שיקול דעתה של Holtek Semiconductor Inc. והחברות הקשורות אליה (להלן 'Holtek', 'החברה', 'אנחנו', ' אנחנו' או 'שלנו'). בעוד Holtek משתדלת להבטיח את דיוק המידע בנושא זה webבאתר, לא ניתנת אחריות מפורשת או משתמעת על ידי Holtek לדיוק המידע. Holtek לא תישא באחריות לכל אי נכונות או דליפה.
הולטק לא תישא באחריות לכל נזק (לרבות אך לא מוגבל לווירוס מחשב, בעיות מערכת או אובדן נתונים) מכל סוג שהוא שיתעורר בשימוש או בקשר עם השימוש בו. webאתר על ידי כל צד. ייתכן שיהיו קישורים באזור זה, המאפשרים לך לבקר ב webאתרים של חברות אחרות.
אֵלֶה webהאתרים אינם בשליטת Holtek. Holtek לא תישא באחריות ובשום ערבות לכל מידע שיוצג באתרים כאלה. היפר-קישורים לאחרים webהאתרים הם על אחריותך בלבד.
הגבלת אחריות
בשום מקרה לא תישא הולטק מוגבלת באחריות כלפי כל צד אחר לכל אובדן או נזק כלשהו או מכל סוג שהוא שייגרמו במישרין או בעקיפין בקשר עם הגישה או השימוש שלך בו. webהאתר, התוכן שבו או כל סחורה, חומרים או שירותים.
החוק השולט
כתב הוויתור הכלול ב- webהאתר יהיה כפוף לחוקי הרפובליקה של סין ויתפרשו בהתאם. המשתמשים יימסרו לסמכות השיפוט הלא-בלעדית של בתי המשפט של הרפובליקה של סין.
עדכון של כתב ויתור
Holtek שומרת לעצמה את הזכות לעדכן את כתב הוויתור בכל עת עם או בלי הודעה מוקדמת, כל השינויים ייכנסו לתוקף מיד עם הפרסום ב- webאֲתַר.
מסמכים / משאבים
![]() |
הערה ליישום HOLTEK HT32 MCU UART [pdfמדריך למשתמש HT32 MCU, הערת יישום UART, HT32 MCU UART, הערת יישום, HT32, MCU UART הערת יישום, הערת יישום HT32 MCU UART |