راه اندازی پروتکل شبکه TCPIP در STM32

هدف پروژه

در این پروژه قصد داریم واحد EMAC میکرو کنترلر STM32F4 را راه اندازی و یک کتابخانه شبکه تحت استاندارد TCP/IP بر روی میکرو راه اندازی کرده و سپس با استفاده از توابع کتابخانه ای موجود برنامه خود را پیاده سازی نماییم

برنامه ای که در انتها با استفاده از زیر ساخت های تولید شده خواهیم نوشت قادر خواهد بود لبتدا یک سرور بر روی شبکه و با پورت مشخص ایجاد نموده و سپس از طریق پروتکل TCP/IP دیود های نوری رو برد را کنترل نموده و مقادیر کلید های فشاری روی برد را برای کلاینت متصل پس از درخواست ارسال نماید.

پیش نیاز

برای اینکه از این مقاله حداکثر استفاده را بتوانید برده باشد و از مثالی که در این مقاله زده شده است حداکثر درک را داشته باشید تا بتوانید در پروژه های شخصی خودتان حداکثر استفاده را ببرید باید به نکات زیر توجه داشته باشد

آشنایی به زبان C

آشنایی به سوکت پروگرامینگ

آشنایی به میکروکنترلر STM32

آشنایی به نرم افزار CUBEMX و چگونه گی ایجاد و تولید پروژه

آماده سازی پروژه و نوشتن کد

خانواده میکروکنترلرهای STM32 دارای یک واحد جانبی به نام emac هستند که با اتصال به لایه فیزیکال PHY

امکان پیاده سازی لایه های TCP/IP را فراهم می آورند

برای اینکه بتوانیم با توابع سوکت در TCP/IP برنامه نویسی لازمه را انجام دهیم لازم است ابتدا واحد emac میکروکنترلر و سپس لایه PHY را راه اندازی نماییم و سپس کتابخانه های مربوط به شبکه را به پروژه اضافه نماییم

راه اندازی دو بخش اول کار پیچیده ای نمیباشد و نیاز به شناخت میکروکنترلر و ریجیستر های آن است ولی پیاده سازی توابع و کتابخانه های TCP/IP امری پیچیده ، دشوار و زمان بر است که شاید خارج حوصله هر شخصی باشد به همین دلیل برای اینکه بتوانیم از این توابع استفاده نماییم میبایست از کتابخانه هایی که برای این امر در نظر گرفته شده اند استفاده کنیم

کتابخانه های معمول که هم اکنون اکثر برنامه نویسان این حوزه از آن استفاده میکنند با استفاده از کتابخانه های RL-ARM که متن باز نبوده و دسترسی به سورس این کتابخانه ها وجود ندارد و یا کتابخانه های LWIP که به صورت کاملا متن باز امکان پذیر است

این که ما برای پروژه خودمان از کدامیک از این کتابخانه ها میخواهیم استفاده نماییم بستگی به نوع پروژه ما دارد زیرا استفاده از هر یک ازاین کتابخانه ها مزایا و معایب خاص خود را دارند

استفاده از یک کتابخانه آماده همانند RL-ARM شاید برای شروع کار بسیار عالی و به نوعی خرید زمان هم باشد ولی باید توجه داشت ما هیچ دسترسی به سورس این کتابخانه نداریم و صرفا یک مصرف کننده هستیم البته مصرف کننده ای که هزینه کالا مورد استفاده خود را هم پرداخت نکرده و به احتمال زیاد از نسخه کرک شده در حال استفاده هستیم و به همین دلیل پشتیبانی شرکت تولید کننده راهم از دست داده ایم

استفاده از کتابخانه LWIP تا قبل از اینکه نرم افزار CUBEMX یک پروژه آماده را برای ما بسازد کاری تخصصی و پیچیده بود ولی امروز به کمک نرم افزار CUBEMX ساخت یک پروژه بر اساس کتابخانه LWIP برای هر کدام از خانواده های STM32 که دارای واحد emac میباشند به سادگی امکان پذیر است

در این مقاله قصد داریم با استفاده از میکروکنترلر stm32f407zgt که دارای واحد emac میباشد و برد آموزشی گروه نامینیک که بر اساس این میکروکنترلر طراحی شده است پروژه خود را با نرم افزار cubemx ساخته و سپس برنامه مربوطه برای کنترل دیود های نورانی وکنترل کلید های فشاری را پیاده سازی نماییم.

ابتدا در نرم افزار cubemx تنظیمات زیر را برای پیکر بندی واحد های emac  وچهار عدد دیود نورانی و چهار عدد کلید فشاری و فعال سازی کتابخانه های LWIP را انجام میدهیم

