یکی از قابلیت های جالب میکروکنترلر 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) رو مطابق تصویر فعالسازی کنید.
گام سوم
فعال سازی USB CDC (VCP) Middleware Software Stack مطابق تصویر
گام چهارم
فعال سازی کریستال خارجی برای میکرو مطابق تصویر و همچنین قابلیت Debug
گام پنجم
تنظیم کلاک میکروکنترلر روی حداکثر (72MHz)
گام ششم
نام گذاری پروژه و تولید آن برای IDE مد نظر
بعد از نام گذاری و تولید کد پروژه ما قصد داریم ارسال داده از سمت میکروکنترلر به سمت کامپیوتر رو بررسی کنیم. ما یک بافر که یک پیام از جنس رشته هست رو از طریق VCP هر یک ثانیه به PC میفرستیم. ما از تابع CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) استفاده میکنیم که از طریق مسیر زیر در دسترس خواهد بود:
USB_DEVICE/ App/ usbd_cdc_if.h
دو پارامتر این تابع عبارت هستند از:
Buf که یک پوینتر به بافر دیتایی هست که قراره بعدا ارسال بشه.
Len که طول بافر ارسالی هست.
کد نوشته شده برای ارسال داده از طریق USB Virtual COM Port
بررسی نتایج
بعد از این که برنامه رو روی میکرو پروگرم کردیم، با استفاده از کابل micro usb به کامپیوتر متصل میشیم. با مراجعه به بخش device manager و بعد از اون مراجعه به بخش port & coms یک VCP به سادگی توسط سیستم شناخته میشه که در مورد مثال سیستم ما پورت شناخته شده COM6 هست.
کافی هست از طریق یک نرم افزار Serial Terminal به میکرو متصل بشیم. بادریت اینجا تفاوتی نداره و میتونیم اون رو روی هر عدد دلخواهی تنظیم کنیم.
طبق تصویر مشاهده میکنیم که بدون دردسر خاصی تونستیم از طریق واحد جانبی USB میکروکنترلر stm32 دیتا رو برای سیستم کامپیوتر خودمون ارسال کنیم.
در جلسه بعدی آموزش نحوه دریافت داده رو با همدیگه مرور خواهیم کرد!
دانلود سورس کد پروژه
با سایر آموزش های اصفهان درایو همراه باشید!