آموزش STM32 با توابع LL قسمت بیست و نهم: راه‌اندازی تایمر نگهبان پنجره‌ای (WWDG)

آموزش STM32 با توابع LL قسمت بیست و نهم: راه‌اندازی تایمر نگهبان پنجره‌ای (WWDG)

آموزش STM32 با توابع LL قسمت بیست و نهم: راه‌اندازی تایمر نگهبان پنجره‌ای (WWDG)
آموزش STM32 با توابع LL قسمت بیست و نهم: راه‌اندازی تایمر نگهبان پنجره‌ای (WWDG)

در قسمت قبل در مورد تایمر نگهبان مستقل صحبت کردیم. در این بخش می‌خواهیم تایمر نگهبان پنجره‌ای یا WWDG را بررسی کنیم پس با سیسوگ همراه باشید. در WWDG، یک شرط دیگر نیز برای ریست شدن وجود دارد. برای این تایمر نگهبان علاوه بر مقدار ابتدایی شمارنده، یک مقدار پنجره نیز تعریف می‌شود. درصورتی‌که هنگام بازنشانی شمارنده، مقدار آن بزرگ‌تر از مقدار پنجره باشد، میکروکنترلر ریست خواهد شد. یعنی اینکه برای جلوگیری از ریست توسط WWDG، باید مقدار شمارنده را قبل ازآن‌که از 64 یا 0x40 (در مبنای 16) کمتر شود، و پس از آن‌که از مقدار پنجره کمتر شد، بازنشانی کنیم. بنابراین عمل بازنشانی حتماً باید در یک بازه یا پنجره زمانی مشخص صورت گیرد و به همین دلیل است که به این تایمر نگهبان پنجره‌ای گفته می‌شود.

شمارنده نزولی 7 بیتی واحد WWDG، حداکثر می‌تواند روی عدد 127 تنظیم شود و حداقل مقدار آن نیز مقدار پنجره است. همچنین مقدار Window یا پنجره باید عددی در بازه 64 تا 127 باشد.

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

در ادامه این واحد را در یک پروژه ساده راه‌اندازی می‌کنیم.

 

ایجاد پروژه

مثل بخش قبلی قسمت دیباگ و کلاک و USART1 را تنظیم می‌کنیم. بعدازآن باید پین PB0 را روی ورودی و در حالت pull-up تنظیم کنیم. سپس تایمر نگهبان پنجره‌ای را فعال می‌کنیم و تقسیم‌کننده کلاک آن را روی عدد دلخواه (مثلاً 8) تنظیم می‌کنیم. و مقدار شمارنده آن را 127 و مقدار پنجره را 90 قرار می‌دهیم:

 

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

 

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

برای این پروژه نیز اعمال مربوط به ریدایرکت را انجام می‌دهیم. همچنین از همان تابع نمایش منبع ریست میکرو استفاده می‌کنیم. مانند پروژه قبل در تابع int main() ابتدا با تابعی که نوشتیم منبع ریست را نمایش می‌دهیم و سپس مثل قبل همه پرچم‌های ریست را پاک می‌کنیم. سپس دو متغیر برای شمارش تعریف می‌کنیم:

برای داشتن معیار دیگری برای دانستن ادامه کار میکرو یا ریست شدن آن، می‌توانیم کد زیر را برای شمارش، در حلقه while(1) بنویسیم:

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

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

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

 

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

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

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

1 نفر

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

توجه

سیاوش
سیاوش

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

دیدگاه ها

0 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان 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 سال پیش
سیـــســـوگ

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