STM32 window watchdog örneği

Başlatan magnetron, 31 Ağustos 2013, 15:12:07

magnetron

merhaba forum

stm32F103 için window watchdog kullanan var mı ?

örnek kod ekleyebilir mi ?

teşekkür

fgokcegoz

ST nin sitesinde STM32F10X serisi için yayınlanan standart kütüphanelerde window watchdog için örnek bulunmaktadır. Dosyayı indirip, examples klasörü içindeki örneği inceleyebilirsiniz.

http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware/stsw-stm32054.zip
"Vicdanın ziyası, ulûm-u diniyedir. Aklın nuru, fünun-u medeniyedir. İkisinin imtizacıyla hakikat tecelli eder." (Bediüzzaman Said Nursi)

mistek

#2
Pilli bir uygulamada işlemcinin boş kaldığı zamanlarda uykuya girmesi ve belli aralıklarla çıkması için uğraşıyorum.

St kütüphanesinde standby örneğini inceledim. Bu işlemciyi tamamen durduruyor ve dış kesme gelince kaldığı yerden devam ediyor.
Uyanma kısmını dış kesme ile değilde yazılım kısmında kontrol etmek istiyorum. Stm32f107 içerisinde IWDG ve WWDG birimleri var.

İşlemci uyanırken resetlensin istemiyorum kaldığı yerden devam etmesi lazım. Bunun için WWDG mi kullanmalıyım?

Birde sadece çekirdeği kapatmak istesem (sleep mode durumu) uyandırma şekli nasıl olur ?
----
Ek olarak Stop mode ile Standby mode çalışmasının farkını anlamadım.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

X-Fi

#3
Hocam uyandırma işi illaki kesme ile olmak zorunda harici veya dahili kesmelerden uyanacak sizin istediğiniz dahili kısım bu işi yapması için WakeUpTimer denen bir timer var. Bu timer RTC kristali veya LSI'dan clock alıyor. STM32L serisinde max 30 sn ye kadar kurulabiliyor. Bunun dışında RTC nin saniye kesmesi de uyandırma görevi yapabilir. Bunun dışında RTC Alarm donanımı olan MCU larda (F107 de yok diye biliyorum) alarm tarihini kurup kesme gelmesini beklede uyanabilirsiniz. Pilli uygulama için F107 uygun bir işlemci değil MHZ/mA oranı çok yüksek ve donanımlarıda LP tasarlanmamış. St-by modun Ram saklayabilme durumuna dikkat edin farklı modları var bir bölümünü saklıyor veya hiç saklamıyor. Stop modda ram hafıza korunur.

Kolay gelsin.

Edit: Max 30sn değil 32 sn miş.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

mistek

Pilli uygulama ama çok kritik değil sadece 5 saat yerine, 5 saat 10dakika çalıştırsam daha avantajlı oluyor.
Alternatif bir yol izlemem lazım ve RAM i korumam gerekiyor. STOP mode istediğim gibi ancak uyandırma problem. RTC alarm stm32f107 de mevcut.
Wakeup Timer dediğiniz Auto-Wakeup sanırım? Standby mode da iken birkaç kesme uyandırma işini yapıyor ancak Stop mode için sadece Exti uyandırabiliyor yazıyor.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

X-Fi

STANDBY moddan NRST , WKUP pinleri(PA0,PA13) , RTC Alarm , IWDG reset ile çıkabiliyormuş.

STOP modan ise EXTI interraptları gerekiyormuş burada şöyle bir durum var 1 den 16 ya kadar olan EXTI event'i tüm portların 0-15 IO pinlerini kapsıyor. Ancak exti-1 i örnek veriyorum PB2'ye kurarsanız PA,C,D,E,F,G,H portlarının 2. pinine artık EXTI kuramıyorsunuz. Buda işlemcideki en fazla 16 pin ile uyanır ama kurulan pin diğer portlardaki o pini kesme kullanımını kısıtlar demek oluyor.

Ayırıca EXTI eventlerinin 16 dan sonrası da peripherallar arasında paylaştırılmış 17 alarm, 18 wakeuptimer, 19 comp gibi gidiyor.

STOP mod için söylüyorum girerken RCC flaglarını temizlemek gerekiyor yoksa MCU katalog değerlerinden fazla akım tüketiyor.

Açıkcası biraz işin ayrıntısına girmek gerekli iyi çalışmalar.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

mistek

Alıntı yapılan: X-Fi - 09 Eylül 2013, 17:12:19
STANDBY moddan NRST , WKUP pinleri(PA0,PA13) , RTC Alarm , IWDG reset ile çıkabiliyormuş.

STOP modan ise EXTI interraptları gerekiyormuş burada şöyle bir durum var 1 den 16 ya kadar olan EXTI event'i tüm portların 0-15 IO pinlerini kapsıyor. Ancak exti-1 i örnek veriyorum PB2'ye kurarsanız PA,C,D,E,F,G,H portlarının 2. pinine artık EXTI kuramıyorsunuz. Buda işlemcideki en fazla 16 pin ile uyanır ama kurulan pin diğer portlardaki o pini kesme kullanımını kısıtlar demek oluyor.

Ayırıca EXTI eventlerinin 16 dan sonrası da peripherallar arasında paylaştırılmış 17 alarm, 18 wakeuptimer, 19 comp gibi gidiyor.

STOP mod için söylüyorum girerken RCC flaglarını temizlemek gerekiyor yoksa MCU katalog değerlerinden fazla akım tüketiyor.

Açıkcası biraz işin ayrıntısına girmek gerekli iyi çalışmalar.

Hocam verdiğiniz bilgiler için teşekkürler. Stop mode ve standby mode için st kütüphanesindeki fonksiyonu kullanıyorum bitleri siliyor. Ancak çıkma durumu sıkıntılı.

Sleep mode kullanmaktan başka seçenek yok gibi duruyor.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mistek

Evet bir çözüm bulabildim sonunda.

STOP mode a girip çıkmak için RTC alarm kesmesini kullanıyoruz. Bu kesme EXTI Line 17 oluyor.
Bknz: St std lib. pwr/stop örneği.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R