- أساسيات اتصالات UART
- متطلبات الأجهزة والإعداد
- مخطط الدائرة لاتصالات Nuvoton N76E003 UART
- دبابيس UART على متحكم Nuvoton N76E003
- تسجيلات UART في Nuvoton N76E003 متحكم
- أوضاع تشغيل UART في N76E003
- برمجة Nuvoton N76E003 للاتصالات UART
UART تعني جهاز الاستقبال / المرسل غير المتزامن العالمي وهي ميزة مفيدة للأجهزة في أي وحدة تحكم دقيقة. يحتاج المتحكم الدقيق إلى تلقي البيانات ومعالجتها وإرسالها إلى الأجهزة الأخرى. هناك أنواع مختلفة من بروتوكولات الاتصال المتاحة في وحدة التحكم الدقيقة ، ومع ذلك ، فإن UART هو الأكثر استخدامًا بين بروتوكولات الاتصال الأخرى مثل SPI و I2C. إذا احتاج شخص ما إلى تلقي البيانات أو نقلها بشكل تسلسلي ، فإن UART هو دائمًا الخيار الأبسط والأكثر شيوعًا. ميزة UART هي أنها لا تتطلب سوى سلكين لنقل البيانات بين الأجهزة. بالاستمرار في البرنامج التعليمي الخاص بـ Nuvoton Microcontroller ، في هذه المقالة ، سوف نتعلم كيفية إجراء الاتصال التسلسلي باستخدام متحكم N76E003.
أساسيات اتصالات UART
الآن ، بما أننا نعرف ما هو UART ، من المهم معرفة المعلمات المرتبطة بـ UART.
يستقبل جهازان UART البيانات وينقلانها بنفس التردد. عندما يكتشف جهاز UART المستقبِل بت بدء ، يبدأ في قراءة البتات الواردة بتردد معين يُعرف باسم معدل الباود. يعد معدل الباود أمرًا مهمًا للاتصال UART ويتم استخدامه لقياس سرعة نقل البيانات بالبت في الثانية (بت في الثانية). يجب أن تكون سرعة معدل البث بالباود هذه ، للإرسال والاستقبال ، بنفس معدل الباود. يمكن أن يكون فرق سرعة معدل البث بالباود بين UARTs للإرسال والاستقبال حوالي 10٪ فقط قبل أن يصبح توقيت البتات بعيدًا جدًا. سرعات معدل الباود الأكثر شيوعًا هي 4800 ، 9600 ، 115200 بت في الثانية ، إلخ. في السابق ، استخدمنا اتصال UART في العديد من وحدات التحكم الدقيقة الأخرى المدرجة أدناه.
- اتصال UART بين ATmega8 و Arduino Uno
- اتصال UART بين اثنين من ميكروكنترولر ATmega8
- اتصالات UART باستخدام متحكمات PIC
- اتصالات UART على متحكم STM8S
يحتوي N76E003 على وحدتي UART - UART0 و UART1. في هذا البرنامج التعليمي ، سنستخدم الطرفية UART في وحدة متحكم N76E003. دون إضاعة الكثير من الوقت ، دعنا نقيم نوع إعداد الأجهزة الذي نحتاجه لهذا التطبيق.
متطلبات الأجهزة والإعداد
المكون الرئيسي المطلوب لهذا المشروع هو وحدة تحويل USB إلى UART أو TTL التي ستجعل الواجهة مطلوبة بين الكمبيوتر الشخصي أو الكمبيوتر المحمول مع وحدة التحكم الدقيقة. بالنسبة لهذا المشروع ، سوف نستخدم وحدة CP2102 القائمة على USB إلى UART الموضحة أدناه.
ناهيك عن أنه بخلاف المكون أعلاه ، نحتاج إلى لوحة تطوير تعتمد على متحكم N76E003 بالإضافة إلى Nu-Link Programmer. قد تكون هناك حاجة لوحدة إمداد طاقة إضافية 5 فولت إذا لم يتم استخدام المبرمج كمصدر للطاقة.
مخطط الدائرة لاتصالات Nuvoton N76E003 UART
كما نرى في الرسم التخطيطي للوحة التطوير أدناه ، يتم استخدام الدبوس الثاني والثالث لوحدة متحكم دقيق UART0 Tx و Rx على التوالي. في أقصى اليسار ، يظهر اتصال واجهة البرمجة.
دبابيس UART على متحكم Nuvoton N76E003
يحتوي الطراز N76E003 على 20 دبوسًا يمكن استخدام 4 دبابيس منها لتوصيل UART. تُظهر الصورة أدناه دبابيس UART المميزة في مربع أحمر (Rx) ومربع أزرق (Tx).
بالنسبة إلى UART0 ، يتم استخدام الدبوس 2 و 3 للاتصالات UART ، وبالنسبة لـ UART1 ، يتم استخدام الدبوس 8 والدبوس 18 للاتصال.
تسجيلات UART في Nuvoton N76E003 متحكم
يحتوي N76E003 على اثنين من UARTs مُحسَّن مزدوج الاتجاه مع التعرف التلقائي على العنوان واكتشاف أخطاء الإطارات - UART0 و UART1. يتم التحكم في هاتين UARTs باستخدام سجلات مصنفة إلى قسمين UART مختلفين. يتوفر زوجان من دبابيس 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 (البت السابع والسادس من سجل SCON) يحددان وضع عمليات UART. الوضع 0 هو العملية المتزامنة والأوضاع الثلاثة الأخرى هي عمليات غير متزامنة. ومع ذلك، فإن مولد بالباود و بت الإطار مختلفة لكل وضع المنفذ التسلسلي. يمكن تحديد أي من الأوضاع حسب متطلبات التطبيق وهذا هو نفسه بالنسبة لـ UART1 أيضًا. في هذا البرنامج التعليمي ، يتم استخدام عملية 10 بت مع معدل تدفق مؤقت 3 مقسومًا على 32 أو 16.
حان الوقت الآن للحصول على معلومات وتهيئة سجل SCON (SCON_1 لـ UART1) لـ UART0.
سيحدد البت السادس والسابع وضع UART كما تمت مناقشته سابقًا. يتم استخدام بت 5 لضبط وضع الاتصال متعدد المعالجات لتمكين الخيارات. ومع ذلك ، فإن العملية تعتمد على وضع UART المحدد. بخلاف ذلك ، سيتم تعيين بت REN إلى 1 لتمكين الاستقبال وسيتم تعيين علامة TI على 1 لاستخدام وظيفة printf بدلاً من وظيفة إرسال UART0 المخصصة.
السجل المهم التالي هو سجل التحكم في الطاقة (PCON) (Timer 3 bit 7 and 6 for UART1). إذا كنت جديدًا على أجهزة ضبط الوقت ، فراجع البرنامج التعليمي Nuvoton N76E003 Timer لفهم كيفية استخدام أجهزة ضبط الوقت على N76E003 Microcontroller.
يعتبر بت SMOD مهمًا لتحديد معدل البث بالباود المزدوج في وضع UART0 1. الآن ، نظرًا لأننا نستخدم المؤقت 3 ، يجب تكوين سجل التحكم Timer 3 T3CON. ومع ذلك ، يتم حجز البت السابع والسادس لإعداد معدل البيانات المزدوج لـ UART1.
وقيمة Timer 3 pre-scaler-
سوف يقوم بت 5 BRCK بتعيين Timer 3 كمصدر ساعة معدل البث بالباود لـ UART1. الآن ، يتم إعطاء ورقة البيانات الخاصة بـ N76E003 الصيغة لحساب معدل الباود المطلوب بالإضافة إلى قيمة مجموعة العينة للسجلات العالية والمنخفضة Timer 3 (16 بت).
قيمة العينة لمصدر ساعة 16 ميجا هرتز-
وبالتالي ، يجب تكوين معدل البث بالباود في سجل Timer 3 باستخدام الصيغة أعلاه. بالنسبة لحالتنا ، ستكون الصيغة 4. بعد ذلك ، سيؤدي بدء Timer 3 عن طريق ضبط سجل TR3 على 1 إلى إنهاء UART0 Initialization Timer 3. لتلقي بيانات UART0 وإرسالها لاستخدام السجل أدناه-
يتم تكوين سجل SBUF تلقائيًا للاستلام والإرسال. لتلقي البيانات من UART ، انتظر حتى علامة RI لتعيين 1 وقراءة سجل SBUF وإرسال البيانات إلى UART0 ، وإرسال البيانات إلى SBUF وانتظر حتى تحصل علامة TI على 1 لتأكيد نقل البيانات بنجاح.
برمجة Nuvoton N76E003 للاتصالات UART
جزء الترميز بسيط ويمكن العثور على الكود الكامل المستخدم في هذا البرنامج التعليمي في أسفل هذه الصفحة. شرح الكود على النحو التالي ، تتم تهيئة UART0 بمعدل 9600 باود باستخدام العبارة في الوظيفة الرئيسية-
الأولي UART0_Timer3 (9600) ؛
تم تعريف الوظيفة المذكورة أعلاه في ملف common.c وهي تقوم بتكوين UART0 باستخدام Timer 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 Double Rate تمكين T3CON & = 0xF8؛ // T3PS2 = 0 ، T3PS1 = 0 ، T3PS0 = 0 ( مقياس مسبق = 1) set_BRCK ؛ // UART0 مصدر ساعة معدل الباود = Timer3 #ifdef FOSC_160000 RH3 = HIBYTE (65536 - (1000000 / u32Baudrate) -1) ؛ / * 16 ميغا هرتز * / RL3 = LOBYTE (65536 - (1000000 / u32Baudrate) -1) ؛ / * 16 ميجا هرتز * / #endif #ifdef FOSC_166000 RH3 = HIBYTE (65536 - (1037500 / u32Baudrate)) ؛ /*16.6 ميجا هرتز * / RL3 = LOBYTE (65536 - (1037500 / u32Baudrate)) ؛ / * 16.6 ميجا هرتز * / #endif set_TR3 ؛ // Trigger Timer3 set_TI ؛ // بالنسبة لوظيفة printf يجب تعيين TI = 1 }
يتم الإعلان خطوة بخطوة كما تمت مناقشته من قبل ويتم تكوين السجلات وفقًا لذلك. ومع ذلك ، في مكتبة BSP لـ N76E003 ، يوجد خطأ بدلاً من P07_Input_Mode؛ يوجد P07_Quasi_Mode . نتيجة لهذا ، لن تعمل وظيفة UART Receive.
يتم أيضًا تكوين معدل البث بالباود وفقًا لإدخال معدل البث بالباود وباستخدام الصيغة المقدمة من ورقة البيانات. الآن ، في الوظيفة الرئيسية أو حلقة while ، يتم استخدام وظيفة printf. لاستخدام وظيفة printf ، يجب تعيين TI على أنه 1. بخلاف ذلك ، في حلقة while ، يتم استخدام حالة تبديل ووفقًا لبيانات UART المستلمة ، تتم طباعة القيمة.
بينما (1) { printf ("\ r \ n اضغط 1 أو اضغط 2 أو اضغط 3 أو اضغط 4") ؛ عامل التشغيل = Receive_Data_From_UART0 () ، التبديل (عامل التشغيل) { حالة '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 ج ؛ بينما (! RI) ؛ ج = 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 من ". \ Output \ Printf_UART1"… ". \ Output \ Printf_UART1" - 0 خطأ (أخطاء) ، 0 تحذير (تحذيرات). وقت الإنشاء المنقضي: 00:00:02 قم بتحميل "G: \\ n76E003 \\ software \\ N76E003_BSP_Keil_C51_V1.0.6 \\ Sample_Code \\ UART0_Printf \\ Output \\ Printf_UART1" تم مسح Flash. كتابة فلاش: 2341 بايت مبرمجة. تم التحقق من Flash: تم التحقق من 2341 بايت. انتهى تحميل الفلاش الساعة 15:48:08
يتم توصيل لوحة التطوير بمصدر الطاقة من خلال المبرمج والكمبيوتر المحمول باستخدام وحدة USB إلى UART. لعرض بيانات UART أو إرسالها ، يلزم وجود برنامج شاشة تسلسلي. أنا أستخدم مصطلح تيرا لهذه العملية.
كما ترى في الصورة أدناه ، تمكنت من عرض السلاسل المرسلة من جهاز التحكم nuvoton الخاص بنا وعرضها على برنامج الشاشة التسلسلي. كان قادرًا أيضًا على قراءة القيم من الشاشة التسلسلية.
يمكنك التحقق من الفيديو المرتبط أدناه للحصول على العرض التوضيحي الكامل لهذا البرنامج التعليمي. آمل أن تكون قد استمتعت بالمقال وتعلمت شيئًا مفيدًا. إذا كانت لديك أي أسئلة ، فيمكنك تركها في قسم التعليقات أدناه أو استخدام منتدياتنا لنشر أسئلة فنية أخرى.