جلسه چهاردهم _ نحوه راه اندازی وقفه با تحریک خارجی و آموزش تنظیمات مربوط به آن با نرم افزار STM32CubeMX
در جلسه مربوط به راه اندازی تایمر (جلسه اول)(جلسه دوم)یکی از روش های فعال سازی وقفه یا اینتراپت را با هم مرور کردیم و با نحوه استفاده از آن تا حدودی آشنا شدیم در این جلسه قصد داریم تا وقفه و انواع آن را برشمریم و نحوه راه اندازی وقفه با تحریک خارجی را بررسی کنیم.
وقفه یا اینتراپت (Interrupt) یکی از امکانات و موارد پرکاربرد در میکرو کنترلرها می باشد که با وقوع آن برنامه های عادی که میکرو در حال انجام دادن آنهاست کنار گذاشته می شوند و میکرو به تابع سرویس دهنده آن وقفه یا ISR که مخفف Interrupt Service Routine می باشد می رود و برنامه های مربوط به آن را انجام می دهد.
در واقع اولویت اجرای دستورات وقفه بالاتر از برنامه های عادی و در حال اجرا میکرو می باشد. فعال شدن وقفه در میکرو می تواند عوامل مختلفی داشته باشد که با توجه به امکانات میکرو ها متفاوت هستند ولی اکثر میکروها با عواملی چون تحریک خارجی، وقفه آنالوگ به دیجیتال، وقفه سریال، وقفه تایمر یا کانتر، وقفه مبدل دیجیتال به آنالوگ و ... وقفه مربوط به آنها را فعال می کنند. لازم به ذکر است که وقفه ها نیز دارای اولویت هستند و ابتدا وقفه هایی با اولویت های بالاتر اجرا می شوند.
این ویژگی را NVIC می گویند که مخفف Nested Vectored Interrupt Controller می باشند و به معنی کنترلر وقفه های تو در تو می باشد. این ویژگی سبب می شود تا اگر تابع سرویس وقفه ای در حال اجرا باشد و وقفه ای با اولویت بالاتر اتفاق بی افتد، برنامه در تابع وقفه اول در همان نقطه متوقف می شود و پس از آن به تابع وقفه با اولویت بالاتر می رود. در میکرو کنترلر STM32F103RCT6 تعداد 16 اولویت وقفه پشتیبانی می شود که نوع وقفه و انتخاب اولویت اجرای آن توسط کاربر مشخص می شود.
برخی از پایه های این میکرو خصوصیت فعال سازی با تحریک خارجی را دارند به عنوان مثال می توانیم به این پایه ها یک کلید را متصل نماییم و با هر بار فشردن کلید وقفه مربوط به آن فعال می شود.
با توجه به توضیحات مربوط به دیتاشیت، این میکرو قادر است 16 وقفه با تحریک خارجی را شناسایی نماید. از 16 وقفه تحریک خارجی وقفه های GPIO_EXTI1, GPIO_EXTI0 GPIO_EXTI4, GPIO_EXTI3,GPIO_EXTI2, دارای روتین وقفه مجزا می باشند ولی وقفه های GPIO_EXTI5 تا GPIO_EXTI9 و وقفه های GPIO_EXTI10 تا GPIO_EXTI15 دارای روتین وقفه مشترک می باشند که با ورود به روتین مربوط به آنها باید بررسی شود که این اینتراپت مربوط به کدام یک از آنها می باشد.
در این جلسه قصد داریم تا دو پایه تحریک وقفه خارجی را فعال کنیم و دو کلید را به این دو پایه متصل نماییم تا با هر بار فشرده شدن کلید مقدار متغیری افزایش یابد و مقدار آن روی ال سی دی نمایش داده شود.
مطابق آموزش های قبل نرم افزار STM32CubeMX را اجرا می کنیم و تنظیمات اولیه در خصوص انتخاب میکرو مورد نظر، منبع کلاک و پایه های پروگرامر و تنظیم فرکانس کاری میکرو و دیگر تنظیمات اولیه را انجام می دهیم پس از اتمام این مراحل به سراغ فعال سازی پایه های وقفه با تحریک خارجی می رویم.
در ابتدا برای اینکه حالت پایه مورد نظر را به عنوان ورودی اینتراپت مشخص کنیم لازم است روی پایه مورد نظر کلیک نماییم و گزینه GPIO_EXTIx را انتخاب نماییم عدد نوشته شده بجای ‘x’ شماره اینتراپت را مشخص می کند.
در این جلسه قصد داریم تا PA0 را به عنوان اینتراپت 0 و PB6 را به عنوان اینتراپت 6 مشخص نماییم و برای آنها نام های SW1 و SW2 را انتخاب کنیم
پس از انتخاب پایه های مورد نظر به عنوان اینتراپت باید تنظیمات اینتراپت را در نرم افزار انجام دهیم به این منظور وارد قسمت NVIC در نرم افزار می شویم در این بخش جدول اینتراپت ها مشخص شده است که با دقت در این لیست مشاهده می شود که دو گزینه EXTI Line0 interrupt و EXTI Line[9:5] interrupt در لیست موجود هستند که با فعال کردن تیک مربوط به آنها اینتراپت پایه های مورد نظر فعال می شوند.
پس از فعال نمودن تیک اینتراپت های مورد نظر می توانید اولویت آنها را نیز تغییر دهید که برای اینکار از ستون Preemption Priority بر روی اینتراپت مورد نظر کلیک می کنیم که می توانیم اعداد بین 0 تا 15 را برای آن انتخاب نماییم. با انتخاب اعداد مختلف اولویت اینتراپت تغییر می کند.
پس از انتخاب اولویت برای هر اینتراپت باید به سراغ تنظیم Pull up یا Pull down بودن پایه برویم.
برای تنظیم پایه ها به بخش GPIO می رویم که با انتخاب پایه مورد نظر اطلاعات آن پایه نمایش داده می شود که در حالت عادی پایه های تنظیم شده به عنوان اینتراپت بصورت No pull-up and no pull-down می باشد که با توجه به شرایط سخت افزار و نظر به اینکه ما قصد داریم با کدام لبه اینتراپت را فعال کنیم پایه مورد نظر را Pull up یا Pull down انتخاب می کنیم. همچنین مشخص می نماییم که وقفه با کدام لبه ایجاد شود که تنظیمات مربوط به نوع وقوع وقفه را می توانیم در بخش GPIO mode انتخاب کنیم.
در این برنامه هر دو پایه را بصورت Pull up تنظیم می کنیم و نوع وقوع وقفه را اینتراپت با لبه پایین رونده انتخاب می کنیم
پس از اتمام تنظیمات می توانیم با انتخاب گزینه GENERATE CODE پروژه را تولید نماییم.
در جلسه بعد با نحوه برنامه نویسی در محیط کیل برای راه اندازی دو اینتراپت خارجی آشنا می شویم.
دلتون شاد و لبتون پرخنده
محمد هادی دشتی
دیگر آموزش ها مرتبط با STM32:
برای مشاهده آموزش جلسه اول(معرفی هسته آرم و میکروکنترلرهای 32 بیتی شرکت ST ) کلیک کنید.
برای مشاهده آموزش جلسه دوم( معرفی نرم افزارهای مورد نیازجهت برنامه نویسی و پروگرام ) کلیک کنید.
برای مشاهده آموزش جلسه سوم( نحوه دانلود آخرین نسخه از نرم افزار STM32CubeMX ) کلیک کنید.
برای مشاهده آموزش جلسه چهارم(نحوه انجام تنظیمات در نرم افزار STM32CubeMX ) کلیک کنید.
برای مشاهده آموزش جلسه پنجم(نحوه برنامه نویسی پروژه چشمک زن با نرم افزار Keil ) کلیک کنید.
برای مشاهده آموزش جلسه هشتم( نحوه راه اندازی ال سی دی کاراکتری-قسمت اول) کلیک کنید.