توصیه شده, ARM, STM32, آموزش, آموزش STM32 با توابع LL, مقاله های سیسوگ

تایمر نگهبان مستقل برای STM32 | قسمت 28 آموزش STM32 با توابع LL

IWDG

در قسمت قبل با کالیبره کردن RTC آشنا شدیم. در برنامه‌نویسی پروژه‌های مختلف ممکن است خطاهایی ایجاد شوند که از آن بی‌خبر باشیم. یا اینکه به هر دلیل دیگری در حین اجرا برنامه دچار اشکال شود یا گیر کند. برای این موقعیت یک مکانیسم در نظر گرفته‌شده که تایمر نگهبان مستقل IWDG است، و با ریست کردن میکروکنترلر، روند اجرای برنامه را به روال عادی برمی‌گرداند. در این بخش می‌خواهیم نحوه کارکرد IWDG و چگونگی راه‌اندازی آن در بورد Blue Pill را شرح دهیم.

با سیسوگ همراه باشید.

واحد IWDG شامل یک شمارنده نزولی 12 بیتی است که با کلاک داخلی کم‌سرعت میکرو (LSI) و مستقل از کلاک سیستم کار می‌کند. همچنین یک تقسیم‌کننده کلاک در این واحد وجود دارد که می‌توان به‌وسیله آن به نرخ کلاک موردنیاز دست پیدا کرد.

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

در ادامه تایمر نگهبان مستقل IWDG را در یک پروژه ساده راه‌اندازی می‌کنیم.

 

ایجاد پروژه

مثل بخش‌های قبلی قسمت دیباگ و کلاک و USART1 را تنظیم می‌کنیم. بعدازآن باید پین PA5 را روی ورودی و در حالت pull-up تنظیم کنیم. سپس IWDG را فعال می‌کنیم و تقسیم‌کننده کلاک آن را روی یک عدد دلخواه (مثلاً 16) تنظیم و مقدار شمارنده آن را 4095 می‌کنیم.

 

اکنون تنظیمات درایورها را نیز مانند قبل انجام می‌دهیم و وارد بخش کدنویسی می‌شویم.

 

نوشتن کد پروژه IWDG

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

در تابع ()int main ابتدا با تابعی که نوشتیم منبع ریست را نمایش می‌دهیم و سپس همه پرچم‌های ریست را پاک می‌کنیم؛

سپس یک شمارنده با مقدار اولیه‌ی صفر تعریف می‌کنیم  و مقدار شمارنده IWDG را بازنشانی می‌کنیم؛

حالا باید در حلقه while(1)، یک شرط برای بازنشانی مقدار شمارنده‌ی IWDG تعریف کنیم (که فشرده شدن کلید PA5 است)، که در صورت عدم وقوع شمارنده به صفر رسیده و ریست اتفاق افتد، همچنین مقدار شمارنده‌ای که تعریف کردیم را در هر بار اجرای حلقه افزایش می‌دهیم و چاپ می‌کنیم؛

اکنون باید یک کلید یا push-button به پایه PA5 متصل کنیم و برنامه را روی میکرو دانلود کنیم. نتیجه اجرا را در ترمینال سریال می‌بینیم؛

 

می‌بینیم که اگر کلید PA5 را فشار ندهیم، میکرو بعد از شمارش تا عدد 6، ریست خواهد شد و درصورتی‌که قبل از رسیدن شمارنده تایمر نگهبان به عدد صفر، کلید را فشار دهیم، اجرای برنامه و شمارش ادامه خواهد داشت. در قسمت بعدی در مورد تایمر نگهبان پنجره‌ای یا WWDG صحبت خواهیم کرد.

لینک این پروژه در گیت‌هاب

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

2 دیدگاه در “تایمر نگهبان مستقل برای STM32 | قسمت 28 آموزش STM32 با توابع LL

  1. Avatar for محسن محسن گفت:

    سلام. بسیار عالی
    ممنون از مطالب مفیدتون

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام ممنون از شما

دیدگاهتان را بنویسید

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