سیسوگ در قسمتهای قبل آموزش میکروکنترلر STM8 برنامهنویسی و پروگرام کردن میکروکنترلر STM8 را به همراهانش آموزش داد. در این مقاله قصد دارد از این آموزشها به صورت عملی استفاده کند تا شما نتیجه یادگیرهای خود را به صورت یک LED چشمکزن مشاهده نمایید.
اولین پروژهای که برای هر نرمافزار جدید انجام میشود، برنامه LED چشمکزن است. در آموزش میکروکنترلر STM8 نیز همین کار را انجام میدهیم. تابع خروجی را با ساختن یک LED چشمکزن تست میکنیم. شماتیک برد Disco را مشاهده کنید و پینهایی که به LED ها متصل میشوند را بررسی کنید.
همچنین میتوانید از STM8CubeMX نیز استفاده کنید.
در زیر بلوک دیاگرام داخلی پینهای GPIO نشان داده شده است:
از آنجا که هر I / O به طور مستقل قابلیت تنظیم دارد و گزینههای بسیاری با آن مرتبط است، بلوک زیر در نگاه اول پیچیده به نظر میرسد. گزینههای مختلف هر I / O را میتوانید در جدول زیر مشاهده کنید:
در زیر توابع SPL مرتبط با ماژول GPIO نمایش داده شده است.
کد زیر را مشاهده کنید. این کد بدون دسترسی به رجیسترهای سنتی نوشته شده است. در اینجا همه چیز یک نامگذاری معنادار دارد، درست مانند نامگذاری در کتابچه راهنمای مرجع. با این وجود درک کد ساده است.
اتصالات سخت افزاری
کد نمونه LED چشمکزن
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include "STM8S.h" void main (void) { int i; GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOC); GPIO_Init(GPIOC, GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOD, GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); for(;;) { GPIO_WriteReverse(GPIOC,GPIO_PIN_3); GPIO_WriteReverse(GPIOD,GPIO_PIN_3); for(i=0;i<10000;i++) ; } } |
توضیح
خطوط زیر پیکربندی GPIO هایی که در کد مورد استفاده قرار گرفتهاند را نشان میدهند. هر بار که برای اولین بار سختافزاری را مجدداً تنظیم یا راهاندازی میکنید، قبل از استفاده آن باید آن را پیکربندی کنید. گر چه این کار اجباری نیست، اما احتمال خطا در تنظیمات را حذف می کند.
1 2 | GPIO_DeInit(GPIOD); GPIO_DeInit(GPIOC); |
پس از پیکربندی، میتوان تنظیمات GPIO ها را انجام داد. ورودیها میتوانند دارای مقاومت داخلی یا بدون مقاومت داخلی باشند. خروجیها میتوانند نوع Push_Pull Totem_pole و یا نوع تخلیه باز باشد. هر پین میتواند به طور جداگانه پیکربندی شود و هیچ وابستگی به دیگر پینها ندارد. در این کد GPIO PD3 به عنوان یک خروجی Push_Pull سریع تعریف شده است.
1 2 | GPIO_Init(GPIOC, GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOD, GPIO_PIN_3 , GPIO_MODE_OUT_PP_LOW_FAST); |
بخش باقیمانده از کد در حلقه اصلی، به صورت زیر است:
1 2 3 4 5 6 7 | for(;;) { GPIO_WriteReverse(GPIOC,GPIO_PIN_3); GPIO_WriteReverse(GPIOD,GPIO_PIN_3); for(i=0;i<10000;i++) ; } |
در قسمت هشتم آموزش میکروکنترلر STM8 کلاک داخلی سیستم را آموزش خواهیم داد. با سیسوگ همراه باشید.
لینکهای دانلود
مطالب مرتبط
- قسمت اول − میکروکنترلر STM8 چیست و از کجا آمده است؟
- قسمت دوم − معرفی بردهای Discovery میکروکنترلر STM8
- قسمت سوم − کامپایلر و پروگرامر
- قسمت چهارم − STM8CubeMX
- قسمت پنجم − آماده سازی ابزارهای نرمافزاری برای STM8
- قسمت ششم − چگونه برنامه خود را روی STM8 آپلود کنیم؟
- قسمت هشتم − کلاک سیستم (CLK)
- قسمت نهم − وقفه خارجی (EXTI)
- قسمت دهم − Beeper
- قسمت یازدهم − LCD کاراکتری
- قسمت دوازدهم − مبدل آنالوگ به دیجیتال (ADC)
- قسمت سیزدهم − تایمر نگهبان آنالوگ (AWD)
- قسمت چهادهم − تایمر نگهبان (IWDG)
- قسمت پانزدهم − تایمر نگهبان محدوده ای (WWDG)
- قسمت شانزدهم− اصول اولیه تایمرها
- قسمت هفدهم− تایمر 2
- قسمت هجدهم −تایمر 4
- قسمت نوزدهم −PWM
- قسمت بیستم − PWM تایمر 1
- قسمت بیست و یکم − بررسی اجمالی ارتباطات
- قسمت بیست و دوم − رابط سریال (UART)
- قسمت بیست و سوم − رابط کاربری سریال (SPI)
- قسمت بیست و چهارم − رابط I2C
- دوره رایگان آموزش میکروکنترلر STM8 – سیسوگ
سلام
آموزش خوبی بود.
پروگرم کردم روی stm8s003f3 و جواب داد.
راستش فقط نفهمیدم چی شد!!!
ی ide به نام stvd داریم که کامپایلر cosmic رو بهش معرفی کردیم و…
میشه ی توضیح کلی بدید؟
(ی سوال غیر مرتبط هم داشتم. چرا st-link خودش ریست نمیکنه تا برای اجرای برنامه نخواهم ی بار قطع و وصلش کنیم؟ )
سلام
خوب فکر میکنم توضیحات مطلب به انداز کافی گویا هست و چیزی نمی بینم که بخوام بهش اظافه کنم
اگر بگید کجاش براتون گنگ هست شاید بهتر بتونم راهنمایی کنم
+ احتمالا جایی توی تنظیماتش باید چنین قابلیتی باشه ولی به شکل نرم افزاری
سلام وقتتون بخیر ممنون از زحماتی که کشیدید واقعا کارتون درسته.
یک سوال داشتم ممنون میشم راهنمایی کنید ایا میشه از توابع spl در iar استفاده کرد من کتابخانه هاشو ادد میکنم منتها ارور میده و میگه باید نوع میکرو را هم مشخص کنم البته داخل تنظیمات این کارو انجام دادم اما ارور داره باز هم ممنون میشم راهنمایی کنید.
سلام
بله قطعا میشه این کار رو انجام داد ؛ تنها لازمه که مدل میکرو رو توی منوی تنظیمات کامپایلر قسمت define وارد کنید تا این خطا ها برطرف بشه./
باسلام
آیا تابع delay در این کتاب خانه موجود هست ؟ به فرض اگر بخواهم مقدار 500 میلی ثانیه تاخیر ایجاد کنیم ، ایا تابعی مختص این کار هست یا باید خودمان با وقفه و تایمر داخلی بسازیمش ؟
تاخیر متاسفانه در کتابخانه خود St موجود نیست اگر تاخیر دقیق لازم دارید از تایمر برای ساختش استفاده کنید اگر نه از حلقه for هم میتونید استفاده کنید.
تصاویر باز نمی شوند. لطفا مشکل رو رفع کنید باتشکر
سلام
مشکل تصاویر بر طرف شد. سپاس از تذکر شما
چرا تصاویر باز نمیشه؟!!!!
مشکل برطرف شد دوست عزیز:)
درود….
این تنظیمات رو میشه واسه میکرو stm8L151 هم بکار برد یا نه ؟
سلام
رجیسترها تا حدود زیادی در انواع میکروها منطبق هستند ولی ممکنه به خاطر تعداد پایه ها و تغییرات جزئی مجبور باشید برنامه را تغییر دهید.
ولی در حالت کلی می توان گفت برای دیگر میکروها هم می توان این تنظیمات را انجام داد.
موفق باشید.