- Βασικά στοιχεία της επικοινωνίας UART
- Απαιτήσεις και ρύθμιση υλικού
- Διάγραμμα κυκλώματος για επικοινωνία Nuvoton N76E003 UART
- Καρφίτσες UART στο μικροελεγκτή Nuvoton N76E003
- Καταχωρεί UART στο μικροελεγκτή Nuvoton N76E003
- Τρόποι λειτουργίας UART στο N76E003
- Προγραμματισμός Nuvoton N76E003 για επικοινωνία UART
Το UART σημαίνει Universal Asynchronous Receiver / Transmitter και είναι μια χρήσιμη δυνατότητα υλικού σε οποιαδήποτε μονάδα μικροελεγκτή. Ένας μικροελεγκτής πρέπει να λαμβάνει δεδομένα, να τα επεξεργάζεται και να τα στέλνει στις άλλες συσκευές. Υπάρχουν διάφοροι τύποι πρωτοκόλλων επικοινωνίας που διατίθενται στον μικροελεγκτή, ωστόσο, το UART είναι το πιο χρησιμοποιούμενο από τα άλλα πρωτόκολλα επικοινωνίας όπως το SPI και το I2C. Εάν κάποιος πρέπει να λαμβάνει ή να διαβιβάζει σειριακά δεδομένα, το UART είναι πάντα η πιο απλή και κοινή επιλογή. Το πλεονέκτημα του UART είναι ότι απαιτεί μόνο δύο καλώδια για τη μετάδοση δεδομένων μεταξύ συσκευών. Συνεχίζοντας με τον οδηγό Nuvoton Microcontroller, σε αυτό το άρθρο, θα μάθουμε πώς να εκτελούμε σειριακή επικοινωνία χρησιμοποιώντας τον μικροελεγκτή N76E003.
Βασικά στοιχεία της επικοινωνίας UART
Τώρα, όπως γνωρίζουμε τι είναι το UART, είναι σημαντικό να γνωρίζουμε τις σχετικές παραμέτρους του UART.
Δύο συσκευές UART λαμβάνουν και μεταδίδουν δεδομένα στην ίδια συχνότητα. Όταν η συσκευή λήψης UART ανιχνεύει ένα bit έναρξης, αρχίζει να διαβάζει τα εισερχόμενα bit σε μια συγκεκριμένη συχνότητα γνωστή ως ρυθμός baud. Ο ρυθμός Baud είναι ένα σημαντικό πράγμα για την επικοινωνία UART και χρησιμοποιείται για τη μέτρηση της ταχύτητας μεταφοράς δεδομένων σε bits ανά δευτερόλεπτο (bps). Αυτή η ταχύτητα ρυθμού baud, για τη μετάδοση και τη λήψη, πρέπει να είναι στην ίδια ταχύτητα baud. Η διαφορά ταχύτητας ρυθμού baud μεταξύ των UART μετάδοσης και λήψης μπορεί να είναι μόνο περίπου 10% προτού ο χρόνος του bit φτάσει πολύ μακριά. Οι πιο δημοφιλείς ταχύτητες ρυθμού baud είναι 4800, 9600, 115200 bps, κ.λπ. Προηγουμένως έχουμε χρησιμοποιήσει επικοινωνία UART σε πολλούς άλλους μικροελεγκτές επίσης που παρατίθενται παρακάτω.
- Επικοινωνία UART μεταξύ ATmega8 και Arduino Uno
- Επικοινωνία UART μεταξύ δύο μικροελεγκτών ATmega8
- Επικοινωνία UART με χρήση μικροελεγκτών PIC
- Επικοινωνία UART σχετικά με τον μικροελεγκτή STM8S
Το N76E003 έχει δύο UARTs - UART0 και UART1. Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε το περιφερειακό UART στη μονάδα μικροελεγκτή N76E003. Χωρίς να χάσουμε πολύ χρόνο, ας αξιολογήσουμε τι είδους εγκατάσταση υλικού χρειαζόμαστε για αυτήν την εφαρμογή.
Απαιτήσεις και ρύθμιση υλικού
Το κύριο συστατικό που απαιτείται για αυτό το έργο είναι η μονάδα μετατροπέα USB σε UART ή TTL που θα κάνει τη διεπαφή που απαιτείται μεταξύ του υπολογιστή ή του φορητού υπολογιστή με τη μονάδα μικροελεγκτή. Για αυτό το έργο, θα χρησιμοποιήσουμε τη μονάδα USB σε UART με βάση το CP2102 που φαίνεται παρακάτω.
Για να μην αναφέρουμε, εκτός από το παραπάνω στοιχείο, χρειαζόμαστε την πλακέτα ανάπτυξης με βάση τον μικροελεγκτή N76E003 καθώς και τον προγραμματιστή Nu-Link. Ενδέχεται να απαιτείται πρόσθετη μονάδα τροφοδοσίας 5V εάν ο προγραμματιστής δεν χρησιμοποιείται ως πηγή ισχύος.
Διάγραμμα κυκλώματος για επικοινωνία Nuvoton N76E003 UART
Όπως μπορούμε να δούμε στην παρακάτω σχηματική πλακέτα ανάπτυξης, ο 2ος και 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. Αυτά τα δύο UART ελέγχονται χρησιμοποιώντας καταχωρητές που κατηγοριοποιούνται σε δύο διαφορετικά UARTs. Υπάρχουν δύο ζεύγη ακίδων RX και TX στο N76E003 για λειτουργίες UART. Έτσι, το πρώτο βήμα είναι να επιλέξετε την επιθυμητή θύρα UART για λειτουργίες.
Σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε το UART0, επομένως η διαμόρφωση θα εμφανίζεται μόνο για το UART0. Το UART1 θα έχει την ίδια διαμόρφωση αλλά οι καταχωρητές θα είναι διαφορετικοί.
Αφού επιλέξετε ένα UART (UART0 σε αυτήν την περίπτωση), οι ακροδέκτες I / O που πρέπει να χρησιμοποιηθούν για την επικοινωνία RX και TX πρέπει να διαμορφωθούν ως είσοδος και έξοδος. Ο ακροδέκτης RX του UART0 είναι ο ακροδέκτης 3 του μικροελεγκτή που είναι η θύρα 0,7. Επειδή πρόκειται για έναν ακροδέκτη λήψης σειριακής θύρας, η θύρα 0,7 πρέπει να οριστεί ως είσοδος. Από την άλλη πλευρά, η θύρα 0,6 που είναι ο 2ος πείρος του μικροελεγκτή είναι ένας πείρος μετάδοσης ή ένας πείρος εξόδου. Πρέπει να οριστεί ως οιονεί αμφίδρομη λειτουργία. Αυτά μπορούν να επιλεγούν χρησιμοποιώντας τον καταχωρητή PxM1 και PxM2. Αυτοί οι δύο καταχωρητές ορίζουν τις λειτουργίες I / O όπου το x σημαίνει τον αριθμό θύρας (Για παράδειγμα, η θύρα P1.0 ο καταχωρητής θα είναι P1M1 και P1M2, για P3.0 θα είναι P3M1 και P3M2 κ.λπ.) Η διαμόρφωση μπορεί φαίνεται στην παρακάτω εικόνα-
Τρόποι λειτουργίας UART στο N76E003
Στη συνέχεια, το επόμενο βήμα είναι να προσδιορίσετε τον τρόπο λειτουργίας των UART. Τα δύο UART μπορούν να λειτουργήσουν σε 4 τρόπους. Οι τρόποι είναι-
Όπως μπορούμε να δούμε, τα SM0 και SM1 (7ο και 6ο bit του καταχωρητή SCON) επιλέγουν τον τρόπο λειτουργίας UART. Η λειτουργία 0 είναι η σύγχρονη λειτουργία και οι άλλες τρεις λειτουργίες είναι ασύγχρονες λειτουργίες. Ωστόσο, η γεννήτρια ρυθμού Baud και τα bit Frame είναι διαφορετικά για κάθε λειτουργία σειριακής θύρας. Οποιοσδήποτε από τους τρόπους μπορεί να επιλεγεί σύμφωνα με την απαίτηση εφαρμογής και αυτό είναι το ίδιο για το UART1 επίσης. Για αυτό το σεμινάριο, χρησιμοποιείται λειτουργία 10 bit με ρυθμό υπερχείλισης χρονοδιακόπτη 3 διαιρούμενο με 32 ή 16.
Τώρα, ήρθε η ώρα να λάβετε πληροφορίες και να διαμορφώσετε τον καταχωρητή SCON (SCON_1 για UART1) για UART0.
Το 6ο και το 7ο bit θα ρυθμίσουν τη λειτουργία UART όπως συζητήθηκε προηγουμένως. Το Bit 5 χρησιμοποιείται για τη ρύθμιση της λειτουργίας επικοινωνίας πολλαπλών επεξεργαστών για την ενεργοποίηση επιλογών. Ωστόσο, η διαδικασία εξαρτάται από την επιλογή UART mode. Εκτός από αυτά, το bit REN θα ρυθμιστεί σε 1 για να επιτρέψει τη λήψη και η σημαία TI θα οριστεί σε 1 για χρήση της λειτουργίας printf αντί για προσαρμοσμένη λειτουργία μετάδοσης UART0.
Ο επόμενος σημαντικός καταχωρητής είναι ο καταχωρητής Power Control (PCON) (Timer 3 bit 7 and 6 for UART1). Εάν είστε νέοι στους χρονομετρητές, ανατρέξτε στον οδηγό χρονοδιακόπτη Nuvoton N76E003 για να κατανοήσετε πώς να χρησιμοποιείτε χρονοδιακόπτες στον μικροελεγκτή N76E003.
Το bit SMOD είναι σημαντικό για την επιλογή του ρυθμού διπλού baud στη λειτουργία UART0 1. Τώρα, καθώς χρησιμοποιούμε το χρονόμετρο 3, πρέπει να ρυθμιστεί ο καταχωρητής ελέγχου Timer 3 T3CON. Ωστόσο, το bit 7ο και 6ο προορίζονται για τη ρύθμιση διπλού ρυθμού δεδομένων για το UART1.
Και η τιμή προ-κλιμάκωσης Timer 3-
Το 5ο bit BRCK θα ορίσει το Χρονοδιακόπτη 3 ως πηγή ρολογιού ρυθμού baud για το UART1. Τώρα, στο φύλλο δεδομένων του N76E003 δίνεται ο τύπος για τον υπολογισμό του επιθυμητού ρυθμού Baud καθώς και της τιμής καθορισμού δείγματος για τους καταχωρητές υψηλού και χαμηλού χρονοδιακόπτη 3 (16-bit).
Τιμή δείγματος για πηγή ρολογιού 16 Mhz-
Έτσι, ο ρυθμός baud πρέπει να ρυθμιστεί στον καταχωρητή Timer 3 χρησιμοποιώντας τον παραπάνω τύπο. Για την περίπτωσή μας, θα είναι η Φόρμουλα 4. Μετά από αυτό, η εκκίνηση του Χρονοδιακόπτη 3 με τη ρύθμιση του TR3 καταχωρητή στο 1 θα ολοκληρώσει το Χρονοδιακόπτη Αρχικοποίησης 3. UART0. Για να λάβετε και να στείλετε τα δεδομένα UART0 για να χρησιμοποιήσετε τον παρακάτω καταχωρητή-
Ο καταχωρητής SBUF ρυθμίζεται αυτόματα για λήψη και αποστολή. Για να λάβετε δεδομένα από το UART, περιμένετε να οριστεί η σημαία RI 1 και διαβάστε τον καταχωρητή SBUF και στείλτε τα δεδομένα στο UART0, στείλτε τα δεδομένα στο SBUF και περιμένετε να πάρει η σημαία TI 1 για επιβεβαίωση επιτυχούς μετάδοσης δεδομένων.
Προγραμματισμός Nuvoton N76E003 για επικοινωνία UART
Το τμήμα κωδικοποίησης είναι απλό και ο πλήρης κωδικός που χρησιμοποιείται σε αυτό το σεμινάριο βρίσκεται στο κάτω μέρος αυτής της σελίδας. Η εξήγηση του κώδικα έχει ως εξής, το UART0 αρχικοποιείται με ρυθμούς 9600 baud χρησιμοποιώντας τη δήλωση στην κύρια συνάρτηση-
ΑρχικόUART0_Timer3 (9600);
Η παραπάνω συνάρτηση ορίζεται στο αρχείο common.c και διαμορφώνει το UART0 με το Χρονοδιακόπτη 3 ως πηγή ρυθμού baud, στη λειτουργία 1 και με ρυθμό baud 9600. Ο ορισμός της λειτουργίας έχει ως εξής
void InitialUART0_Timer3 (UINT32 u32Baudrate) // χρησιμοποιήστε το timer3 ως Baudrate generator { P06_Quasi_Mode; // Ρύθμιση της καρφίτσας UART ως οιονεί λειτουργία για μετάδοση P07_Input_Mode; // Ρύθμιση καρφίτσας UART ως τρόπου εισόδου για λήψη SCON = 0x50; // UART0 Mode1, REN = 1, TI = 1 set_SMOD; // UART0 Double Rate Enable T3CON & = 0xF8; // T3PS2 = 0, T3PS1 = 0, T3PS0 = 0 (Prescale = 1) set_BRCK; // UART0 πηγή ρολογιού ρυθμού baud = Χρονοδιακόπτης3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1); / * 16 MHz * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1.037.500 / u32Baudrate))? /*16,6 MHz * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)); /* 16,6 MHz * / #endif set_TR3? // Trigger Timer3 set_TI; // Για τη λειτουργία printf πρέπει να ορίσετε TI = 1 }
Η δήλωση γίνεται βήμα προς βήμα όπως συζητήθηκε προηγουμένως και οι καταχωρητές διαμορφώνονται ανάλογα. Ωστόσο, στη βιβλιοθήκη BSP του N76E003, υπάρχει ένα σφάλμα που είναι αντί του P07_Input_Mode. υπάρχει P07_Quasi_Mode . Λόγω αυτού, η λειτουργία λήψης UART δεν θα λειτουργήσει.
Ο ρυθμός Baud διαμορφώνεται επίσης σύμφωνα με την είσοδο ρυθμού baud και χρησιμοποιώντας τον τύπο που δίνεται από το φύλλο δεδομένων. Τώρα, στην κύρια λειτουργία ή στον βρόχο while , χρησιμοποιείται η λειτουργία printf. Για να χρησιμοποιήσετε τη λειτουργία printf , το TI πρέπει να οριστεί ως 1. Εκτός από αυτό, στον βρόχο while , χρησιμοποιείται μια θήκη διακόπτη και σύμφωνα με τα δεδομένα UART που λαμβάνονται, η τιμή εκτυπώνεται.
ενώ (1) { printf ("\ r \ nΠατήστε 1 ή Πιέστε 2 ή Πιέστε 3 ή Πιέστε 4"); oper = Λήψη_Data_From_UART0 (); διακόπτης (oper) { case '1': printf ("\ r \ n1 είναι πατημένο"); Διακοπή; Περίπτωση '2': printf ("\ r \ n2 είναι πατημένο"); Διακοπή; περίπτωση '3': printf ("\ r \ n3 είναι πατημένο"); Διακοπή; υπόθεση '4': printf ("\ r \ n4 πιέζεται"); Διακοπή; προεπιλογή: printf ("\ r \ n Πατημένο λάθος πλήκτρο"); } 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 σφάλματα και αναβοσβήνει χρησιμοποιώντας την προεπιλεγμένη μέθοδο αναβοσβήνει από το Keil. Εάν δεν είστε σίγουροι πώς να μεταγλωττίσετε και να ανεβάσετε κώδικα, ρίξτε μια ματιά στο άρθρο έναρξης με το nuvoton. Οι παρακάτω γραμμές επιβεβαιώνουν ότι ο κώδικας μας έχει μεταφορτωθεί με επιτυχία.
Ξεκίνησε η ανακατασκευή: Έργο: printf_UART0 Ανακατασκευή στόχου «GPIO» μεταγλώττιση PUTCHAR.C… μεταγλώττιση Print_UART0.C… μεταγλώττιση Delay.c… μεταγλώττιση Common.c… συναρμολόγηση STARTUP.A51… σύνδεση… Μέγεθος προγράμματος: data = 54.2 xdata = 0 code = 2341 δημιουργία hex file from ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 Error (s), 0 Warning (s). Χρόνος κατασκευής που έχει παρέλθει: 00:00:02 Φόρτωση "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" Διαγραφή φλας. Flash Write Done: 2341 bytes προγραμματισμένο. Επαλήθευση Flash Έγινε: Επαληθεύτηκε 2341 byte. Το Flash Load ολοκληρώθηκε στις 15:48:08
Ο πίνακας ανάπτυξης συνδέεται στην πηγή τροφοδοσίας μέσω του προγραμματιστή και του φορητού υπολογιστή χρησιμοποιώντας τη μονάδα USB σε UART. Για την εμφάνιση ή την αποστολή δεδομένων UART, απαιτείται λογισμικό σειριακής οθόνης. Χρησιμοποιώ τον όρο tera για αυτήν τη διαδικασία.
Όπως μπορείτε να δείτε στην παρακάτω εικόνα, μπόρεσα να εμφανίσω τις χορδές που στάλθηκαν από τον ελεγκτή nuvoton και να τις εμφανίσω στο λογισμικό σειριακής οθόνης. Επίσης κατάφερε να διαβάσει τιμές από τη σειριακή οθόνη.
Μπορείτε να δείτε το βίντεο που συνδέεται παρακάτω για την πλήρη επίδειξη αυτού του σεμιναρίου. Ελπίζω να απολαύσατε το άρθρο και να μάθετε κάτι χρήσιμο. Εάν έχετε οποιεσδήποτε ερωτήσεις, μπορείτε να τις αφήσετε στην ενότητα σχολίων παρακάτω ή να χρησιμοποιήσετε τα φόρουμ μας για να δημοσιεύσετε άλλες τεχνικές ερωτήσεις.