جلسه۳: آموزش مقدماتی نرم افزار KEIL

0
71
نرم افزار KEIL

در جلسه گذشته، به معرفی مقدماتی نرم افزار CubeMX پرداختیم و تنظیمات GPIO را برای انجام یک پروژه ساده در محیط نرم افزار CubeMX انجام دادیم. در این جلسه به آموزش مقدماتی نرم افزار KEIL می‌پردازیم و با منتقل کردن کد ساخته شده توسط نرم افزار CubeMX به این نرم افزار و وارد کردن کد پروژه ی هدف در این محیط برنامه نویسی را آغاز می‌کنیم. با ما همراه باشید…

اجرای کد تولید شده در محیط نرم افزار KEIL

در گام اول به پوشه MDK-ARM در مسیر داده شده  که در نرم افزار CubeMX در بخش مدیریت پروژه نوشتیم، مراجعه می کنیم و  برنامه ساخته شده برای نرم افزار KEIL را باز می کنیم.

اجرای کد تولید شده در محیط نرم افزار KEIL
MDK-ARM

پس از بازکردن پروژه ساخته شده، برنامه ما در محیط نرم افزار KEIL مطابق عکس زیر نمایش داده می شود:

محیط نرم افزار KEIL

حال با باز کردن پوشه های بخش Project نرم افزار واقع در سمت چپ تصویر فایل main.c را باز می کنیم

فایل main.c

در این بخش ما می توانیم کد اصلی پروژه مدنظر را وارد کنیم.

قبل از شروع برنامه نویسی با بخش های مختلف این نرم افزار آشنا می شویم.

شکل زیر که چهار بخش مختلف تب project ترم افزار هست را نشان می دهد که تب اول آن(project) در سمت چپ تصویر نمایان است. در این بخش فایل های مختلف پروژه و کتابخانه های آن قرار دارد. و در صورتی که بخش مشخص شده در تصویر(Driver/STM32…) را باز کنیم با کتابخانه های HAL موجود در این پروژه رو به رو می شویم(نظیر کتابخانه تایمر یا خروجی و ورودی و فلش و…) و با باز کردن هرکدام، کدهای این کتابخانه را مشاهده کنیم و می توان از توابع ان برای راه اندازی بخش های مختلف استفاده کرد.

project

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

بخش سوم مربوط به توابع مورد استفاده در کتابخانه های موجود در پروژه می باشد و با باز کردن آنها مطابق شکل زیر میتوان آن توابع را مشاهده کرد. به طور مثال در تصویر زیر توابع کتابخانه gpio که در این پروژه به آن نیاز داریم را مشاهده می کنید:

توابع کتابخانه gpio

بخش دیگر از نرم افزار که باید با آن آشنا بشویم در تصویر زیر آورده شده است

با استفاده از گزینه build یا دکمه F7 روی صفحه کلید که در کادر۱ مشخص شده است میتوان پروژه را کامپایل کرد تا در صورت وجود خطا را هشدار، کاربر از آن مطلع شود.

بخش مشخص شده در کادر۲، گزینه Rebuild را برای کاربر فراهم میکند و کاربر با این گزینه build قبلی را پاک کرده و از دوباره کل پروژه build می شود (تفاوت آن دو را به صورت فلوچارت در تصویر زیر مشاهده می‌کنید).

گزینه Rebuildوگزینه build

و با استفاده از کادر ۳، می‌توان پروژه ساخته شده را در صورت عدم وجود ایراد در پروژه در حافظه میکروکنترلر بارگذاری نمود.

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

بخش ۵ نیز مربوط به دیباگ کد می‌باشد و به کمک آن می توان عملیات دیباگ را انجام داد و به اشکالات احتمالی کد پی برد.

حال پس از آشنا شدن با نرم‌افزار به سراغ کدنویسی رفته و کدی را جهت روشن و خاموش کردن LED می‌نویسیم.

همانگونه که در بخش توابع کتابخانه دیدیم، توابعی در کتابخانه gpio قرار دارد که به کمک آنها می‌توانیم کد مد نظر خود را بنویسیم. برای نوشتن  این پروژه به سه تابع آخر یعنی :

HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)

HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

نیاز خواهیم داشت.

به کمک تابع اول می‌توانیم اطلاعات (یک یا صفر بودن) یک پین از پورتی مشخص در حالتی که آن پین به عنوان ورودی تعریف شده باشد را بخوانیم.

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

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

پس برای فعال کردن LED می‌توانیم کد زیر را بنویسیم:

فعال کردن LED

* قبل از ذکر نکته دیگر توجه شود که قطعه کدهای نوشته شده سعی گردد میان دو قسمت BEGIN و END نوشته شود تا در صورت تغییر در نرم افزار CubeMX این تکه کدها از دست نرود.

با این کد LED فقط روشن خواهد شد و به همان صورت باقی می‌ماند. برای خاموش کردن آن باید همین کد را نوشت ولی بجای عدد ۱ عدد ۰ را قرار داد. منتها میان این دو قطعه کد باید تاخیری وجود داشته باشد تا چشمک زدن آن توسط چشم انسان قابل تشخیص باشد. لذا با استفاده از تابع hal_delay  که در کتابخانه پروژه اصلی قراردارد استفاده می‌کنیم:

تابع hal_delay

و کد نهایی به شکل زیر خواهد بود:

کد نهایی

با این کد LED متصل شده به میکروکنترلر ابتدا روشن میگردد و در ادامه پس از ۵۰۰ میلی ثانیه خاموش می‌شود و همچنین دوباره پس از گذشت ۵۰۰ میلی ثانیه روشن می‌شود و این حلقه تا بینهایت ادامه می‌یابد.

شیوه دیگر پیاده سازی این کد استفاده از تابع toggle می‌باشد. و به صورت زیر می‌تواند پیاده شود و همان کار بالا را انجام دهد:

تابع toggle

تا به اینجا ما کد پروژه را زدیم. در ادامه باید این کد را در میکروکنترلر بارگذاری کرده و آنرا اجرا کنیم.

بدین منظور ابتدا به بخش option torget رفته و تنظیمات را مطابق شکل زیر انجام ‌می دهیم و پس از آن میکروکنترلر را پروگرام می‌کنیم.

option torget

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

نکته دیگری که در عکس فوق حايز اهمیت است بخشprograming algorithm  می‌باشد که همانگونه که مشاهده می‌کنید در این قسمت نوع میکروکنترلر و مقدار حافظه آن و محدوده آن مشخص است.

سایر بخش ها این تب و سایر تبها نیز در ادامه و در بخش مربوط به خودشان توضیح داده خواهد شد. پس با ما همراه باشید با ادامه‌ی آموزش میکروکنترهای STM32 .

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

 

نویسنده: اشکان راکی

 

 

منبع:گروه الکترونیک قدرت دانشگاه تهران

مطلب قبلیجلسه۲: آموزش مقدماتی نرم افزار CubeMX
مطلب بعدیجلسه ۴: اینتراپت خارجی (EXTI)

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید