برد STM سخت افزار قطعات الکترونیک

آموزش میکروکنترلرهای STM32 بخش چهارم دریافت اطلاعات از USART

نوشته شده توسط علی زاهدی

پیش از این ۳ قسمت از مجموعه آموزش های میکروکنترلر STM32 منتشر شده است. که با کلیک بر روی این لینک می‌توانید لیست آموزش‌ها را مشاهده نمایید. پیشنهاد میکنم در صورتی که آموزش‌های قبلی را مطالعه نکرده‌اید. ابتدا قسمت های قبلی این مجموعه آموزشی را مطالعه کرده و سپس مطالعه ی این آموزش را ادامه دهید. در این پست قصد داریم تا نحوه دریافت اطلاعات از طریق ارتباط USART یا همان ارتباط سریال (USART) میکروکنترلرهای STM32 را آموزش دهیم. در ادامه با مرجع تخصصی بردهای امبدد به زبان فارسی، دیجی اسپارک همراه باشید.

 


اتصالات برد STM32


برد میکروکنترلر STM32 یا همان Bluepill برای پروگرام کردن به مبدل نیاز دارد. در این آموزش با استفاده از یک مبدل USB to TTL میکروکنترلر STM32 را به کامپیوتر متصل می‌کنیم. همانطور که در تصویر مشاهده می‌کنید. پایه RX مبدل USB to TTL به پایه شماره ۹ میکروکنترلر متصل شده است. و پایه TX مبدل به پایه شماره ۱۰ میکروکنترلر متصل شده است.

اتصالات برد STM32 به usb to ttl - دیجی اسپارک

 


پیکربندی درگاه ارتباط USART


در صورتی که آشنایی کافی با میکروکنترلرهای ARM را ندارید. و یا نحوه ساخت پروژه جدید در نرم افزار STM32CubeMX را نمی‌دانید. قسمت های قبلی این آموزش را مطالعه کنید. پس از انتخاب میکروکنترلر مورد نظر در نرم افزار STM32CubeMX ابتدا مطابق آموزش های قبل قسمت های SYS و RCC را تنظیم نمایید. بایستی از منو سمت چپ در قسمت A->Z  ابتدا همانند بخش اول این مجموعه آموزشی PC13 را با نام LED به صورت خروجی تعریف کنید.

نرم افزار STM32CubeMX - دیجی اسپارک

 

سپس بر روی گزینه USART1 کلیک کنید. و گزینه Mode را بر روی Asynchronous سپس در قسمت Parameter Setting می‌توانید تنظیماتی از جمله تنظیم Baud Rate ، Parity و … را انجام دهید. در این آموزش تنها بخش Baud Rate را بر روی مقدار ۹۶۰۰ تنظیم می‌کنیم. پس از آن همانند تصویر زیر مشاهده می‌کنید که پایه‌ PA10 بعنوان RX و پایه PA9 بعنوان TX تعریف شده است.مشاهده می‌کنید که با اتصال مبدل USB to TTL به این پایه ها میتوان انواع دیتا های مختلف را به سمت کامپیوتر ارسال نمود.

تنظیمات نرم افزار STM32CubeMX - دیجی اسپارک

 

سپس بایستی وارد بخش NVIC Settings شده و بخش مربوط به فعال کردن وقفه USART را فعال کنید. به تصویر زیر توجه کنید.

فعال سازی USART در نرم افزار STM32CubeMX - دیجی اسپارک

 

همانطور که در تصویر بالا مشاهده می‌کنید. پایه های مربوط به USART1 که در بخش اتصالات برد معرفی شدند. بر روی میکروکنترلر به رنگ سبز درآمده اند. در ادامه همانند آموزش های قبل به صفحه Clock Configuration رفته و قسمت HCLK را به ۷۲ مگاهرتز تغییر دهید.

تنطیمات قسمت HCLK به ۷۲ مگاهرتز - دیجی اسپارک

سپس بایستی به صفحه Project Manager رفته و مطابق آموزش های قبلی این قسمت را نیز تنظیم نمایید. سپس پس از انجام کامل تنظیمات بر روی گزینه GENERATE CODE کلیک کنید تا پروژه ساخته شود. بر روی پس از ورود به نرم افزار KEIL فایل main.c را باز کنید. در ادامه توابع HAL مربوط به این بخش را با استفاده از مثال بصورت کامل توضیح خواهیم داد.

 


