با سلام خدمت همراهان پاور الکترونیک در قسمت چهارم اموزش میکروکنترلر stm8 به صورت رجیستری به راه اندازی اولین پروژه عملی خود با این میکرو کنترلر کاربردی خواهیم پرداخت و کدهای انرا خط به خط تحلیل خواهیم نمود.
همانطور که در قسمت های قبل ذکر شد میکرو کنترلر مورد استفاده stm8s003f3 خواهد بود و برای راحتی کار از برد راه انداز اماده این میکرو کنترلر که تصویر انرا در پایین مشاهده میکنید استفاده خواهیم نمود.
دوستان توجه داشته باشند که پیش نیاز این دوره اشنایی با زبان c میباشد.
پس از ساخت پروژه طبق اموزش قبل در iar کد زیر را در پروژه خود کپی نمایید.
#include <iostm8s003f3.h> void delay(unsigned long n) { while (n— > 0); } int main( void ) { PA_ODR = 0; PA_DDR = 8; PA_CR1 = 8; PA_CR2 = 8; while (1) { PA_ODR_ODR3 = !PA_ODR_ODR3; delay(10000); } }
پس از کپی کردن کد با زدن کلید F7 یا ctrl+F7 کد شما بدون اررور کامپایل میشود.
حال پروگرمر stlink خود برداشته و پین 5 ولت انرا به 5 ولت برد، gnd انرا به gnd برد، rst انرا به پایه ریست میکرو و در نهایت پایه swim پروگرمر را به پایه swim میکرو کنترلر متصل نمایید. پس از ایجاد اتصالات دوباره انرا چک نمایید که اتصالات درست برقرار شده باشند تا در روند پروگرم کردن مشکلی وجود نداشته باشد.
حال پس از کامپایل باید کد را روی میکرو کنترلر خود دانلود کنیم برای این کار دو روش وجود دارد
1 – از تب PROJECT قسمت DOWNLOAD و بخش DOWNLOAD ACTIVE APPLICATION را انتخاب کنید.
2 – از تب PROJECT گزینه DOWNLOAD AND DEBUG را انتخاب کنید که وارد محیط دیباگ میشویم که با زدن دکمه ضربدر قرمز در گوشه بالا سمت چپ میتوانیم از این محیط خارج شویم.
همانطور که مشاهده میکنید LED رو برد شما چشمک میزند اگر برد شما با برد بنده متفاوت است میتوانید یک LED را به پایه 10 میکرو یا همان PA3 متصل کنید و نتیجه را مشاهده کنید.
تحلیل کدها
#include <iostm8s003f3.h>
در این فایل رجیستر های تعریف شده در برنامه ما به میکرو شناسانده میشود.(این فایل شامل تمام رجیستر های پریفرال ها به همراه بردار های وقفه میباشد)
void delay(unsigned long n) { while (n— > 0); }
این تابع یک تابع تاخیر ساده میباشد که ورودی ان یک عدد است که پس وارد شدن به این تابع از ان عدد کم میشود(با توجه به فرکانس میکرو سرعت کم شدن این عدد کم یا زیاد میشود) و زمانی که به صفر برسد از این حلقه خارج میشود.
PA_ODR = 0;
این دستور پورت A را ریست میکند
ساختار کلی این دستور به این صورت است :
Px_ODR=y
که x نام پورت میباشد و در مثال ما پورت A میباشد و y مقداری است که در خروجی پورت قرار میگیرد چون ما میخواهیم تمام پورت A صفر شود پس مقدار انرا برابر 0 قرار میدهیم.
در این تصویر جزئیات این رجیستر را مشاهده مینمایید.
PA_DDR = 8;
این دستور پورت A3 را خروجی میکند
ساختار این رجیستر به صورت زیر است:
Px_DDR=y
در این رجیستر مقدار x نام پورت و y پین مورد نظر است به عکس زیر توجه کنید.
ما میخواهیم پورت 3 از پورت D را خروجی تعریف کنیم پس میشود PD_DDR=y
حال باید پین انرا مشخص کنیم که طبق تصویر بالا گفته شده که مقدار 0 برای ورودی و مقدار 1 برای خروجی میباشد و از انجایی که در پورت A هفت عدد پین (طبق عکس) داریم پس مقدار باینری ان میشود 00001000 که برابر عدد 8 میباشد (برای تبدیل میتوانید از ماشین حساب ویندوز استفاده کنید) پس تا اینجا پورت D3 را خروجی تعریف کردیم.
از این دستور به شکل دیگری نیز میتوان استفاده کرد به صورت زیر:
PA_DDR DDR3= 1;
که در اینجا هم در قسمت DDR3 نیز پین را تعریف نموده ایم و فقط مقادیر 0 یا 1 را جهت ورودی یا خروجی نمودن استفاده میکنیم.
PA_CR1 = 8;
این رجیستر، رجیستر کنترلی اول پورت ها میباشد که در دستور بالا ما PA3 را بوصورت خروجی PUSHPULL تعریف نمودیم که در عکس زیر میتوانید این رجیستر را مشاهده کنید شما همچنین میتوانید از این دستور با این صورت نیز استفاده نمایید.
PD_CR1_C13 = 1;
PA_CR2 = 8;
این رجیستر هم رجیستر کنترلی دوم پورت میباشد که با توجه مقداری که در ان قرار میگیرد میتوان خروجی را در دو سرعت مختلف راه اندازی کرد که با توجه به تصویر زیر ما سرعت را برابر 10MHz قرار داده ایم
از این رجیستر به صورت زیر نیز میتوان استفاده کرد.
PD_CR2_C23 = 1;
در حلقه بینهایت دستور:
PA_ODR_ODR3 = !PA_ODR_ODR3;
وجود دارد همانطور که در بالا اشاره شد این دستور برای قرار دادن مقدار در خروجی میباشد که در هر بار اجرا شدن این دستور مقدار ان مخالف مقدار قبلی میباشد.
و اخرین دستور
delay(10000);
میباشد که این دستور به تابعی که در بالا تعریف شده است برمیگردد تا به مقدار ارگومان تابع تاخیر ایجاد میکند تا روشن و خاموش شدن LED قابل مشاهده باشد.
لطفا سوالات خود را در مورد این پست در نظرات همین صفحه مطرح نمایید.
2 دیدگاه. ارسال دیدگاه جدید
سلام
برای من error داد من طبق آموزش کرک کردم منتها لایسنس من error داد مو به مو انجام دادم حتی چند بار
Building configuration: tablo – Debug
Updating build tree…
main.c
Fatal Error[LMS001]: License check failed. Use the IAR License Manager to resolve the problem.
Failed to obtain feature: “STM8.EW.COMPILER_STD” version: “1.05”.
No license is available for this feature. Status code 0x12. [LicenseCheck:2.15.4.1030, RMS:9.1.0.0104,
Feature:STM8.EW.COMPILER, Version:1.05]
Error while running C/C++ Compiler
Total number of errors: 1
Total number of warnings: 0
سلام نیما عزیز
این مشکل مربوط به نرم افزار موقع نصب است یا کامپایل کدها؟