آموزش STM32 با توابع LL قسمت بیست و هشتم: راه‌اندازی تایمر نگهبان مستقل IWDG

آموزش STM32 با توابع LL قسمت بیست و هشتم: راه‌اندازی تایمر نگهبان مستقل IWDG

آموزش STM32 با توابع LL قسمت بیست و هشتم: راه‌اندازی تایمر نگهبان مستقل IWDG
آموزش 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 صحبت خواهیم کرد.

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

حمایت از سیاوش

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

1 نفر

پــــســنــدیـده انـد

توجه

سیاوش
سیاوش

کارشناس ارشد الکترونیک دیجیتال، علاقه‌مند به یادگیری

دیدگاه ها

2 دیدگاه

  • محسن
    ۱۴ تیر ۱۴۰۱

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 10 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک