راه اندازی واحد UART میکروکنترلر STM32F4xx

در بخش سوم به معرفی و راه اندازی واحد UART میکروکنترلر stm32f4xx و ارسال داده های نمونه برداری شده توسط ADC به کامپیوتر و نمایش بر روی صفحه کامپیوتر می‌پردازیم.

معرفی واحد UART میکروکنترلر stm32f4xx :

UART به معنای Universal asynchronous receiver-transmitter که یک پروتکل ارتباط سریال است و از طریق آن داده ها بین دو میکروکنترلر و یا یک میکروکنترلر و کامپیوتر جا به جا می شوند انتقال داده به صورت سریال و از طریق دو سیم انجام می شود که یکی برای دریافت داده (RX) و دیگری برای ارسال داده (TX) هستند. و داده های 8 بیتی پشت سرهم ارسال می شوند و برای تمایز داده ها از یک دیگر در این پروتکل بیت های start bit و stop bit استفاده می شوند که در شکل زیر نمایش داده شده است.

پروتکل UART میکروکنترلر stm32f4xx

پروتکل UART میکروکنترلر stm32f4xx

اطلاعات کامل‌تر در مورد پروتکل UART : ارتباط سریال – پروتکل UART

برقراری ارتباط UART بین دو میکروکنترلر :

برای این که داده ای را بین دو میکروکنترلراز طریق یوارت  جا به جا کنیم لازم است که مطابق شکل زیر،  TX یک میکروکنترلر به RX میکروکنترلر دیگر متصل شود چون که داده ارسالی یکی درواقع داده دریافتی دیگری است و همچنین برای هم مبنا کردن دو میکروکنترلر زمین های آنها را به یکدیگر متصل کنیم و در نهایت هم باید Baud Rate دو میکروکنترلر یکسان باشد.

اتصال دو میکروکنترلر با UART

اتصال دو میکروکنترلر با UART

برقراری ارتباط UART بین میکروکنترلر و کامپیوتر:

برای اتصال میکروکنترلر و کامپیوتر لازم است که از یک ماژول میانی به نام USB-to-Serial Module استفاده کنیم که به شکل های مختلفی وجود دارد. و پس ازاتصال آن به کامپیوتر قسمت Device Manager  کامپیوترتان را بررسی کنید که این ماژول را شناخته باشد و اگر نشناخته بود به صورت آنلاین یا با دانلود درایور از لینک زیر و نصب آن ماژول را به کامپیوترتان بشناسانید تا به آن یک پورت اختصاص دهد که داده ها از طریق همین پورت بین کامپیوتر و میکروکنترلر جا به جا شوند.

مطلب پیشنهادی:  مدولاسیون عرض پالس یا PWM در STM32 - کنترل سرعت فن DC

دانلود درایور

 

ماژول های USB-to-UART

سه نوع از ماژول های USB-to-UART

و پس از نصب درایور بر روی کامپیوتر برای نمایش داده های ارسالی می توانید از نرم افزار هایی مثل Realterm و یا Serialplot استفاده کنید که در Realterm داده ها به صورت هگز ، Uint_8 و… قابل نمایش هستند و در SerialPlot داده ها به صورت عدد های پشت سر هم رسم می شوند و ما چون که می خواهیم شکل موج سینوسی را که به وسیله ی مبدل دیجیتال به آنالوگ (DAC) ساخته ایم و با مبدل آنالوگ به دیجیتال (ADC) نمونه برداری کرده ایم نمایش دهیم پس از نرم افزار SerialPlot استفاده می کنیم که می توانید آن را از لینک زیر دانلود کنید.

دانلود نرم افزار serial plot

نرم افزار Stm32CubeMX :

برای تنظیمات UART به شکل زیر عمل می کنیم :

ابتدا در قسمت Pin Configuration  یکی از یوارت ها را انتخاب می کنیم :

نرم افزار Stm32CubeMX

Pin Configuration

سپس برای تنظیمات یوارت لازم داریم که Baud Rate آن را مشخص کنیم و DMA آن را در Normal Mode فعال کنیم . لازم به ذکر است که با توجه به فرکانس کاری پردازنده کامپیوتر ها و محدودیت های ماژول های USB-to-Serial، برخی از Baud Rate  های استاندارد در سمت کامپیوتر عبارتند از:

bit/sec  9600،115200،230400،460800،921600

راه اندازی واحد UART میکروکنترلر stm32f4xx

USART3 configuration

راه اندازی واحد UART میکروکنترلر stm32f4xx

DMA for UART

مطلب پیشنهادی:  آموزش کار با بورد STM32 Nucleo64، با استفاده از نرم‌افزارهای STM32CubeMX و TrueSTUDIO – پروژه‌ی ساده‌ی کنترل LED

با انجام همه تنظیمات بالا ازابتدا تا اینجا ، configuration نهایی به صورت شکل زیر است.

