سلام دوستان
دو سه روزی بود که به یک مشکلی برخورده بودم. BLINK را نوشته بودم که نمی توانستم زمان آن را از 200 میلی ثانیه بالاتر ببرم.
امروز راه حلش رو با دیباگ کردن پیدا کردم که مربوط به WDG در میکروکنترلر های ARM میشه که تقریبا منبع فارسی ندیدم در موردش صحبت کرده باشه، بنابراین قصد دارم کمی اینجا در این مورد صحبت کنم ، تا اگر دوستان به همچین مشکلی برخوردند، بدونند راه حلش چی هست .( مدیران محترم هم اگر خواستند تاپیک رو تگ کنید)
میکروی که به عنوان مثال در مورد اون صحبت میکنیم STM32F103 هست.
1- واچ داگ تایمر مستقل(Independent watchdog)
این سگ نگهبان یک شمارنده 12 بیتی پایین شمار(DOWN COUNTER) هست که بصورت مستقل با کلاک 32 کیلوهرتزی که توسط RC داخلی خود میکرو کنترلر تولید شده کار میکنه و البته از کلاک اصلی خود تراشه یا به اصطلاح از Main'Clock تراشه مستقل هست یعنی شما چه فرکانس رو 1 مگاهرتز در نظر بگیرید چه 72 مگاهرتز این تایمر سگ نگهبان بدون توچه به کلاک میکرو دقیقا سر 128 میلی ثانیه میکرو رو ریست میکنه.
2-واچ داگ تایمر تحت برنامه (Window watchdog)
تایمر window watchdog یک شمارنده 7 بیتی پایین شمار(DOWN COUNTER) هست که از کلاک اصلی تراشه یا همون Main Clock استفاده میکنه، و میتونه توی مد Free Running فعالیت کنه و البته از طریق برنامه هم میتونید ریجسترش هاش رو دستکاری کنید.
دیتا شیت:
اما واچ داگ تایمر مستقل(Independent watchdog) علاوه بر شیوه نرم افزاری معمولا بصورت سخت افزاری و از طریق Option Byteمورد تغییر قرار میگرد، وقتی شما از طریق یک نرم افزار مثل STM32 ST-LINK Utility وارد Option Byteمیکروی خودتون میشید با چند گزینه روبه رو میشد که توضیحاتی رو اینجا در موردش میدم:
Option bytes یک سری تنظیمات شخصی سازی شده مورد نیاز برای برنامه نویسان رو دسترس قرار میده، در این قسمت تعداد کمی بایت قرار داده شده است که یک سری تنظیماتی از قبیل محافظت از حافظه از خواندن و نوشتن protect Flash رو میتونید انجام بدید.
جهت مطالعه در مورد کانفیگ OPTION BYTE میتونیداین فایل را دانلود کنید.
RDP: توسط این گزینه شما میتوانید از حافظه در مقابل خواندنوشتن محافظت کنید و برای میکرو کنترلر های STM32F0, STM32F2, STM32F3, STM32F4, STM32L4, STM32L1 دارای سه LEVEL محافظت هست و برای STM32F103 تنها یک LEVEL خفن هست که میتونید Enabled / Disabled کنیدش
WDG_SW : اگر تیک گزنیه رو نزنیم و خاموش باشه، از زمانی که تغذیه میکرو رو وصل کنیم Independent watchdog ما بصورت اتوماتیک و خودکار روشن میشه، و در اصل علت اینکه برنامه Blink من بصورت درست کار نمیکرد هم همین بود، میکرو قبل از اینکه 1 ثانیه بشماره هعی ریست میکرد.
nRST_STOP: اگر این گزینه رو خاموش کنیم، زمانی که میکرو وارد STOP MODE میشه بصورت اتوماتیک و خودکار ریست میکنه.
nRST_STDBY: اگر تیک این گزینه رو خاموش کنیم، زمانی که میکرو وارد مود استندبای میشه، خود به خود ریست میشه.
User Storage option bytes (Data 0, Data 1): دو بایت هست که میتونه برای نیازهای شخصی خودتون استفاده بشه.
البته حتما نیازی نیست که از طریق نرم افزار ST-LINK Utility قسمت OPTION BYTE رو تغییر بدید توی خود میکرو هم این قسمت ها توسط آدرس های زیر در دسترس هستند:
امیدوارم توضیحات مفید بوده باشه، اگر وقتی بشه در مورد تایمر های Stm32 هم توضیحی میدم
این منابع:
https://www.st.com/resource/en/datasheet/cd00161566.pdf
دو سه روزی بود که به یک مشکلی برخورده بودم. BLINK را نوشته بودم که نمی توانستم زمان آن را از 200 میلی ثانیه بالاتر ببرم.
امروز راه حلش رو با دیباگ کردن پیدا کردم که مربوط به WDG در میکروکنترلر های ARM میشه که تقریبا منبع فارسی ندیدم در موردش صحبت کرده باشه، بنابراین قصد دارم کمی اینجا در این مورد صحبت کنم ، تا اگر دوستان به همچین مشکلی برخوردند، بدونند راه حلش چی هست .( مدیران محترم هم اگر خواستند تاپیک رو تگ کنید)
میکروی که به عنوان مثال در مورد اون صحبت میکنیم STM32F103 هست.
***
با توجه به دیتاشیت میکرو STM32F103 ما دو عدد واچ داگ تایمر داریم1- واچ داگ تایمر مستقل(Independent watchdog)
این سگ نگهبان یک شمارنده 12 بیتی پایین شمار(DOWN COUNTER) هست که بصورت مستقل با کلاک 32 کیلوهرتزی که توسط RC داخلی خود میکرو کنترلر تولید شده کار میکنه و البته از کلاک اصلی خود تراشه یا به اصطلاح از Main'Clock تراشه مستقل هست یعنی شما چه فرکانس رو 1 مگاهرتز در نظر بگیرید چه 72 مگاهرتز این تایمر سگ نگهبان بدون توچه به کلاک میکرو دقیقا سر 128 میلی ثانیه میکرو رو ریست میکنه.
2-واچ داگ تایمر تحت برنامه (Window watchdog)
تایمر window watchdog یک شمارنده 7 بیتی پایین شمار(DOWN COUNTER) هست که از کلاک اصلی تراشه یا همون Main Clock استفاده میکنه، و میتونه توی مد Free Running فعالیت کنه و البته از طریق برنامه هم میتونید ریجسترش هاش رو دستکاری کنید.
دیتا شیت:
Independent watchdog
The independent watchdog is based on a 12-bit downcounter and 8-bit prescaler. It is
clocked from an independent 32 kHz internal RC and as it operates independently from the
main clock, it can operate in Stop and Standby modes. It can be used either as a watchdog
to reset the device when a problem occurs, or as a free running timer for application time out
management. It is hardware or software configurable through the option bytes. The counter
can be frozen in debug mode.
Window watchdog
The window watchdog is based on a 7-bit downcounter that can be set as free running. It
can be used as a watchdog to reset the device when a problem occurs. It is clocked from the
main clock. It has an early warning interrupt capability and the counter can be frozen in
debug mode
خوب همون طوری که میدونید Window watchdog به علت نرم افزاری بودن از طریق STM32CubeMX قابل دسترسی و کنترل هست بنابراین صحبتی فعلا در این مورد نمی کنیم.The independent watchdog is based on a 12-bit downcounter and 8-bit prescaler. It is
clocked from an independent 32 kHz internal RC and as it operates independently from the
main clock, it can operate in Stop and Standby modes. It can be used either as a watchdog
to reset the device when a problem occurs, or as a free running timer for application time out
management. It is hardware or software configurable through the option bytes. The counter
can be frozen in debug mode.
Window watchdog
The window watchdog is based on a 7-bit downcounter that can be set as free running. It
can be used as a watchdog to reset the device when a problem occurs. It is clocked from the
main clock. It has an early warning interrupt capability and the counter can be frozen in
debug mode
اما واچ داگ تایمر مستقل(Independent watchdog) علاوه بر شیوه نرم افزاری معمولا بصورت سخت افزاری و از طریق Option Byteمورد تغییر قرار میگرد، وقتی شما از طریق یک نرم افزار مثل STM32 ST-LINK Utility وارد Option Byteمیکروی خودتون میشید با چند گزینه روبه رو میشد که توضیحاتی رو اینجا در موردش میدم:
Option bytes یک سری تنظیمات شخصی سازی شده مورد نیاز برای برنامه نویسان رو دسترس قرار میده، در این قسمت تعداد کمی بایت قرار داده شده است که یک سری تنظیماتی از قبیل محافظت از حافظه از خواندن و نوشتن protect Flash رو میتونید انجام بدید.
جهت مطالعه در مورد کانفیگ OPTION BYTE میتونیداین فایل را دانلود کنید.
WDG_SW : اگر تیک گزنیه رو نزنیم و خاموش باشه، از زمانی که تغذیه میکرو رو وصل کنیم Independent watchdog ما بصورت اتوماتیک و خودکار روشن میشه، و در اصل علت اینکه برنامه Blink من بصورت درست کار نمیکرد هم همین بود، میکرو قبل از اینکه 1 ثانیه بشماره هعی ریست میکرد.
nRST_STOP: اگر این گزینه رو خاموش کنیم، زمانی که میکرو وارد STOP MODE میشه بصورت اتوماتیک و خودکار ریست میکنه.
nRST_STDBY: اگر تیک این گزینه رو خاموش کنیم، زمانی که میکرو وارد مود استندبای میشه، خود به خود ریست میشه.
User Storage option bytes (Data 0, Data 1): دو بایت هست که میتونه برای نیازهای شخصی خودتون استفاده بشه.
البته حتما نیازی نیست که از طریق نرم افزار ST-LINK Utility قسمت OPTION BYTE رو تغییر بدید توی خود میکرو هم این قسمت ها توسط آدرس های زیر در دسترس هستند:
این منابع:
https://www.st.com/resource/en/datasheet/cd00161566.pdf
دیدگاه