راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

6 بازدید
۱۴۰۴-۱۱-۲۶
3 دقیقه
  • نویسنده: Sepehr Kouzegaran
  • درباره نویسنده: ---

در قسمت قبل با نحوه‌ی راه‌اندازی و ارسال داده از طریق واحد USB میکروکنترلر STM32F103 آشنا شدیم. در این قسمت می‌خواهیم با نحوه‌ی دریافت داده از USB در میکروکنترلر آشنا شویم. در این آموزش مثالی که پیاده‌سازی می‌کنیم، داده‌های ارسال شده از کامپیوتر را با USB دریافت کرده و آن‌ها را مجدد از طریق USB به کامپیوتر ارسال می‌کند.

موقع دریافت داده از USB، تابع callback مربوط به دریافت اجرا می‌شود. این تابع در فایل usbd_cdc_if.c قرار دارد.

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)در Callback مربوط به دریافت داده از USB، می‌خواهیم داده‌ی دریافت شده را در آرایه‌ی دیگری (بافر موقت) کپی کرده و از آن استفاده کنیم. در فایل main.c یک آرایه به نام buff و یک متغیر به نام len را به‌صورت gloabal تعریف می‌کنیم. داده های دریافت شده را می‌خواهیم در آرایه‌ی buff کپی کنیم.

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

اینجا طول آرایه را 128 در نظر گرفته ایم. بهتر است طول آرایه‌ی buff را برابر با طول آرایه‌ی بافر داخلی که برای دریافت در نظر گرفته شده است در نظر بگیریم. سایز بافر ارسال و دریافت را می‌توان در CubeMX تغییر داد (قسمت Middleware قسمت USB_DEVICE قسمت Parameter Settings). سایز هر دو بافر در فایل usbd_cdc_if.h به صورت ماکرو تعریف می‌شوند.

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

در فایل usbd_cdc_if.c از روی این دو مقدار، بافرهای ارسال و دریافت داخلی تعریف می‌شوند.

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

با برابر درنظرگرفتن طول آرایه‌ی buff (که خودمان تعریف کردیم) با UserRxBufferFS، موقع دریافت داده‌های بزرگ دچار مشکل سرریز بافر نمی‌شویم. موقع تعریف‌کردن buff می‌توانیم از ماکرو APP_RX_DATA_SIZE استفاده کنیم و طول آرایه را برابر با این مقدار در نظر بگیریم (uint8_t buff[APP_RX_DATA_SIZE]).

در داخل تابع CDC_Receive_FS ابتدا دو متغیر buff و len را extern کرده و داده‌های دریافت شده را به آرایه‌ی buff کپی می‌کنیم. برای این کار می‌توان از تابع memcpy استفاده کرد. طول داده‌ی دریافت شده را هم در متغیر len قرار می‌دهیم.

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

در فایل main.c می‌خواهیم پیام‌های دریافت شده را مجدد ارسال کنیم. برای این کار در داخل حلقه‌ی while مقدار متغیر len را بررسی می‌کنیم. درصورتی‌که مقدار آن غیرصفر باشد محتوای موجود در آرایه‌ی buff را ارسال می‌کنیم (مقدار اولیه متغیر len باید صفر در نظر گرفته شود). پس از ارسال‌کردن داده‌ی دریافتی، در len مقدار صفر را قرار می‌دهیم تا به صورت تکراری ارسال انجام نشود.

برنامه را کامپایل کرده و میکروکنترلر را پروگرام می‌کنیم. میکروکنترلر را با کابل USB به کامپیوتر وصل کرده و برنامه‌ی QCom را باز می‌کنیم. پورت را بازکرده و متن abcd را ارسال می‌کنیم. پس از ارسال‌کردن داده، میکروکنترلر همان پیام را برای ما ارسال می‌کند.

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

مثال دوم:

راه‌اندازی ارتباط USB در STM32 – قسمت دوم (دریافت داده)

در قسمت بعدی آموزش، برای دریافت داده از FIFO استفاده می‌کنیم.

فایل‌های این آموزش را می‌توانید از لینک گیت‌هاب زیر دانلود نمایید:

https://github.com/sphrk/stm32_USB_CDC_Example

شاید برای شما مفید باشد:
دیود زنر چیست؟
اطلاعات
6
0
0
اشتراک و حمایت
profile نویسنده: Sepehr Kouzegaran متخصص الکترونیک

ویراستار: مریم میریان
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

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

ارسال مقاله
become a writer
نویسنده شو !

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

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

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

دیدگاه ها

become a writer
نویسنده شو !

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

ارسال مقاله
become a writer
نویسنده شو !

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

ارسال مقاله