도로 STM32 학습 기능 --SystemInit

"startup_stm32f429xx.s"파일, 시스템 리셋 기능은 첫째 SystemInit를 호출합니다

1  ; 리셋 핸들러
 2  Reset_Handler PROC
 3                   EXPORT Reset_Handler [WEAK]
 4          수입 SystemInit
 5          IMPORT __main
 6  
7                   LDR R0 = SystemInit
 8                   BLX R0
 9                   LDR R0 = __main
 10                   BX R0
 11                   ENDP

SystemInit 함수 정의 :

1  공극 SystemInit은 ( 공극 )
  {
 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; / * 내부 FLASH 벡터 표 재배치 * / 
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-를 통해 액세스 할 수 있습니다. 0의 비트 19-24 31 초 미구현 비트, 예약 비트와 같이

 

 외피 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; / * 내부 플래시 벡터 표 재배치 * / 
6  #endif 다음

 

 



 

추천

출처www.cnblogs.com/sysedoc/p/11573968.html