मैं क्या कर रहा था
मैं एक एसटीएम 32 माइक्रोकंट्रोलर का उपयोग कर रहा हूं और अपनी परियोजना के लिए मुझे दिन के विशिष्ट समय पर डेटा भेजने में सक्षम होने की आवश्यकता है (जैसे, सुबह 11 बजे और दोपहर 2 बजे)। माइक्रोकंट्रोलर को यह जानने की जरूरत है कि इससे पहले कि मैं यह हासिल कर सकूं। दुर्भाग्य से, मेरे पास केवल एक-तरफ़ा संचार है, और इसलिए मैं नेटवर्क से वर्तमान समय का अनुरोध नहीं कर सकता।
इसलिए मैं प्रोग्रामिंग करने के बाद सीधे वर्तमान समय सेट करना चाहता हूं। मुझे पता था कि मैं निम्नलिखित कमांड का उपयोग करके एसटी-लिंक यूटिलिटी कमांड लाइन इंटरफेस (एसटी- LINK_CLI) का उपयोग कर फ्लैश में डेटा लिखने में सक्षम हूं:
ST-LINK_CLI.exe -w32 <Address> <data> -Rst
मैंने एक साधारण परीक्षण स्क्रिप्ट लिखी है जो यूनिक्स समय के टिकट को कुछ पते पर लिखता है जो वर्तमान में कोड द्वारा उपयोग नहीं किया गया है।
मैं समय-स्टांप को पढ़ने और आरटीसी समय निर्धारित करने के लिए इसका उपयोग करने के लिए एक फ़ंक्शन लिखने वाला था। जब तक मैं एसटी-लिंक उपयोगिता उपयोगकर्ता मैनुअल में निम्नलिखित पढ़ता हूं :
-32 फ्लैश मेमोरी, ओटीपी, एसआरएएम और आर / डब्ल्यू रजिस्टरों को लिखने का समर्थन करता है।
जब मैनुअल कहता है कि यह आर / डब्ल्यू रजिस्टरों को लिखने का समर्थन करता है, तो क्या इसका मतलब है कि मैं सीधे आरटीसी रजिस्टरों तक पहुंच सकता हूं और उन्हें सेट कर सकता हूं? मैंने कोशिश की है, लेकिन मैं इन रजिस्टरों को नहीं लिख सकता।
मैं इस विधि का उपयोग करना पसंद करूंगा यदि ऐसा होता है, क्योंकि मुझे अब माइक्रोकंट्रोलर पर इसे संभालने के लिए एक विशिष्ट फ़ंक्शन लिखने की आवश्यकता नहीं होगी। इसका मतलब यह है कि मैं अपने कोड को अपडेट करने की आवश्यकता के बजाय वर्तमान में उपयोग किए जाने वाले किसी भी माइक्रोकंट्रोलर का आरटीसी समय निर्धारित कर सकता हूं।
मैं क्या करने का इरादा था
RTC रजिस्टर सेट करने के लिए, मैंने निम्नलिखित चरणों को करने की कोशिश की, जैसा कि STM संदर्भ नियमावली में वर्णित है :
- PWR_CR रजिस्टर में DPB बिट सेट करें
- RTC_WPR रजिस्टर को 0xCA लिखें
- RTC_WPR रजिस्टर में 0x53 लिखें
- RTC_ISR रजिस्टर में INIT बिट सेट करके RTC को रोकें
- RTC_PRER रजिस्टर पर लिखकर 1Hz घड़ी चुनें
- RTC_TR रजिस्टर में लिखकर वर्तमान समय लोड करें
- RTC_DR रजिस्टर पर लिखकर वर्तमान तिथि को लोड करें
- RTC_ISR रजिस्टर में INIT बिट को रीसेट करके RTC शुरू करें
रजिस्टरों तक पहुँचने के लिए, मैंने निम्नलिखित पतों का उपयोग किया है:
- PWR_CR: 0x4000 7000
- RTC_WPR: 0x4000 2824
- RTC_ISR: 0x4000 280C
- RTC_PRER: 0x4000 2810
- RTC_TR: 0x4000 2800
- RTC_DR: 0x4000 2804
क्या गलत हुआ
मैं इनमें से किसी भी रजिस्टर में नहीं लिख पा रहा हूँ। ST-LINK उपयोगिता के साथ, मुझे निम्नलिखित संदेश मिलता है:
स्मृति लेखन के दौरान त्रुटि हुई!
ST-LINK_CLI का उपयोग करना:
0x00000100 0x40007000 पर लिख रहा है ... त्रुटि!
इन रजिस्टरों को पढ़ना कोई समस्या नहीं है, लेकिन मैं एसटी-लिंक उपयोगिता या इसके कमांड लाइन इंटरफेस का उपयोग करके उन्हें नहीं लिख सकता।
प्रश्न
मैं एसटी-लिंक उपयोगिता का उपयोग करके आर / डब्ल्यू रजिस्टरों को कैसे लिख सकता हूं?
क्या आरटीसी के रजिस्टरों को लिखने की अनुमति देने के लिए किसी प्रकार की लिखना सुरक्षा है जिसे मैंने अनदेखा कर दिया था?