問題タブ [real-time-clock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
timer - 初期化中の STM32 RTC タイムアウト
STM32F469I-DISCO ボードで RTC を初期化しようとしています。私はまだ学習中なので、このマイクロコントローラを十分に理解してレジスタを直接操作できるようになるまで、いくつかのプロジェクトを達成できるようにする HAL API を試してみました。
とにかく、私のコードは CubeF4 の STM32F469I-DISCO テンプレートを使用しており、HAL レイヤーとシステム クロック (8 MHz HSE オシレーター経由で 180 MHz) を直接ロードできます。
RTC を初期化するために、UM1725 : Description of STM32F4 HAL and LL drivers に記載されている手順に従いました。ページ 715、セクション 55.2.4 には、HAL_RTC API を使用する手順があります。
そして最初のポイントは、「RTC Domain Access」を有効にする必要があるということです。この点については、上記のセクション (55.2.3、同ページ) で説明しています。
そして、求められたことを実行しました。これが私のコードです(簡略化されています。RTC Init部分とシステムクロック構成のみを許可しています):
そして、それは機能しません。最下層を掘り下げた後、うまくいかない場所を見つけることができました。理由はわかりません。
HAL_RTC_Init() 呼び出しは、HAL_ERROR ステータスを返します。この HAL_ERROR は、HAL_RTC_Init() が RTC_EnterInitMode() を呼び出し、予想される時間内に条件が達成されないために HAL_TIMEOUT ステータスを返すために表示されます。関数は次のとおりです。
と :
したがって、うまく調査した場合、問題は、 hrtc->Instance->ISR & RTC_ISR_INITF == (uint32_t)RESET という条件が常に true であることです (TIMEOUT 条件が発生したため)。私が理解していないのは、上記の関数によると(EnterInitMode)、RTC_ISR_INITF と ISR 変数は明確に定義されているようで、ビット単位の演算値は 0 ではありません(RESET)。
「ISR」は関数で直接定義され、RTC_INIT_MASK (stm32f4xx_hal_rtc.h で 0xFFFFFFFF 値で #define) です。
「RTC_ISR_INITF」はマクロです: (0x1U << RTC_ISR_INITF_Pos) ここで、RTC_ISR_INITF_Pos は stm32f469xx.h で定義された 6U (#define) です。
「&」操作が 0 ではないと言ったら間違っていますか?
なぜこの TIMEOUT 条件が発生したのか分かりますか?
前もって感謝します !