class UART – אפיק תקשורת טורית דו-כיוונית¶
UART מממש את פרוטוקול התקשורת הטורית הדו-כיוונית הסטנדרטי UART/USART. ברמה הפיזית הוא מורכב מ-2 קווים: RX ו-TX. יחידת התקשורת היא תו (אין לבלבל עם תו במחרוזת) שיכול להיות ברוחב 8 או 9 ביטים.
ניתן ליצור ולאתחל אובייקטי UART באמצעות:
from machine import UART
uart = UART(3, 9600) # init with given baudrate
uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
Bits יכול להיות 7, 8 או 9. Stop יכול להיות 1 או 2. עם parity=None, נתמכים רק 8 ו-9 ביטים. כאשר parity מאופשר, נתמכים רק 7 ו-8 ביטים.
אובייקט UART מתנהג כמו אובייקט stream, וקריאה וכתיבה נעשות באמצעות מתודות ה-stream הסטנדרטיות:
uart.read(10) # read 10 characters, returns a bytes object
uart.read() # read all available characters
uart.readline() # read a line
uart.readinto(buf) # read and store into the given buffer
uart.write('abc') # write the 3 characters
בנאים¶
- class machine.UART(id: int, baudrate: int = 9600, bits: int = 8, parity: int | None = None, stop: int = 1, *, tx: Pin | None = None, rx: Pin | None = None, rts: Pin | None = None, cts: Pin | None = None, txbuf: int | None = None, rxbuf: int | None = None, timeout: int | None = None, timeout_char: int | None = None, invert: int = 0, flow: int = 0)¶
בניית אובייקט UART בעל ה-id הנתון.
מתודות¶
- init(baudrate: int = 9600, bits: int = 8, parity: int | None = None, stop: int = 1, *, tx: Pin | None = None, rx: Pin | None = None, rts: Pin | None = None, cts: Pin | None = None, txbuf: int | None = None, rxbuf: int | None = None, timeout: int | None = None, timeout_char: int | None = None, invert: int = 0, flow: int = 0) None¶
אתחול אפיק ה-UART עם הפרמטרים הנתונים:
baudrate הוא קצב השעון.
bits הוא מספר הביטים לכל תו, 7, 8 או 9.
parity הוא הזוגיות,
None, 0 (זוגי) או 1 (אי-זוגי).stop הוא מספר ביטי העצירה, 1 או 2.
פרמטרים נוספים, מסוג מילת מפתח בלבד, שעשויים להיות נתמכים על ידי פורט:
tx מציין את פין ה-TX לשימוש.
rx מציין את פין ה-RX לשימוש.
rts מציין את פין ה-RTS (פלט) שישמש לבקרת זרימה חומרתית בקליטה.
cts מציין את פין ה-CTS (קלט) שישמש לבקרת זרימה חומרתית בשידור.
txbuf מציין את אורך חוצץ ה-TX בתווים.
rxbuf מציין את אורך חוצץ ה-RX בתווים.
timeout מציין את משך ההמתנה לתו הראשון (במילישניות).
timeout_char מציין את משך ההמתנה בין תווים (במילישניות).
invert מציין אילו קווים להפוך.
0לא יהפוך קווים (מצב הסרק של שני הקווים הוא לוגי גבוה).UART.INV_TXיהפוך את קו ה-TX (מצב הסרק של קו ה-TX הוא כעת לוגי נמוך).UART.INV_RXיהפוך את קו ה-RX (מצב הסרק של קו ה-RX הוא כעת לוגי נמוך).UART.INV_TX | UART.INV_RXיהפוך את שני הקווים (מצב הסרק לוגי נמוך).
flow מציין אילו אותות בקרת זרימה חומרתית להשתמש. הערך הוא מסכת ביטים.
0יתעלם מאותות בקרת זרימה חומרתית.UART.RTSיאפשר בקרת זרימה בקליטה באמצעות פין הפלט RTS כדי לאותת אם ל-FIFO של הקליטה יש מספיק מקום לקבל נתונים נוספים.UART.CTSיאפשר בקרת זרימה בשידור על ידי השהיית השידור כאשר פין הקלט CTS מאותת שמקום החוצץ של המקלט אוזל.UART.RTS | UART.CTSיאפשר את שניהם, לבקרת זרימה חומרתית מלאה.
הערה
ניתן לקרוא ל-
init()מספר פעמים על אותו אובייקט כדי להגדיר מחדש את ה-UART תוך כדי תנועה. זה מאפשר להשתמש בהתקן UART היקפי יחיד כדי לשרת התקנים שונים המחוברים לפיני GPIO שונים. רק התקן אחד יכול להיות משוֹרת בכל פעם במקרה כזה. כמו כן, אין לקרוא ל-deinit()שכן זה ימנע קריאה חוזרת ל-init().
- deinit() None¶
כיבוי אפיק ה-UART.
הערה
לא תוכל לקרוא ל-
init()על האובייקט לאחרdeinit(). במקרה כזה יש ליצור מופע חדש.
- any() int¶
מחזיר מספר שלם הסופר את מספר התווים שניתן לקרוא ללא חסימה. הוא יחזיר 0 אם אין תווים זמינים ומספר חיובי אם יש תווים. המתודה עשויה להחזיר 1 גם אם יש יותר מתו אחד הזמין לקריאה.
לשאילתה מתוחכמת יותר של תווים זמינים השתמש ב-select.poll:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- read(nbytes: int | None = None, /) bytes | None¶
קריאת תווים. אם
nbytesמצוין, יקראו לכל היותר מספר זה של בייטים, אחרת יקראו כמה שיותר נתונים. ייתכן שהקריאה תחזור מוקדם יותר אם הושג timeout. ה-timeout ניתן להגדרה בבנאי.ערך מוחזר: אובייקט bytes המכיל את הבייטים שנקראו. מחזיר
Noneבעת timeout.
- readinto(buf: bytearray, nbytes: int | None = None, /) int | None¶
קריאת בייטים אל תוך
buf. אםnbytesמצוין, יקראו לכל היותר מספר זה של בייטים. אחרת, יקראו לכל היותרlen(buf)בייטים. ייתכן שהקריאה תחזור מוקדם יותר אם הושג timeout. ה-timeout ניתן להגדרה בבנאי.ערך מוחזר: מספר הבייטים שנקראו ואוחסנו ב-
bufאוNoneבעת timeout.
- readline() bytes | None¶
קריאת שורה, המסתיימת בתו שורה חדשה. ייתכן שהקריאה תחזור מוקדם יותר אם הושג timeout. ה-timeout ניתן להגדרה בבנאי.
ערך מוחזר: השורה שנקראה או
Noneבעת timeout.
- write(buf: bytes) int | None¶
כתיבת חוצץ הבייטים אל האפיק.
ערך מוחזר: מספר הבייטים שנכתבו או
Noneבעת timeout.
- sendbreak() None¶
שליחת תנאי break על האפיק – הנמכת TV לרמה נמוכה למשך זמן ארוך יותר מזמן תו אחד. זמין ב-STM32 וב-mimxrt; אינו חשוף ב-alif.
- readchar() int¶
קריאת תו בודד מה-UART והחזרתו כמספר שלם (או
-1בעת timeout). תקורה נמוכה יותר מ-read(1)מכיוון שלא מוקצה אובייקטbytes. STM32 בלבד.
- writechar(char: int) None¶
כתיבת התו הבודד
char(מספר שלם בטווח0–255) אל ה-UART. תקורה נמוכה יותר מ-write()עבור שליחת בייט בודד. STM32 בלבד.
- flush() None¶
חסימה עד שכל בייט הנמצא כעת בחוצץ השידור יוצא בשעון על TX. מעלה
OSErrorבעת timeout; ה-timeout נגזר מגודל חוצץ ה-TX ומקצב הבָּאוּד (baud rate) המוגדר, כך שאלא אם כן בקרת זרימה מאופשרת והמקלט נתקע, הקריאה חוזרת הרבה לפני ה-timeout.
- txdone() bool¶
מחזיר
Trueכאשר אין שידור בתהליך (חוצץ ה-TX ריק ואוגר ההזזה התרוקן),Falseאחרת. שימושי כחלופה לא-חוסמת ל-flush().
- irq(handler: Callable[[UART], None] | None = None, trigger: int = 0, hard: bool = False) None¶
התקנת פונקציית callback שתופעל באירועי UART.
handlerהוא הפונקציה שתופעל. היא מקבלת את מופע ה-UARTכארגומנט היחיד שלה. העברNoneכדי להסיר handler שהותקן קודם לכן.triggerהוא מסכת ביטים של קבועIRQ_*אחד או יותר (ראה Constants למטה) הבוחרת אילו אירועים יפעילו את ה-callback.hard=Trueרושם handler של פסיקה חומרתית (השהיה נמוכה יותר, אך ה-handler אינו רשאי להקצות). ברירת המחדל היא callback מתוזמן.מחזיר אובייקט irq.
לא כל מקור IRQ זמין בכל פורט – ראה את קבועי
IRQ_*הבודדים לזמינות לפי פורט.
קבועים¶
- RTS: int¶
העבר ל-
flowכדי לאפשר בקרת זרימה חומרתית RTS בצד הקליטה. שלב עםCTSבאמצעות OR כדי לאפשר את שניהם.
- IRQ_RXIDLE: int¶
דגל הפעלה של
irq(): מופעל פעם אחת לאחר שתו אחד או יותר התקבל ואז קו ה-RX עובר למצב סרק. זמין בכל פורטי OpenMV.