Ne yapıyordum
Bir STM32 mikrodenetleyici kullanıyorum ve projem için günün belirli saatlerinde veri gönderebilmeliyim (11:00 ve 14:00). Mikrodenetleyici bunu başarmadan önce saatin kaç olduğunu bilmeli. Ne yazık ki, sadece tek yönlü bir iletişim var ve bu nedenle ağdan şimdiki zaman talep edemez.
Bu nedenle, programlama bittikten hemen sonra geçerli saati ayarlamak istiyorum. Aşağıdaki komutu kullanarak ST-LINK Yardımcı Program Komut Satırı Arabirimi'ni (ST-LINK_CLI) kullanarak flaşa veri yazabileceğimi biliyordum:
ST-LINK_CLI.exe -w32 <Address> <data> -Rst
Şu anda kod tarafından kullanılmayan bazı adreslere Unix zaman damgasını yazan basit bir test komut dosyası yazdım.
Zaman damgasını okumak ve RTC zamanını ayarlamak için kullanmak üzere bir işlev yazmak üzereydim. ST-LINK Yardımcı Programı Kullanıcı Kılavuzunda aşağıdakileri okuyana kadar :
-w32, Flash bellek, OTP, SRAM ve R / W kayıtlarına yazmayı destekler.
Kılavuz R / W kayıtlarına yazmayı desteklediğini söylediğinde, bu doğrudan RTC kayıtlarına erişip ayarlayabileceğim anlamına mı geliyor? Denedim ama bu kayıtlara yazamıyorum.
Artık mikrodenetleyici üzerinde işlemek için belirli bir işlev yazmam gerekmediği için bu yöntemi kullanmayı tercih ederim. Bu, kodlarını güncellemek yerine, şu anda kullanımda olan herhangi bir mikrodenetleyicinin RTC zamanını ayarlayabileceğim anlamına gelir.
Ne yapmayı amaçladım
RTC kayıtlarını ayarlamak için STM Referans Kılavuzunda açıklandığı gibi aşağıdaki adımları uygulamaya çalıştım :
- PWR_CR kaydında DPB bitini ayarla
- RTC_WPR kaydına 0xCA yaz
- RTC_WPR kaydına 0x53 yaz
- RTC_ISR kaydında INIT bitini ayarlayarak RTC'yi durdurun
- RTC_PRER kaydına yazarak 1Hz saati seçin
- RTC_TR kaydına yazarak geçerli saati yükle
- RTC_DR kaydına yazarak geçerli tarihi yükle
- RTC_ISR kaydındaki INIT bitini sıfırlayarak RTC'yi başlatın
Kayıtlara erişmek için aşağıdaki adresleri kullandım:
- PWR_CR: 0x4000 7000
- RTC_WPR: 0x4000 2824
- RTC_ISR: 0x4000 280C
- RTC_PRER: 0x4000 2810
- RTC_TR: 0x4000 2800
- RTC_DR: 0x4000 2804
Ne yanlış gitti
Bu kayıtların hiçbirine yazamıyorum. ST-LINK Utility ile aşağıdaki mesajı alıyorum:
Bellek yazma sırasında hata oluştu!
ST-LINK_CLI kullanma:
0x40007000'de 0x00000100 yazılıyor ... Hata!
Bu kayıtları okumak sorun değil, ancak onlara ST-LINK Yardımcı Programı'nı veya Komut Satırı Arabirimini kullanarak yazamıyorum.
Soru
ST-LINK Yardımcı Programını kullanarak R / W kayıtlarına nasıl yazabilirim?
Göz ardı ettiğim RTC kayıtlarına yazmaya izin vermek için bir tür yazma koruması var mı?