راه اندازی واحد UART میکروکنترلر stm32f4xx

configuration   نهایی

کامپایلر Keil :

بررسی عملکرد درست UART به تنهایی:

پس از generate کردن کد در نرم افزار Stm32CubeMX و باز کردن نرم افزار Keil برای این که از عملکرد صحیح یوارت مطمئن شویم در ابتدا همان 512 داده سینوسی را به طور مستقیم به کامپیوتر ارسال می کنیم و پس از reset کردن برد STM32f4xx باید در نرم افزار SerialPlot  نمایش داده شود البته باید PORT و Bound Rate به درستی انتخاب شوند. قطعه کدی که در تابع main برای بررسی عملکرد صحیح یوارت استفاده می شود:

راه اندازی واحد UART میکروکنترلر stm32f4xx

پس از پروگرم کردن بردمان یعنی Stm32f4xx  باید ، پایه TX میکرو کنترلر(PB10) را به پایه RX ماژول USB-to-UART و پایه RX میکروکنترلر (PB11) را پایه TX ماژول متصل کنیم، تا اتصالات بردمان درست باشد و سپس ماژول را به کامپیوتر متصل کنیم :

راه اندازی واحد UART میکروکنترلر stm32f4xx

Device Manager

راه اندازی واحد UART میکروکنترلر stm32f4xx

مشاهده درستی عملکرد UART در نرم افزار Serial Plot

با مشاهده ی شکل بر روی صفحه کامپیوتر از عملکرد صحیح UART مطمئن می شویم.

برنامه نهایی در کامپایلر Keil :

اکنون که از عملکرد صحیح یوارت مطمئن شدیم، زمان آن رسیده است که داده های نمونه برداری شده توسط ADC را با UART به کامپیوتر منتقل کنیم و نمایش دهیم. برای این کار دو آرایه جدید تعریف می کنیم تا زمانی که بافر buffin را با داده های ADC پر می کنیم، بافر buffout را توسط UART به کامپیوتر بفرستیم و پس از این که این ارسال انجام شد، بافر buffout را با داده های ADC مقدار دهی کنیم و بافر buffin را با UART ارسال کنیم تا داده های روی هم نوشته نشوند و خراب نشوند، البته لازم به ذکر است که سرعت انتقال داده توسط UART نیز باید بیشتر از سرعت نمونه برداری ADC باشد. پس برنامه نهایی به صورت زیر خواهد بود:

مطلب پیشنهادی:  پروگرم کردن بورد STM32F103C8 با استفاده از USB port

کامپایلر Keil

متغیر های برنامه نهایی

کامپایلر Keil

مقدار دهی و شروع به کار timer2,timer4,DAC,ADC,USART3

کامپایلر Keil

تابع HAL_ADC_ConvCpltCallback

برای پیاده سازی الگوریتم ذکر شده لازم است که از تابع HAL_ADC_ConvCpltCallback   استفاده کنیم، این تابع بدین صورت عمل می کند که وقتی نمونه برداری ADC به همان تعداد داده مشخص شده در تابع HAL_ADC_Start_DMA  انجام شد، نمونه برداری از ADC متوقف می شود و این تابع اجرا می شود. پس ما به کمک این تابع می توانیم بین بافرهای buffin و buffout جا به جا شویم تا به طور پیوسته و کامل داده های نمونه برداری شده توسط ADC با UART به کامپیوتر منتقل شوند و مطابق شکل در نرم افزار SerialPlot نمایش داده شوند. البته  لازم است که پایه های  ADC و DAC را به یکدیگر متصل کنیم یعنی برطبق شکل ، PA4 و PA0 را با سیم به یکدیگر وصل کنیم تا اتصالات بردمان کامل شود.

شکل موج سینوسی خروجی DAC و نمونه برداری شده باADC که با UART به کامپیوتر

نمایش شکل موج سینوسی خروجی DAC و نمونه برداری شده باADC که با UART به کامپیوتر منتقل شده است، بر روی صفحه کامپیوتر

راه اندازی واحد UART میکروکنترلر stm32f4xx شکل موج سینوسی بر روی کامپیوتر

تصویر شکل موج سینوسی بر روی کامپیوتر

با مشاهده شکل بر روی صفحه کامپیوتراز عملکرد صحیح مدار مطمئن می شویم چون که می دانیم که فرکانس موج سینوسی 1kHz است و نرخ نمونه برداری ADC هم 30KHz است یعنی با سرعتی 30 برابر فرکانس موج سینوسی از آن نمونه برداری شده است، بنابراین داده نمایش داده شده بر روی صفحه کامپیوتر باید موج سینوسی ای باشد که با 30 نقطه رسم شده است که همینطور هم هست.

نویسنده مطلب : مهسا مهدیه نجف آبادی

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

یک دیدگاه

  1. مشتاقانه منتظر ادامه آموزشتون هستم.