「startup_stm32f429xx.s」ファイルでは、システムのリセット機能は、最初SystemInitを呼び出します
1 ; リセットハンドラ 2 Reset_Handler PROC 3 EXPORT Reset_Handler [WEAK] 4 IMPORTのSystemInit 5 IMPORT __main 6 7 LDR R0、= SystemInit 8 BLX R0 9 LDR R0、= __main 10 BX R0 11 ENDP
SystemInit関数定義:
1 空隙 SystemInit(ボイド) 2 { 3 / * FPU設定------------------------------------- ----------------------- * / 4 の#if(__FPU_PRESENT == 1)&&(__FPU_USED == 1) 5 SCB-> CPACR | =((3UL << 10 * 2)|(3UL << 11 * 2)); / * 設定CP10とCP11フルアクセス* / 6 #endifの 7 / * ------------既定のリセット状態にRCCクロックの設定をリセット* / 8 * /HSIONビットに設定* / 9 RCC-を> CR | =(のuint32_t)0x00000001の。 10 11 / * リセットCFGR登録* / 12 RCC-> CFGR = 0x00000000の。 13 14 / * リセットHSEON、CSSONとPLLONビット* / 15 RCC-> CR&=(のuint32_t)0xFEF6FFFF 。 16 17 / * リセットPLLCFGR登録* / 18 RCC-> PLLCFGR = 0x24003010 。 19 20 / * リセットHSEBYPビット* / 21 RCC-> CR&=(のuint32_t)0xFFFBFFFF; 22 23 / * すべての割り込みを無効にする* / 24 RCC-> CIR = 0x00000000の。 25 26 / * ベクタテーブルの場所を設定するオフセット追加アドレス------------------ * / 27 の#ifdef VECT_TAB_SRAM 28 SCB-> VTOR = SRAM_BASE | VECT_TAB_OFFSET; / * 内部SRAMでベクタテーブルの再配置* / 29 の#else 30 SCB-> VTOR = FLASH_BASE | VECT_TAB_OFFSET; / * 内部フラッシュでベクタテーブルリロケーション* / 31 #endifの 32 }
1. FPUセット
1 / * FPU設定--------------------------------------------- --------------- * / 2 の#if(__FPU_PRESENT == 1)&&(__FPU_USED == 1) 3 SCB-> CPACR | =((3UL << 10 * 2)| (3UL << 11 * 2))。 / * CP10とCP11フルアクセスを設定* / 4 #endifの
__FPU_PRESENTが有するプロセッサかどうかを決定するために使用されるFPUの機能
__FPU_USED 使用を有効にするかどうかを決定するためにFPUの機能を
プロセッサがFPU機能を決定しており、機能は、FPUオンに設定されている場合、「SCB-> CPACR」(コプロセッサアクセス制御)レジスタである〜20 23 ビットである1。
CPACR使用レジスタは、FPUを有効または無効にすることができます。あなたは> CPACRはSCB-を介してアクセスすることができます。示されるように24〜31秒実装されていないビット19ビット0は、ビットを予約しました。
Cortex-M4プロセッサは、FPUコプロセッサは、11及び10として定義されます。他のコプロセッサが存在しない、とだけなのでCP10とCP11は、FPUのために用意されています。このレジスタを設定する場合、CP10とCP11は同じに設定する必要があります。
ゼロにリセットした後CP10とCP11。この構成では、低消費電力、使用前に、FPUを可能にするために必要であり、FPUが禁止されることができ、本工程は、一般SystemInit関数内で実行されます。
2. RCCクロック設定のリセット
1 / * デフォルトリセット状態にRCCクロックの設定をリセットする------------ * / 2 / * セットHSIONビット* / 3 RCC-> CR | =(のuint32_t)0x00000001の。 4 5 / * CFGRレジスタをリセット* / 6 RCC-> CFGR = 0x00000000の。 7 8 / * HSEON、CSSONとPLLONビットをリセット* / 9 RCC-> CR&=(のuint32_t)0xFEF6FFFF 。 10 11 / * リセットPLLCFGR登録* / 12 RCC-> PLLCFGR = 0x24003010 。 13 14 / * リセットHSEBYPビット* / 15 RCC-> CR&=(のuint32_t)0xFFFBFFFF 。 16 17 / * すべての割り込みを無効にする* / 18 RCC-> CIR = 0x00000000の。
2.1 RCC-> CR(RCCのクロック制御レジスタ)HSION内部高速クロック設定されています
2.2 RCC-> CFGR(RCC クロック・コンフィギュレーション・レジスタ)がクリアされます
2.3 RCC-> CR(RCCリセット クロック制御レジスタ)HSEON、CSSON PLLONビットであり
2.4リセットRCC-> PLLCFGR(RCC PLLのコンフィギュレーション・レジスタ )
2.5> CR(RCC RCC- クロック制御レジスタ)は HSEBYPリセット
2.6すべての割り込みを無効にします
3. 割り込みベクタテーブルアドレスを設定
1 / * ベクタテーブルの場所を設定するオフセットアドレスを追加------------------ * / 2 の#ifdef VECT_TAB_SRAM 3 SCB-> VTOR = SRAM_BASE | VECT_TAB_OFFSET; / * 内部SRAMでベクタテーブルの再配置* / 4 の#else 5 SCB-> VTOR = FLASH_BASE | VECT_TAB_OFFSET; / * 内部FLASHでベクタテーブルの再配置* / 6 #endifの