کد نویسی پروژه STM32


برای دریافت اطلاعات از USART میکروکنترلرها دو روش وجود دارد. که این روش ها عبارتند از؛ روش polling و روش interrupt

  • روش Polling

در روش polling در این روش کاربر توسط برنامه نویسی با فواصل زمانی مشخص و دائما رویداد مورد نظر را بررسی می کند تا به آن پاسخ دهد. در این روش CPU دائما درگیر بررسی شرط مربوط به دریافت اطلاعات از USART است. برای مثال به کد زیر توجه کنید. توجه داشته باشید برای این که از دستور printf خطا دریافت نکنید. بایستی کد مربوط به این دستور که در قسمت قبلی این مجموعه آموزشی نوشته شده است را به ابتدای برنامه خود اضافه نمایید. همچنین بایستی کتابخانه stdio.h را نیز به کد خد اضافه کنید.

عملکرد کد بالا (که منبع آن این لینک است) به این صورت است که داخل نرم‌افزار سریال مانیتور کامپیوتر با ارسال کاراکتر S بزرگ LED موجود بر روی برد Blue Pill روشن می‌شود. و گزارش روشن شدن LED به سمت کامپیتر ارسال شده و داخل سریال مانیتور نمایش داده می‌شود. همچنین با ارسال کاراکتر R بزرگ LED موجود بر روی برد Blue Pill خاموش می‌شود. و گزارش خاموش شدن LED به سمت کامپیتر ارسال شده و داخل سریال مانیتور نمایش داده می‌شود. همانطور که پیش از این گفته شد استفاده از این روش برای دریافت اطلاعات مناسب نیست. برای رفع عیب های این برنامه از روش interrupt استفاده می‌کنیم.

 

  • روش interrupt

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

همانطور که در بخش دوم این مجموعه آموزشی گفته شد. توابع مربوط به روتین وقفه میکروکنترلرهای STM32 داخل فایل stm32f1xx_it.c قرار دارد. برای انتقال این تابع به فایل main بایستی از تابع callback استفاده شود. همانطور که در کد بالا مشاهده می‌کنید. از تابع HAL_UART_RxCpltCallback برای وقفه USART استفاده شده است. عملکرد این قسمت برنامه به این صورت است که پس از دریافت اطلاعات از USART مقدار متغیر RXBufferCount برابر طور رشته ارسالی خواهد شد. با استفاده از این متغیر اطلاعات داخل رشته RXBuffer ذخیره می‌شود. سپس متغیر NewDataLineCount همانند flag عمل می‌کند. و داخل برنامه اصلی دریافت شدن اطلاعات از USART را مشخص می‌کند. ادامه کد بالا داخل تابع main نوشته میشود که کد آن را می‌توانید در زیر مشاهده کنید.

عملکرد کد به این تریتیب است که همانند کد قبل با ارسال عبارت LED:1 از سمت کامپیوتر LED موجود بر روی PC13 روشن خواهد شد و گزارش روشن شدن آن نیز به سمت کامپیوتر ارسال خواهد شد. همچنین با ارسال عبارت LED:0 از کامپیوتر LED موجود بر روی برد خاموش خواهد شدو و گزارش خاموش شدن به سمت کامپیوتر ارسال خواهد شد. نحوه پروگرام کردن برنامه بر روی میکروکنترلر در قسمت قبلی آموزش توضیح داده شده است. در صورتی که با نحوه پروگرام کردن میکروکنترلر های Stm32 آشنا نیستید. لطفا بخش اول این آموزش را مطالعه نمایید.

 


لوازم مورد نیاز


 

چنانچه در مراحل راه اندازی میکروکنترلرهای stm32 با مشکل مواجه شدید. بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 


پروژه و دریافت بن ارسال رایگان


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های #دیجی_اسپارک ،  #دانشجوکیت ،  digispark#  و  daneshjookit# منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۲۰۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

علی زاهدی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه