تایمر Watchdog (سگ نگهبان) در STM32
نویسنده: علی زاهدی | ۴ سال پیش | ۶,۶۳۳ بازدید | ۸ دقیقه مطالعه
Watchdog یک تایمر مستقل و سختافزاری است که از **هنگ کردن** یا **اختلال در عملکرد** میکروکنترلر جلوگیری میکند. اگر برنامه اصلی نتواند به موقع آن را **ریست** کند، میکرو را **ریستارت** میکند.
Watchdog چیست؟
عملکرد Watchdog:
- تایمر شروع به شمارش میکند
- برنامه اصلی باید به طور دورهای آن را ریست کند
- اگر ریست نشود → Timeout
- میکروکنترلر ریست میشود
کاربردهای عملی Watchdog
Robot
رباتیک
جلوگیری از حرکت خطرناک
Rocket
فضا
دستگاههای دور از دسترس
Factory
صنعت
خطوط تولید بدون نظارت
فعالسازی IWDG در STM32CubeMX
- در تب System Core → IWDG تیک بزنید
- تنظیمات:
| پارامتر | مقدار پیشنهادی | توضیح |
|---|---|---|
| Prescaler | 256 | تقسیم کلاک LSI (~40kHz) |
| Reload Value | 780 | زمان سرریز ≈ 5 ثانیه |

تنظیم IWDG برای 5 ثانیه Timeout
تنظیم GPIO برای تست
- PC13: خروجی → LED (Blue Pill)
- PC14: ورودی Pull-up → کلید
کد کامل (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)
- اگر ریست نشود → میکرو ریستارت میشود