ST-LINKユーティリティを使用してRTCを現在の時刻に構成する
私がやっていたこと 私はSTM32マイクロコントローラーを使用しています。私のプロジェクトでは、1日の特定の時間(たとえば、午前11時と午後2時)にデータを送信できるようにする必要があります。マイクロコントローラは、これを実現する前に何時かを知る必要があります。残念ながら、私は一方向の通信しか持っていないため、ネットワークに現在の時刻を要求することはできません。 したがって、プログラミングが完了した直後に現在の時刻を設定したいと思います。次のコマンドを使用して、ST-LINKユーティリティのコマンドラインインターフェイス(ST-LINK_CLI)を使用してフラッシュにデータを書き込むことができることを知っていました。 ST-LINK_CLI.exe -w32 <Address> <data> -Rst 私は、現在コードで使用されていないアドレスにUnixタイムスタンプを書き込む簡単なテストスクリプトを作成しました。 タイムスタンプを読み取る関数を記述し、それを使用してRTC時間を設定しようとしていました。ST-LINKユーティリティユーザーマニュアルで以下を読むまで: -w32は、フラッシュメモリ、OTP、SRAMおよびR / Wレジスタへの書き込みをサポートします。 マニュアルにR / Wレジスタへの書き込みがサポートされていると記載されている場合、これはRTCレジスタに直接アクセスして設定できることを意味しますか?試しましたが、これらのレジスタに書き込むことができません。 マイクロコントローラーで処理するために特定の関数を記述する必要がなくなるため、この方法を使用することをお勧めします。これは、コードを更新する必要がなく、現在使用しているすべてのマイクロコントローラーのRTC時間を設定できることを意味します。 私がやろうとしていたこと 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の使用: 0x40007000に0x00000100を書き込んでいます...エラー! これらのレジスタを読み取ることは問題ありませんが、ST-LINKユーティリティまたはそのコマンドラインインターフェイスを使用してそれらに書き込むことはできません。 質問 ST-LINKユーティリティを使用してR / Wレジスタに書き込む方法を教えてください。 …