آموزش میکروکنترلر Stm32f1 به صورت رجیستری قسمت چهارم: UART

آموزش میکروکنترلر Stm32f1 به صورت رجیستری قسمت چهارم: UART

آموزش میکروکنترلر Stm32f1 به صورت رجیستری قسمت چهارم: UART
آموزش میکروکنترلر Stm32f1 به صورت رجیستری قسمت چهارم: UART

پروتکل UART

خدایا با نام تو با یاد تو و برای تو، دوستان عزیز سلام و با عرض شرمندگی بابت تاخیر انتشار این قسمت، سرباز باشید و یا سربازیتون نزدیک بشه متوجه می‌شید که چی می‌گم.

در قسمت سوم در رابطه با پروتکل UART صحبت کردیم اما بحث تکمیل نشد و ادامه این موضوع را در ادامه بررسی خواهیم کرد.

خب برای رجیستر های CR2 و CR3 برای کاربرد ساده پروتکل UART لازم به تغییر نیست.

تنها نکته باقی مانده در رجیستر CR2 این است که اگر در بیت 13 و بیت 12 این رجیستر مقدار 0 را قرار دهیم تعداد stop بیت را 1 انتخاب می‌کنیم.

رجیستر Status:

آموزش STM32 به صورت رجیستری

BIT7 :TXE در صورتی که بخواهیم ارسالی داشته باشیم قطعا باید به این موضوع توجه کنیم که ارسال بایت ما تمام شده و بافر ارسال خالی شده باشد.

صفر بودن این بیت به این معناست که بافر هنوز پر بوده و دیتا ارسال نشده است و یک بودن این بیت به این معناست که دیتا از بافر تخلیه شده است.

خب برای این که متوجه بشیم این بیت 0 و یا 1 است از کد زیر استفاده می‌کنیم:

برنامه در این حلقه تا زمان ارسال بایت از بافر قفل می‌شود.

BIT5 :RXEN اگر این بیت SET شود ما متوجه می‌شویم در بافر دریافت دیتایی قرار گرفته است.

رجیستر Data:

آموزش STM32 به صورت رجیستری

این رجیستر به صورت 9 بیتی و یا 8 بیتی استفاده می‌شود که اگر دیتایی را بخواهیم ارسال و دریافت کنیم از این رجیستر استفاده می‌شود.

Data دیتا یک متغیری است که مقداری را که اگر بخواهیم در رجیستر DR قرار بدهیم و ارسال شود تعریف می‌کنیم و & کردن با FF1 یعنی دیتامون 9 بیتی است.

برای ارسال به صورت 8 بیتی.

برای دریافت هم به صورت زیر عمل می‌کنیم:

برای تبدیل کردن و ازدست ندادن بخشی از دیتا، از int استفاده کردیم.

خب تا اینجای ماجرا ارسال و دریافت پروتکل UART بدون اینتراپت رو یاد گرفتیم اما هر عملی با اینتراپتش خوبه.

خب با این تکه کد می‌تونیم وقفه پروتکل UART رو فعال کنیم که خیلی هم سادست.

و با این تکه کد می‌تونیم اولویت وقفه پروتکل UART را مشخص کنیم.

تابع زیر روال وقفه پروتکل UART دریافت هم به همین صورت خواهد بود.

Ch هم متغیری است که هر بایت در این قرار می‌گیرد. مثلا من خودم یه آرایه دو بایتی از جنس char تعریف می‌کنم و مقدار خانه صفرم رو اختصاص می‌دم به دیتای دریافتی و بعد دریافت هر بیت در آرایه دیگری اتقالش می‌دم برا دستگرمی خوبه حتما امتحان کنید.

خب اینم یه تمرین برای تایپ دیتا در ترمینال و برگرداندن همون مقدار به خود ترمینال.

امیدوارم که این مطلب هم برای شما مفید واقع شود.

0 نفر

پــــســنــدیـده انـد

توجه

مهدی حسن‌زاده
مهدی حسن‌زاده

فارغ التحصیل رشته الکترونیک علاقمند به مباحث تخصصی در زمینه میکروکنترلرARMو Signal processing

دیدگاه ها

5 دیدگاه

  • سامان
    ۱۳ بهمن ۱۴۰۰

    من چندین منبع مطالعه کردم ولی توضیحات شما نسبت به بقیه خیلی بهتر و قابل فهم تر بود. از شما تشکر میکنم و امیدوارم باز ادامه بدید و مطالب بیشتری رو برامون بذارین. منتظر مطالب جدیدتر هستیم…

  • Saberyari94
    saberyari94
    ۱۱ خرداد ۱۳۹۹

    خیلی ممنون از توضیحات خوبتون.منتظر قسمت های بعدی آموزش ریجیستری هستیم.

    • امیر مهدی حسن‌زاده
      مهدی حسن‌زاده
      ۴ شهریور ۱۴۰۰

      سلام مهندس عزیز بله حتما بزودی ادامه مسیر رو هم باهم پیش میریم این وقفه طولانی شد چون سرباز بودم الان حسابی دارم برای ادامه این سری از آموزش برنامه ریزمیکنم
      به امید خدا پرقدرت دوباره ادامه میدیم

  • Saberyari94
    saberyari94
    ۵ خرداد ۱۳۹۹

    اقا دستت درد نکنه مرسی خیلی خوبه

    • امیر مهدی حسن‌زاده
      مهدی حسن‌زاده
      ۴ شهریور ۱۴۰۰

      دلخوشی من یاد گیری دوستامه -درکنار هم و باهم
      امیدوارم موفق باشید

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک