درس 3: تایمر Watchdog در STM32

تایمر Watchdog (سگ نگهبان) در STM32

نویسنده: علی زاهدی | ۴ سال پیش | ۶,۶۳۳ بازدید | ۸ دقیقه مطالعه

Watchdog یک تایمر مستقل و سخت‌افزاری است که از **هنگ کردن** یا **اختلال در عملکرد** میکروکنترلر جلوگیری می‌کند. اگر برنامه اصلی نتواند به موقع آن را **ریست** کند، میکرو را **ریستارت** می‌کند.

Watchdog چیست؟

عملکرد Watchdog:

  1. تایمر شروع به شمارش می‌کند
  2. برنامه اصلی باید به طور دوره‌ای آن را ریست کند
  3. اگر ریست نشود → Timeout
  4. میکروکنترلر ریست می‌شود

کاربردهای عملی Watchdog

Robot

رباتیک

جلوگیری از حرکت خطرناک

Rocket

فضا

دستگاه‌های دور از دسترس

Factory

صنعت

خطوط تولید بدون نظارت

فعال‌سازی IWDG در STM32CubeMX

  1. در تب System Core → IWDG تیک بزنید
  2. تنظیمات:
پارامترمقدار پیشنهادیتوضیح
Prescaler256تقسیم کلاک LSI (~40kHz)
Reload Value780زمان سرریز ≈ 5 ثانیه
تنظیم IWDG در CubeMX

تنظیم IWDG برای 5 ثانیه Timeout

تنظیم GPIO برای تست

کد کامل (HAL)

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_IWDG_Init();  // فعال‌سازی Watchdog

  while (1)
  {
    __HAL_IWDG_RELOAD_COUNTER(&hiwdg);  // ریست Watchdog
    HAL_Delay(200);
    HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

    if (HAL_GPIO_ReadPin(Key_GPIO_Port, Key_Pin) == GPIO_PIN_RESET)
    {
      while(1) { }  // حلقه بی‌نهایت → Watchdog ریست نمی‌شود
    }
  }
}

نکته: اگر کلید فشرده شود → Watchdog ریست نمی‌شود → بعد از 5 ثانیه ریستارت!

نمودار عملکرد

چشمک زدن LED + ریست Watchdog
کلید فشرده → حلقه بی‌نهایت
Timeout (5 ثانیه) → ریستارت

خلاصه درس

  • Watchdog = تایمر مستقل برای جلوگیری از هنگ
  • باید به طور دوره‌ای ریست شود
  • در STM32: IWDG (Independent Watchdog)
  • کلاک جداگانه: ~40 kHz (LSI)
  • اگر ریست نشود → میکرو ریستارت می‌شود
خانهفروشگاه پروفایلتماس