در کنار این تنظیمات واحد سریال دیباگ برای پروگرام میکرو و تنظیم RCC برای کریستال خارجی را انجام میدهیم.

سپس کد مربوط را توسط نرم افزار تولید میکنیم و نرم افزار KEIL  را برای کامپایل پروژه و نوشتن کد مربوطه باز میکنیم

پس از اینکه واحد های جانبی از میکرو کنترلر را تنظیم نمودیم مربوط به تنظیمات قسمت شبکه میشود که بایستی در این بخش آیپی سیستم خود را تعیین نماییم.

در مرحله آخر تنظیمات کلاک میکروکنترلر باید صورت گیرد و فرکانس میکروکنترلر با استفاده از کریستال خارجی 168 مگاهرتز تنظیم گردد.

پس از تنظیمات فرکانس باید بر روی گزینه GENEREAT CODE کلیک نموده تا کد مربوط به این پروژه همراه با تمامی کتابخانه های مربوطه به HAL و LWIP به پروژه اضافه گردد.

نرم افزار KEIL را باز کرده و پروژه کامپایل مینمایم.

حالا پروژه آماده و زمان اضافه کردن کدهای مربوط به پروژه میباشد برای استفاده از لایه شبکه از کتابخانه TCP.h و توابع مربوط به آن استفاده میکنیم

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

توابع مربوط به ساختن سرور

tcp_new , tcp_bind , tcp_listen

توابع جهت برقراری ارتباط و ارسال و دریافت اطلاعات

tcp_accept , tcp_err, tcp_recv , tcp_write , tcp_close

تابع چک کردن جهت دریافت اطلاعات

MX_LWIP_Process

برای شروع ابتدا میبایست تابع server_init فراخوانی شود توجه داشته باشید ورودی این تابع یک متغیر میباشد که بایستی شماره پورتی که قرار است سرور بر روی آن قرار بگیرد داده شود به عنوان مثال شماره پورت برای صفحات وب 80 و برای Telnet شماره 23 میباشد در این پروژه ما از شماره پورت 1000 استفاده میکنیم که یک پورت آزاد است.

پس از اضافه شدن کد های مربوط به این پروژه ، پروژه را کامپایل نموده و با استفاده از پروگرامر stlink برنامه را به برد آموزشی منتقل مینمایم.

پس از انتقال برنامه به برد آموزشی میبایست کابل شبکه را به پورت شبکه موجود بر روی برد آموزشی متصل نماییم و سمت دیگر کابل شبکه را به سیستم کامپیوتری که قرار است با آن ارتباط داشته باشیم متصل نماییم وسپس ایپی سیستم را پیکربندی نماییم.

 

در صورتی که تمام کارها را به درستی انجام داده باشیم برای بررسی درستی ارتباط میتوانیم توسط سیستم از برد آموزشی پینگ بگیریم برای این منظور در قسمت RUN دستور CMD را میزنیم و سپس دستور PNIG و شماره ایپی برد آموزشی را وارد مینماییم همانند شکل زیر و در صورتی که ارتباط به درستی برقرار شده باشد تصویر زیررا مشاهده خواهیم کرد.

حالا نرم افزار Hercules را باز میکنیم و همانند تصویر زیر شماره آیپی و پوت مربوطه را وارد مینماییم و گزینه Connect را میزنیم.

پس از اتصال موفقیت آمیز سیستم به سرور برد آموزشی میتوانیم دستورات لازمه برای کنترل دیود های نورانی و یا خواندن کلید های فشاری را اجرا نماییم.

دريافت سورس پروژه اين مقاله

با توجه به اینکه نرم افزار CUBEMX این قابلیت را دارد با تغیرر میکرو و با کمی تغیرات برنامه خود را بر روی یک میکرو دیگر از خانواده STM32 پیاده سازی نمایید ما تمامی تنظیمات فوق را برای میکرو STM32F107 که برد آموزشی آن نیز متن باز شده و در فروشگاه نیز موجود می باشد انجانم داده ایم.

برای دریافت سورس برنامه فوق برای برد آموزشی STM32F107 به این لینک مراجعه نمایید.

دريافت سورس پروژه اين مقاله برای میکروکنترلر STM32F107

در فیلم زیر نحوه عملکرد سیستم نمایش داده شده است.

 

مقالات

نظر بدهید

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

-- بارگیری کد امنیتی --

مطلب قبلی
مقدمات مورد نیاز برای شروع آموزش میکروکنترلر STM32
مطلب بعدی
مبدل دیجیتال به آنالوگ ARM