راه اندازی Virtual Com Port(VCP) با واحد جانبی USB برای میکروکنترلر STM32 - ارسال داده

یکی از قابلیت های جالب میکروکنترلر STM32 توانایی ارسال و دریافت داده به / از کامپیوتر بدون استفاده از ماژول سریال هست. تصور کنید که شما دیگه در سخت افزار خودتون نیازی به پیاده سازی بخش مربوط به ماژول سریال یا صرف هزینه بیشتر هر چند ناچیز برای تهیه ماژولی مثه FT232 و ... ندارید و قادر هستید با هر بادریتی با سیستم کامپیوتر خودتون ارتباط برقرار کنید! بله درست شنیدین، با هر بادریتی! جالب به نظر میرسه نه؟

توی این آموزش قصد داریم با هم این قابلیت میکروکنترلر STM32 رو با هم مرور کنیم و پورت COM مجازی رو فعال کرده و با واحد USB میکرو با کامپیوتر خودمون ارتباط بگیریم.

 

STM32 USB CDC & VCP

USB CDC (Communication Device Class) یک پروتکل خاص برای ارتباط USB هست.تعداد زیادی کلاس برای USB وجود داره که هر کدوم پروتکل های مختلفی روی لایه فیزیکی USB رو مشخص میکنه که ارتباط دیتا، صدا، دستگاه های ویدیویی، اینترفیس های انسانی یا HID، ذخیره سازی یا mass storage، کنترلرهای wireless و ... رو ممکن میکنه!

Virtual COM Port (VCP)  یک اینترفیس ارائه شده از سمت مایکروسافت هست که دسترسی به کانال های ارتباطی مختلف مثل RS232، USB و ... رو ممکن میکنه به نحوی که انگار اون ها واقعا به یک پورت با وجود خارجی متصل هستن! اینجاست که مفهوم بادریت در پورت COM مجازی معنای خودش رو از دست میده!

توی این جلسه، ما واحد جانبی usb میکروکنترلر STM32 خودمون رو راه اندازی میکنیم به نحوی که به عنوان یک CDC Device عمل کنه و اون رو به پورت COM مجازی روی PC خودمون متصل میکنیم تا بتونیم بین میکرو و سیستم داده رد و بدل کنیم. به عبارتی دنبال راه جایگزین برای ارتباط با میکروکنترلر STM32 هستیم بدون اینکه از pinهای مربوط به واحد جانبی USART استفاده کنیم.

از اونجایی که ما قراره این کار رو با برد Blue Pill خودمون انجام بدیم پس میکروکنترلر مورد استفاده ما STM32F103C8T6 خواهد بود.

بریم ببینیم باید چیکار کنیم!

 

گام اول

 

نرم افزار STM32CUBEMX خودتون رو باز کنید و میکروکنترلر مدنظر رو انتخاب کنید.

 

گام دوم

 

واحد جانبی STM32 USB(FS) رو مطابق تصویر فعالسازی کنید.

 

STM32 USB Configuration

 

گام سوم

 

فعال سازی USB CDC (VCP) Middleware Software Stack   مطابق تصویر

 

STM32 USB CLASS Selection

 

گام چهارم

 

فعال سازی کریستال خارجی برای میکرو مطابق تصویر و همچنین قابلیت Debug

 

STM32 RCC Settings

 

 

گام پنجم

 

تنظیم کلاک میکروکنترلر روی حداکثر (72MHz)

 

STM32 Clock Settings

 

گام ششم

 

نام گذاری پروژه و تولید آن برای IDE مد نظر

 

بعد از نام گذاری و تولید کد پروژه ما قصد داریم ارسال داده از سمت میکروکنترلر به سمت کامپیوتر رو بررسی کنیم. ما یک بافر که یک پیام از جنس رشته هست رو از طریق VCP هر یک ثانیه به PC میفرستیم. ما از تابع CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) استفاده میکنیم که از طریق مسیر زیر در دسترس خواهد بود:

 USB_DEVICEAppusbd_cdc_if.h

دو پارامتر این تابع عبارت هستند از:

Buf که یک پوینتر به بافر دیتایی هست که قراره بعدا ارسال بشه.

Len که طول بافر ارسالی هست.

کد نوشته شده برای ارسال داده از طریق USB Virtual COM Port

 

STM32 USB CDC VCP Example Code

 

بررسی نتایج

بعد از این که برنامه رو روی میکرو پروگرم کردیم، با استفاده از کابل micro usb به کامپیوتر متصل میشیم. با مراجعه به بخش device manager و بعد از اون مراجعه به بخش port & coms یک VCP به سادگی توسط سیستم شناخته میشه که در مورد مثال سیستم ما پورت شناخته شده COM6 هست.

 

STM32 VCP Detection

 کافی هست از طریق یک نرم افزار Serial Terminal به میکرو متصل بشیم. بادریت اینجا تفاوتی نداره و میتونیم اون رو روی هر عدد دلخواهی تنظیم کنیم.

طبق تصویر مشاهده میکنیم که بدون دردسر خاصی تونستیم از طریق واحد جانبی USB میکروکنترلر stm32 دیتا رو برای سیستم کامپیوتر خودمون ارسال کنیم.

STM32 USB CDC VCP Transmit Code Example

 

در جلسه بعدی آموزش نحوه دریافت داده رو با همدیگه مرور خواهیم کرد!

 

منبع

دانلود سورس کد پروژه

USB_BLUE_PILL.rar

با سایر آموزش های اصفهان درایو همراه باشید!

 

 

 

۵
از ۵
۴ مشارکت کننده

بلاگ تخصصی اصفهان درایو