- יסודות תקשורת UART
- דרישה והתקנת חומרה
- תרשים מעגלים לתקשורת UART של Nuvoton N76E003
- סיכות UART במיקרו-בקר Nuvoton N76E003
- UART נרשם במיקרו-בקר Nuvoton N76E003
- מצבי הפעלה של UART ב- N76E003
- תכנות Nuvoton N76E003 לתקשורת UART
UART מייצג מקלט / משדר אסינכרוני אוניברסלי והיא תכונת חומרה שימושית בכל יחידת מיקרו-בקר. מיקרו-בקר צריך לקבל נתונים, לעבד אותם ולשלוח אותם למכשירים האחרים. ישנם סוגים שונים של פרוטוקולי תקשורת הזמינים במיקרו-בקר, אולם UART הוא הנפוץ ביותר בין פרוטוקולי התקשורת האחרים כמו SPI ו- I2C. אם מישהו צריך לקבל או לשדר נתונים באופן סדרתי, UART היא תמיד האפשרות הפשוטה והנפוצה ביותר. היתרון של UART הוא שהוא דורש רק שני חוטים להעברת נתונים בין מכשירים. בהמשך להדרכת המיקרו-בקר שלנו Nuvoton, במאמר זה, נלמד כיצד לבצע תקשורת טורית באמצעות מיקרו-בקר N76E003.
יסודות תקשורת UART
כעת, כידוע מהו UART, חשוב לדעת את הפרמטרים המשויכים ל- UART.
שני מכשירי UART מקבלים ומשדרים נתונים באותה תדר. כאשר מכשיר ה- UART המקבל מזהה סיבית התחלה, הוא מתחיל לקרוא את הסיביות הנכנסות בתדר ספציפי המכונה קצב שידור. קצב שידור הוא דבר חשוב לתקשורת UART והוא משמש למדידת מהירות העברת הנתונים בסיביות לשנייה (bps). מהירות קצב שידור זו, עבור השידור והקבלה, חייבת להיות באותו קצב שידור. הפרש מהירות קצב השידור בין UARTs המשדרים לקולטים יכול להיות רק כ -10% לפני שתזמון הסיביות יורד מדי. מהירויות קצב השידור הפופולריות ביותר הן 4800, 9600, 115200 bps וכו '. בעבר השתמשנו בתקשורת UART גם במיקרו-בקרים רבים אחרים המפורטים להלן.
- תקשורת UART בין ATmega8 לבין Arduino Uno
- תקשורת UART בין שני בקרי מיקרו ATmega8
- תקשורת UART באמצעות PIC מיקרו-בקרים
- תקשורת UART על STM8S מיקרו-בקר
ל- N76E003 שני UART - UART0 ו- UART1. במדריך זה נשתמש ביחידת המיקרו-בקר היקפית UART ב- N76E003. מבלי לבזבז זמן רב, בואו נעריך איזה סוג של התקנת חומרה אנו דורשים ליישום זה.
דרישה והתקנת חומרה
המרכיב העיקרי הנדרש לפרויקט זה הוא מודול הממיר USB ל- UART או TTL שיהפוך את הממשק הנדרש בין המחשב למחשב הנייד עם מודול המיקרו-בקר. עבור פרויקט זה נשתמש במודול USB ל- UART מבוסס CP2102 המוצג להלן.
שלא לדבר, מלבד הרכיב הנ"ל, אנו זקוקים ללוח הפיתוח מבוסס מיקרו-בקר N76E003 וכן למתכנת Nu-Link. ייתכן שיידרש יחידת אספקת חשמל 5V נוספת אם המתכנת אינו משמש כמקור חשמל.
תרשים מעגלים לתקשורת UART של Nuvoton N76E003
כפי שניתן לראות בתרשים לוח הפיתוח שלהלן, הסיכה השנייה וה -3 של יחידת המיקרו-בקר משמשת כ- UART0 Tx ו- Rx בהתאמה. בצד שמאל קיצוני מוצג חיבור ממשק התכנות.
סיכות UART במיקרו-בקר Nuvoton N76E003
ל- N76E003 20 פינים שמתוכם 4 פינים יכולים לשמש לתקשורת UART. התמונה למטה מציגה את סיכות ה- UART המודגשות בתיבה מרובעת אדומה (Rx) ובתיבה מרובעת כחולה (Tx).
עבור ה- UART0, פינים 2 ו- 3 משמשים לתקשורת UART, ול- UART1, סיכה 8 וסיכה 18 משמשים לתקשורת.
UART נרשם במיקרו-בקר Nuvoton N76E003
ל- N76E003 שני UART משופרים של דופלקס מלא עם זיהוי שגיאות אוטומטי של זיהוי כתובות ומסגור - UART0 ו- UART1. שני UARTs אלה נשלטים באמצעות רושמים המסווגים לשני UARTs שונים. ישנם שני זוגות של סיכות RX ו- TX זמינים ב- N76E003 לפעולות UART. לפיכך, השלב הראשון הוא לבחור את יציאת UART הרצויה לפעולות.
במדריך זה נשתמש ב- UART0, ולכן התצורה תוצג עבור ה- UART0 בלבד. ל- UART1 תהיה אותה תצורה, אך הרישומים יהיו שונים.
לאחר בחירת UART אחד (UART0 במקרה זה), יש להגדיר את סיכות הקלט / פלט הדרושות לשימוש לתקשורת RX ו- TX ככניסה ופלט. סיכת RX של UART0 היא סיכה 3 של המיקרו-בקר שהוא יציאה 0.7. מכיוון שמדובר בסיכת קבלת יציאה טורית, יש להגדיר את היציאה 0.7 כקלט. מצד שני, הנמל 0.6 שהוא הפין השני של המיקרו-בקר הוא סיכת שידור או פין פלט. צריך להגדיר את זה כמצב דו כיווני כמעט. ניתן לבחור אלה באמצעות הרישום PxM1 ו- PxM2. שני רושמים אלה מגדירים את מצבי הקלט / פלט בהם x מייצג את מספר היציאה (לדוגמה, יציאה P1.0 הרישום יהיה P1M1 ו- P1M2, עבור P3.0 זה יהיה P3M1 ו- P3M2 וכו ') התצורה יכולה ניתן לראות בתמונה למטה-
מצבי הפעלה של UART ב- N76E003
לאחר מכן, השלב הבא הוא קביעת מצב פעולות ה- UART. שני ה- UART יכולים לפעול ב -4 מצבים. המצבים הם-
כפי שאנו רואים, ה- SM0 וה- SM1 (סיבית 7 ו -6 של רישום SCON) בוחרים את מצב פעולות ה- UART. מצב 0 הוא הפעולה הסינכרונית ושלושת המצבים האחרים הם פעולות אסינכרוניות. עם זאת, מחולל קצב ה- Baud ו- Bit Frame שונים עבור כל מצב יציאה טורית. ניתן לבחור כל אחד מהמצבים לפי דרישת היישום וזה זהה גם ל- UART1. לצורך הדרכה זו, משתמשים בפעולה של 10 ביט עם קצב הצפה של טיימר 3 חלקי 32 או 16.
עכשיו הגיע הזמן לקבל מידע ולהגדיר את הרישום SCON (SCON_1 עבור UART1) עבור UART0.
הביט ה -6 וה -7 יגדיר את מצב UART כפי שפורט לעיל. ביט 5 משמש להגדרת מצב תקשורת מרובי מעבדים כדי לאפשר אפשרויות. עם זאת, התהליך תלוי באיזה מצב UART נבחר. מלבד אלה, סיבית ה- REN תוגדר ל- 1 כדי לאפשר קליטה ודגל ה- TI יוגדר ל- 1 לשימוש בפונקציית printf במקום בפונקציית שידור UART0 מותאמת אישית.
המרשם החשוב הבא הוא רישום בקרת ההפעלה (PCON) (טיימר 3 סיביות 7 ו -6 עבור UART1). אם אתה חדש בתחום הטיימרים, עיין במדריך הטיימר של Nuvoton N76E003 כדי להבין כיצד להשתמש בטיימרים במיקרו בקר N76E003.
ביט ה- SMOD חשוב לבחור את קצב השידור הכפול במצב UART0 1. כעת, כאשר אנו משתמשים בטיימר 3, יש להגדיר את רישום הבקרה טיימר 3 T3CON. עם זאת, הביט השביעי והשישי שמור להגדרת קצב הנתונים הכפול עבור UART1.
והערך הקדם-סקלר של טיימר 3-
ה- BRCK של הסיבית החמישית יגדיר את הטיימר 3 כמקור שעון קצב השידור עבור UART1. כעת, גליון הנתונים של N76E003 מקבל את הנוסחה לחישוב קצב ה- Baud הרצוי וכן ערך סט המדגם עבור הרישומים טיימר 3 (16 סיביות) גבוה ונמוך.
ערך לדוגמא למקור שעון 16 מגה-הרץ-
לפיכך יש להגדיר את קצב השידור ברישום טיימר 3 באמצעות הנוסחה שלעיל. לענייננו, זו תהיה הנוסחה 4. לאחר מכן, הפעלת טיימר 3 על ידי הגדרת רישום TR3 ל -1 תסיים את טיימר האתחול של UART0 3. לקבלת מידע UART0 על מנת לשלוח אותו ולשלוח אותו באמצעות הרישום שלהלן -
קופת SBUF אוטומטית מקבלת מוגדרת עבור לקלוט ולשדר. כדי לקבל נתונים מה- UART, המתן עד שדגל ה- RI יקבע 1 וקרא את רישום ה- SBUF וכדי לשלוח את הנתונים ל- UART0, שלח את הנתונים ל- SBUF והמתין שדגל ה- TI יקבל 1 כדי לאשר העברת נתונים מוצלחת.
תכנות Nuvoton N76E003 לתקשורת UART
חלק הקידוד הוא פשוט והקוד השלם המשמש במדריך זה נמצא בתחתית דף זה. ההסבר לקוד הוא כדלקמן, ה- UART0 מאותחל בקצב שידור של 9600 באמצעות הצהרה בפונקציה הראשית-
InitialUART0_Timer3 (9600);
הפונקציה שלעיל מוגדרת בקובץ common.c והיא מגדירה את תצורת ה- UART0 עם טיימר 3 כמקור קצב השידור, במצב 1 ועם קצב שידור של 9600. הגדרת הפונקציה היא כדלקמן -
בטל InitialUART0_Timer3 (UINT32 u32Baudrate) // השתמש ב- timer3 כמחולל Baudrate { P06_Quasi_Mode; // הגדרת סיכת UART כמצב מעין להעברת P07_Input_Mode; // הגדרת סיכת UART כמצב קלט לקבלת SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 תעריף כפול אפשר T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // מקור שעון קצב שידור UART0 = Timer3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 מגה-הרץ * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1037500 / u32Baudrate)); /*16.6 מגהרץ * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /*16.6 מגהרץ * / #endif set_TR3; // טריגר טיימר 3 set_TI; // עבור פונקציית printf חייבת הגדרת TI = 1 }
ההצהרה נעשית שלב אחר שלב כפי שנדון קודם והרישומים מוגדרים בהתאם. עם זאת, בספריית BSP של N76E003, יש באג שנמצא במקום P07_Input_Mode; יש P07_Quasi_Mode . בשל כך, פונקציית ה- UART Receive לא תפעל.
קצב ה- Baud מוגדר גם לפי קלט קצב ה- Baud ובאמצעות הנוסחה שניתנה בגיליון הנתונים. כעת, בפונקציה הראשית או בלולאת בזמן , משתמשים בפונקציית printf. כדי להשתמש בפונקציית printf , יש להגדיר את ה- TI כ- 1. מלבד זאת, בזמן הלולאה משתמשים במארז מתג ולפי נתוני ה- UART שהתקבלו, הערך מודפס.
בעוד (1) { printf ("\ r \ n לחץ על 1 או לחץ על 2 או לחץ על 3 או לחץ על 4"); oper = Receive_Data_From_UART0 (); switch (oper) { case '1': printf ("\ r \ n1 נלחץ"); לשבור; מקרה '2': printf ("\ r \ n2 נלחץ"); לשבור; מקרה '3': printf ("\ r \ n3 נלחץ"); לשבור; מקרה '4': printf ("\ r \ n4 נלחץ"); לשבור; ברירת מחדל: printf ("לחיצה על מקש שגוי"); } Timer0_Delay1ms (300); } }
ובכן, עבור ה- UART0 קבל את Receive_Data_From_UART0 (); נעשה שימוש בפונקציה. זה מוגדר גם בספריית common.c .
UINT8 Receive_Data_From_UART0 (בטל) { UINT8 c; בעוד (! RI); c = SBUF; RI = 0; החזר (ג); }
הוא ימתין שדגל ה- RI יקבל 1 ויחזיר את נתוני הקבלה באמצעות המשתנה c.
מהבהב את הקוד והפלט
הקוד החזיר 0 אזהרה ו- 0 שגיאות והבהב בשיטת ההברקה המוגדרת כברירת מחדל על ידי הקיל. אם אינך בטוח כיצד לקמפל ולהעלות קוד, עיין במאמר התחלת העבודה עם nuvoton. השורות הבאות מאשרות שהקוד שלנו הועלה בהצלחה.
בנייה מחדש התחילה: פרויקט: printf_UART0 בנה מחדש את יעד 'GPIO' הידור PUTCHAR.C… מחבר Print_UART0.C… מחבר Delay.c… מחבר Common.c… הרכבת STARTUP.A51 … קישור… גודל התוכנית: נתונים = 54.2 xdata = 0 קוד = 2341 יצירת קובץ hex מ- ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 שגיאות, 0 אזהרות. זמן בנייה שחלף: 00:00:02 טען "G: \\ n76E003 \\ תוכנה \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ פלט \\ Printf_UART1" מחיקת פלאש בוצע. כתיבת פלאש בוצעה: 2341 בתים מתוכנתים. פלאש אימות בוצע: 2341 בתים אומתו. עומס פלאש הסתיים בשעה 15:48:08
לוח הפיתוח מחובר במקור החשמל דרך המתכנת והמחשב הנייד באמצעות מודול ה- USB ל- UART. כדי להציג או לשלוח את נתוני ה- UART, דרושה תוכנת צג טורית. אני משתמש במונח טרה לתהליך זה.
כפי שניתן לראות בתמונה למטה, הצלחתי להציג את המיתרים שנשלחו מבקר ה- nuvoton שלנו ולהציג אותם בתוכנת המסך הטורי. היה גם מסוגל לקרוא ערכים מהצג הטורי.
אתה יכול לבדוק את הסרטון המקושר למטה להדגמה המלאה של מדריך זה. מקווה שנהנית מהמאמר ולמדת משהו שימושי. אם יש לך שאלות, אתה יכול להשאיר אותן בסעיף ההערות למטה או להשתמש בפורומים שלנו כדי לפרסם שאלות טכניות אחרות.