機能を学習道STM32 --SystemInit

「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の

 

 



 

おすすめ

転載: www.cnblogs.com/sysedoc/p/11573968.html