- תקשורת טורית על STM8S103F3P6
- סיכות תקשורת סדרתיות על STM8S103F3P6
- תרשים מעגלים לתקשורת טורית STM8S
- הגדרת STVD לתקשורת סדרתית
- תכנות STM8S לתקשורת טורית
- שליטה על נורית ממוניטור סדרתי
- STM8S הספרייה הסדרתית מראה עמוק יותר
תכנות מיקרו-בקר חדש לוקח לרוב זמן רב יותר בגלל שיטות הטיפול החדשות ברישום ולא יודעים איזה סיבית עושה בדיוק מה. כך גם לגבי ניפוי באגים בלי לומר. זו הסיבה שמתכנתים משתמשים לעתים קרובות בנקודות הפסקה בקוד שלהם ועוברים דרכם באמצעות ניפוי באגים. אך שימוש בבאגים עשוי להזדקק לחומרה נוספת (הכי יקרה) וגם לזמן נוסף. בהיותו נער אוהד של ארדואינו, דבר אחד שכולנו יכולים להסכים הוא להשתמש בהצהרות הדפסה סדרתיות לצורך איתור באגים והבנת הקוד שלנו מקלה על החיים. מה אנחנו יכולים לשכפל אותו על STM8 עם מהדר C קוסמי וספריות SPL? ובכן, זה מאוד אפשרי, וזה בדיוק מה שאנחנו הולכים לעשות במדריך השלישי הזה של סדרת ההדרכות שלנו.אתה גם בודק את תחילת העבודה עם STM8S (הדרכה 1) ובקרת STIO8 GPIO (הדרכה 2) אם אתה חדש לגמרי כאן. כמו כן, בדקנו את האפשרות לתכנת STM8S עם Arduino למתחילים מהירים. כל האמור בואו ניכנס להדרכה.
תקשורת טורית על STM8S103F3P6
מגליון הנתונים של STM8S103F3P6 אנו יכולים לראות שבקר 8 הסיביות שלנו תומך בתקשורת UART במצבים רבים ושונים. לבקר יש גם סיכת פלט שעון לתקשורת UART סינכרונית והוא יכול גם לתמוך ב- SmarCard, IrDA ו- LIN. אבל לא נבדוק כל זה במדריך זה רק כדי להתרחק מהמורכבות. נלמד כיצד לבצע קריאה וכתיבה פשוטים של UART.
המדריך מספק גם קובץ כותרת בשם stm8s103 serial.h ובאמצעותו תוכלו לבצע פקודות UART פשוטות כמו Serial begin, קריאה טורית, הדפסה טורית וכו '. בעיקרון תוכלו להדפיס char, int ו- string למוניטור הטורי. וגם לקרוא char מהצג הסדרתי. בסוף מדריך זה תוכלו לשלוט על נורית מהצג הסדרתי ולקבל משוב על מצב הנורית. קובץ הכותרת שהוזכר לעיל תלוי בספריות SPL, לכן וודא כי עקבת אחר מדריך ההתחלה.
סיכות תקשורת סדרתיות על STM8S103F3P6
נתחיל מצד החומרה. במבט מהיר על המסתובבים במיקרו-בקר STM8S103F3P6 המפורטים להלן, אנו יכולים לראות כי סיכות 1, 2 ו- 3 ישמשו לתקשורת UART.
בין השלושה, סיכה 1 היא סיכת השעון של UART אשר תשמש רק במהלך תקשורת UART סינכרונית, כך שלא נצטרך אותה כאן. סיכה 2 היא סיכת משדר ה- UART וסיכה 3 היא סיכת מקלט ה- UART. שים לב שסיכות אלה יכולות לשמש גם כסיכה אנלוגית או כסיכת GPIO רגילה.
תרשים מעגלים לתקשורת טורית STM8S
תרשים המעגל כאן פשוט מאוד, עלינו לחבר את ST-LINK 2 שלנו לתכנות וממיר USB ל- TTL לקריאת נתונים סדרתיים. שים לב שבקר STM8S שלנו עובד ברמת לוגיקה של 3.3 וולט, אז וודא שממיר ה- USB שלך ל- TTL תומך גם בהיגיון של 3.3 וולט. תרשים המעגל המלא מוצג להלן.
עליכם לחבר את קישור ה- ST שלכם ביציאת USB אחת וממיר USB ל- TTL ביציאת USB אחרת של המחשב הנייד, כך שתוכלו גם לתכנת ולפקח על נתונים בו זמנית. חיבור ה- UART פשוט, פשוט חבר את הקרקע ואת סיכת ה- Rx / Tx של STM8S המיקרו-בקר שלך לסיכות ה- Tx / Rx של ממיר ה- USB ל- TTL. הנה הפעלתי את הבקר עם סיכת ה- Vcc של ST-Link והשארתי את סיכת ה- VSS של ממיר TTL פתוח, אתה יכול גם לעשות זאת להיפך. ישנם סוגים רבים של ממיר USB ל- TTL בשוק, רק וודא שהוא יכול לפעול על אותות לוגיים של 3.3 וולט ומראה פשוט של סיכות Tx, Rx ו- GND וביצוע החיבור שמוצג לעיל. הגדרת החומרה שלי מוצגת למטה.
כדי ליצור דרך תקשורת טורית, סיפקנו את קובץ הכותרת STM8S_Serial.h . באמצעות קובץ כותרת זו תוכלו לבצע פונקציות פשוטות כמו ארדואינו לתקשורת טורית.
תוכל למצוא את כל הקבצים הנדרשים לפרויקט זה בדף Github STM8S103F3_SPL שלנו. אם אתה זקוק רק לקובץ הכותרת הספציפי הזה, אתה יכול להוריד אותו מהקישור למטה.
הורד את STM8S_Serial.h
הגדרת STVD לתקשורת סדרתית
כדי לעבוד עם תקשורת טורית, נשתמש ברבים באמצעות פונקציית קובץ הכותרת STM8S_Serial.h עליה דנו קודם. אך לספרייה יש תלות אחרות, רבות כותרות SPL UART ושעון הקשורות וקבצי C. אז מנקודה זו, עדיף לכלול את כל כותרות הקבצים ו- C לפרויקט שלנו כדי למנוע שגיאת אוסף. סביבת העבודה שלי ב- STVD נראית כך.
ודא שכללת את כל קבצי המקור של SPL והכלל את הקובץ כמו שעשינו במדריך הראשון שלנו. וודא גם שהוספת את קובץ הכותרת stm8s103_serial.h . אין קובץ C לכותרת זו.
תכנות STM8S לתקשורת טורית
לאחר שהתקנת פרויקט STVD מוכנה, אנו יכולים להתחיל לכתוב את הקוד שלנו בקובץ main.c. הקוד השלם להדרכה זו נמצא בתחתית עמוד זה. ההסבר הוא כדלקמן.
השלב הראשון הוא לכלול את קבצי הכותרת הנדרשים, כאן הוספתי את קובץ הכותרת הראשי (stm8s) ואת קובץ הכותרת stm8s_103_serial שהורדנו זה עתה.
// כותרות נדרשות # כוללות "STM8S.h" #include "stm8s103_serial.h" //https://github.com/CircuitDigest/STM8S103F3_SPL/blob/master/stm8s103%20 Libraries/stm8s103_Serial.h
לאחר מכן אנו משתמשים במקרו העיצוב כדי לציין את סיכות הקלט והפלט. כאן תהיה רק שליטה על נורית הלוח המחוברת לסיכה 5 של יציאה B, לכן אנו נותנים לה שם כ- test_LED .
#define test_LED GPIOB, GPIO_PIN_5 // נורית הבדיקה מחוברת ל- PB5
במעבר לפונקציה הראשית נגדיר את הפין כפלט. אם אינך מכיר פונקציות בסיסיות של GPIO, חזור למדריך STIO8 GPIO.
// הגדרות פינים // הכריזו על PB5 כמשוך דחיפה סיכת פלט GPIO_Init (test_LED, GPIO_MODE_OUT_PP_LOW_SLOW);
לאחר מכן אנו מאותחלים את יציאות התקשורת הטוריות שלנו בקצב של 9600 baud. עבור אנשים חדשים, 9600 הוא קצב המהירות שבו סיביות הנתונים יועברו במהלך התקשורת. אם אתה מגדיר 9600 כאן, אתה צריך להגדיר אותו גם בתוכנת הניטור. לאחר מכן אנו גם מדפיסים מחרוזת "הזן פקודה" ועוברים לשורה הבאה.
Serial_begin (9600); // אתחל תקשורת טורית בקצב שידור 9600 Serial_print_string ("הזן פקודה"); // הדפיסו מחרוזת Serial_newline (); // לעבור לשורה הבאה
במעבר לאינסוף תוך כדי לולאה, אנו משתמשים בפונקציה Serial_available כדי לבדוק אם ישנם נתונים טוריים נכנסים. אם כן, אנו קוראים ושומרים אותו במשתנה הנקרא ch וגם מדפיסים אותו באמצעות Serial_print . ואז אם הערך שהתקבל הוא 0, נכבה את ה- LED ואם הוא 1, נדליק את ה- LED
אם (Serial_available ()) {Serial_print_string ("לחצת:"); ch = Serial_read_char (); Serial_print_char (ch); Serial_newline (); אם (ch == '0') GPIO_WriteHigh (test_LED); // נורית כבויה אם (ch == '1') GPIO_WriteLow (test_LED); // נורית דולקת}
עם זאת, התכנות ללימוד זה הושלם, פשוט העלה את הקוד שניתן בתחתית עמוד זה ואתה אמור להיות מסוגל לשלוט על ה- LED מהצג הטורי.
שליטה על נורית ממוניטור סדרתי
לאחר שהעלתם את הקוד, תוכלו לפתוח כל צג סדרתי בקצב של 9600 baud. השתמשתי בצג הסדרתי של Arduino עצמו כדי להקל על השימוש בו. לחץ על כפתור האיפוס ואתה אמור לראות את ההודעה "הזן פקודה". ואז אם אתה מזין 1 ולחץ על Enter, נורית הלוח צריכה להידלק, באופן דומה עבור 0, זה צריך להיכבות.
את העבודה המלאה ניתן למצוא בסרטון המקושר בתחתית עמוד זה. אם יש לך שאלות, אנא השאר אותן במדור התגובות. אתה יכול גם להשתמש בפורומים שלנו כדי לפרסם שאלות טכניות אחרות.
STM8S הספרייה הסדרתית מראה עמוק יותר
לאותם מוחות סקרנים שרוצים לדעת מה באמת קורה בתוך קובץ הכותרת STM8S103F3_Serial קראו עוד…
קובץ כותרת זה עובד היטב לתכנות ברמה למתחילים, אך אם אתה משתמש בגרסה אחרת של בקר STM8S או מחפש כמה אפשרויות מתקדמות, ייתכן שתרצה לשנות את הכותרת הזו מעט או לעבוד ישירות עם ספריות SPL. כתבתי את קובץ הכותרת הזה בדיוק כמו הבשלה מקובץ הכותרת UART1, ההסבר על קובץ הכותרת שלי הוא כדלקמן.
קריאת דמות מ- Serial Monitor
פונקציה זו מסייעת לקריאת תו יחיד שנשלח למיקרו-בקר מהצג הטורי.
char Serial_read_char (void) {while (UART1_GetFlagStatus (UART1_FLAG_RXE) == RESET); UART1_ClearFlag (UART1_FLAG_RXNE); החזר (UART1_ReceiveData8 ()); }
אנו ממתינים עד שדגל ה- RXE מוגדר להשלמת הקליטה ואז נקה את הדגל כדי לאשר את הקבלה. לבסוף, אנו שולחים את הנתונים שקיבלו 8 סיביות כתוצאה מפונקציה זו.
הדפסת תו לצג סידורי
פונקציה זו מעבירה תו יחיד ממיקרו-בקר לצג הסדרתי.
בטל Serial_print_char (ערך char) {UART1_SendData8 (ערך); בעוד (UART1_GetFlagStatus (UART1_FLAG_TXE) == RESET); // המתן למשלוח}
הפונקציה פשוט כותבת את ערך 8 הסיביות ומחכה עד לסיום השידור על ידי סימון ה- UART1_FLAG_TXE ל SET.
אתחול תקשורת טורית
פונקציה זו מאתחלת את התקשורת הסדרתית בקצב השידור הנדרש.
בטל Serial_begin (uint32_t baud_rate) {GPIO_Init (GPIOD, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST); GPIO_Init (GPIOD, GPIO_PIN_6, GPIO_MODE_IN_PU_NO_IT); UART1_DeInit (); // לבטל את הניתוח מחדש של ציוד היקפי של UART // (BaudRate, Wordlegth, StopBits, Parity, SyncMode, Mode) UART1_Cmd (ENABLE); }
מלבד קצב השידור, יש להגדיר פרמטרים אחרים לתקשורת סדרתית, כמו מספר סיביות הנתונים, מספר סיביות העצירה, זוגיות וכו '. הנפוץ ביותר (בדומה לארדואינו) הוא נתוני 8 סיביות. עם ביט עצירה אחד וללא זוגיות ומכאן שזו תהיה הגדרת ברירת המחדל. אתה יכול לשנות את זה במידת הצורך.
הדפסת מספר שלם למסך סידורי
לרוב, אם אנו משתמשים בצג סדרתי לצורך איתור באגים או ניטור, אולי נרצה להדפיס משתנה מסוג int לצג הטורי. פונקציה זו עושה בדיוק את זה
בטל Serial_print_int (מספר int) // פונקציה להדפסת ערך int לפקח טורי {char count = 0; ספרת תו = ""; בעוד (מספר! = 0) // פצל את מערך int ל- char {ספרה = מספר% 10; ספירת ++; מספר = מספר / 10; } תוך (ספירה! = 0) // הדפס מערך צ'אר בכיוון הנכון {UART1_SendData8 (ספרה + 0x30); בעוד (UART1_GetFlagStatus (UART1_FLAG_TXE) == RESET); // המתן לשליחת ספירה--; }}
זה לוקח ערך שלם וממיר אותו למערך תווים בלולאת בזמן הראשון, ואז בלולאה בזמן השני, אנו נשלח לכל אחת מהתווים בדומה לפונקציית char char print שלנו.
הדפסת קו חדש
זוהי פונקציה פשוטה להדפסת שורה חדשה. הערך המשושה לעשות זאת הוא "0x0a", אנחנו פשוט שולחים אותו באמצעות פקודת השידור של 8 סיביות.
בטל Serial_newline (בטל) {UART1_SendData8 (0x0a); בעוד (UART1_GetFlagStatus (UART1_FLAG_TXE) == RESET); // המתן למשלוח}
הדפסת מחרוזת לצג סדרתי
פונקציה שימושית נוספת היא להדפיס מחרוזות בפועל על הצג הסדרתי.
בטל Serial_print_string (מחרוזת char) {. char i = 0; בעוד (מחרוזת! = 0x00) {UART1_SendData8 (מחרוזת); בעוד (UART1_GetFlagStatus (UART1_FLAG_TXE) == RESET); i ++; }}
שוב, פונקציה זו ממירה גם את המחרוזת למערך char ושולחת כל תו. כידוע כל המחרוזות מסתיימות בטלות. אז אנחנו רק צריכים להמשיך לחצות ולהעביר את הדמויות עד שנגיע לאפס 0x00.
בודק אם נתונים טוריים זמינים לקריאה
פונקציה זו בודקת אם ישנם נתונים סדרתיים במאגר המוכנים לקריאה.
bool Serial_available () {if (UART1_GetFlagStatus (UART1_FLAG_RXNE) == TRUE) להחזיר TRUE; אחרת להחזיר FALSE; }
הוא בודק אם הדגל UART1_FLAG_RXNE , אם הוא נכון, הוא מחזיר נכון ואם לא, הוא מחזיר שקר.