0. 라이브러리 함수와 레지스터의 차이점
본질적으로 동일합니다. 공식 라이브러리 관련 헤더 파일에는 레지스터 정의가 있으므로 라이브러리 함수 템플릿에서 레지스터를 직접 조작 할 수 있습니다. 그러나 라이브러리 함수 정의가 도입되지 않았기 때문에 레지스터 템플릿에서 라이브러리 함수를 호출 할 수 없습니다.
레지스터의 기본 원리를 이해하는 목적은 STM32 관련 지식에 대한보다 심층적 인 이해를 제공하여 개발 과정에서 유용 할 수 있도록하는 것입니다. 하위 수준 코드의 구성에 문제가있어 디버깅이 필요한 경우 문제를 찾기 위해 레지스터에 대한 특정 이해가 있어야합니다. 코드가 디버깅되기 때문에 하위 계층은 구성을 볼 수만 있습니다. 레지스터.
1. 사용 도구
개발 환경 : MDK5
펌웨어 라이브러리 버전 : V1.4 (F4 용)
펌웨어 라이브러리의 다운로드 주소 : https://download.csdn.net/download/mahoon411/13457727
2. 새 프로젝트 템플릿
- 먼저 템플릿으로 폴더를 만듭니다. 프로젝트의 루트 폴더입니다. 프로젝트에 필요한 다른 파일을 편리하게 저장하려면 CORE, FWLIB, OBJ, SYSTEM, USER의 5 개 하위 폴더를 만듭니다.
이 폴더의 이름은 실제로 임의로 선택할 수 있으며 쉽게 식별 할 수 있습니다.
- 다음으로 Keil을 열고 Keil의 메뉴 : Project-> New Uvision Project를 클릭 한 다음 방금 만든 Template 폴더 아래의 USER 하위 디렉터리에 대한 디렉터리를 찾습니다. 동시에 프로젝트 이름을 Template로 지정하고 Save를 클릭합니다. Our project The files USER 폴더에 저장됩니다. 운영 프로세스는 다음과 같습니다.
- 다음으로, 칩 모델을 선택하는 Device 선택 인터페이스가 나타납니다. 여기서 STMicroelectronics 아래에 STM32F407ZG를 찾습니다. STMicroelectronics → STM32F4 시리즈 → STM32F407 → STM32F407ZG를 선택합니다 (다른 일련의 칩을 사용하는 경우 해당 모델 만 선택).
특별한주의 : 해당 칩의 내용은 해당 장치 팩을 미리 설치 한 후에 만 표시됩니다. 장치 팩은 공식 웹 사이트에서 직접 다운로드 할 수 있습니다.
확인을 클릭하면 MDK가 런타임 환경 관리 대화 상자를 표시합니다.
이것은 MDK5의 새로운 기능입니다.이 인터페이스에서 개발 환경을 쉽게 구성하는 데 필요한 구성 요소를 추가 할 수 있지만 소개되지는 않습니다. 여기. 취소를 클릭하십시오.
위의 단계를 완료하면 keil의 프로젝트 인터페이스는 아래 그림과 같아야합니다.
- USER 디렉토리에는 아래 그림과 같이 4 개의 파일이 있습니다.
여기서 설명하자면 Template.uvprojx는 매우 중요하고 쉽게 삭제할 수없는 프로젝트 파일로 MDK51.4에서 생성 된 프로젝트 파일에는 .uvprojx라는 접미사가 붙습니다.
목록 및 개체 폴더는 MDK에 의해 자동으로 생성되며 컴파일 프로세스 중에 생성 된 중간 파일을 저장하는 데 사용됩니다. 여기에서는 두 폴더를 삭제하고 다음 단계에서 새로 생성 된 OBJ 폴더를 사용하여 컴파일로 생성 된 중간 파일을 저장합니다. 물론이 두 폴더를 삭제하지 않더라도 사용하지 않는 것은 중요하지 않습니다.
- 다음으로 공식 펌웨어 라이브러리 패키지의 소스 코드 파일을 프로젝트 디렉토리 폴더에 복사합니다.
공식 펌웨어 라이브러리 패키지를 열고 이전에 준비한 펌웨어 라이브러리 패키지의 디렉토리를 찾습니다. \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ STM32F4xx_StdPeriph_Driver, 디렉토리 아래의 src 및 inc 폴더를 방금 만든 FWLib 폴더에 복사합니다.
Src는 펌웨어 라이브러리의 .c 파일을 저장하고 inc는 해당 .h 파일을 저장하며 각 주변 장치는 .c 파일과 .h 헤더 파일에 해당합니다. 파일의 내용은 아래 그림과 같습니다.
- 다음으로 펌웨어 라이브러리 패키지의 관련 시작 파일을 프로젝트 디렉토리 CORE에 복사합니다.
공식 펌웨어 라이브러리 패키지를 엽니 다. \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ CMSIS \ Device \ ST \ STM32F4xx \ Source \ Templates \ arm 디렉터리로 이동하고 startup_stm32f40_41xxx.s 파일을 CORE 디렉터리에 복사합니다.
그런 다음 \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ CMSIS \ Includ 디렉터리로 이동하고 core_cm4.h, core_cm4_simd.h, core_cmFunc.h 및 core_cmInstr.h 내부에있는 4 개의 헤더 파일을 CORE 디렉터리로 복사합니다.
- 다음으로 프로젝트 템플릿에 필요한 다른 헤더 파일과 소스 파일을 프로젝트에 복사해야합니다.
먼저 STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ CMSIS \ Device \ ST \ STM32F4xx \ Include 디렉터리를 찾습니다. 두 개의 헤더 파일 stm32f4xx.h 및 system_stm32f4xx.h를 USER 디렉토리에 복사하십시오. 이 두 헤더 파일은 STM32F4 프로젝트에 매우 중요한 두 가지 헤더 파일입니다.
그런 다음 \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Project \ STM32F4xx_StdPeriph_Templates 디렉터리를 입력하고 5 개의 파일 main.c, stm32f4xx_conf.h, stm32f4xx_it.c, stm32f4xx_it32.c, stm32f4xx_it 디렉터리 아래의 4xx_it32.c, stm32f4xx_it 디렉터리 아래에있는 5 개의 파일을 복사합니다.
-
이전 7 단계에서 필요한 펌웨어 라이브러리 관련 파일을 프로젝트 디렉토리에 복사했습니다.
다음으로이 파일을 프로젝트에 추가합니다.
keil을 열고 Target1을 마우스 오른쪽 버튼으로 클릭 한 다음 아래 그림과 같이 Manage Project Items를 선택합니다.
-
Project Targets 열에서 Target 이름을 Template로 수정 한 다음 Groups 열에서 SourceGroup1을 삭제하고 USER, CORE, FWLIB의 세 그룹을 만듭니다. 그런 다음 확인을 클릭하면 아래와 같이 대상 이름 및 그룹 상황을 볼 수 있습니다.
확인을 클릭하면 프로젝트 상태가 아래 그림과 같이 표시됩니다.
-
다음으로 필요한 파일을 그룹에 추가합니다.
9 단계의 방법을 따르고 마우스 오른쪽 단추를 클릭하고 Tempate를 클릭 한 다음 프로젝트 항목 관리를 선택합니다. 그런 다음 파일을 추가해야하는 그룹을 선택하십시오.
여기의 첫 번째 단계에서 FWLIB를 선택한 다음 오른쪽에있는 파일 추가를 클릭하고 방금 만든 \ FWLIB \ src 디렉터리로 이동 한 다음 안에있는 모든 파일 (Ctrl + A)을 선택하고 추가를 클릭 한 다음 닫기를 클릭합니다. 아래 그림과 같이 파일 목록에서 추가 한 파일을 볼 수 있습니다.
다음은 stm32f4xx_fmc.c 특수 파일입니다. 이 파일은 STM32F42 및 STM32F43 시리즈에서만 사용
되므로 여기서 삭제해야합니다 (stm32f4xx_fsmc.c가 아니라 stm32f4xx_fmc.c를 삭제해야 함). 으로
아래 그림과 같이 : 삭제 후 확인을 클릭합니다. 다음 단계로 이동
코드를 작성하려면 주변 장치 중 하나만 사용하면 사용되지 않는 주변 장치에 대한 라이브러리 파일을 추가 할 필요가 없다는 점을 여기서 설명해야합니다. 예를 들어 GPIO 만 사용하는 경우 stm32f4xx_gpio.c 만 추가하면되고 다른 사용자는 추가 할 필요가 없습니다. 여기에서는 나중에 편의를 위해 모두 추가하고 매번 추가 할 필요가 없습니다. 물론 단점은 프로젝트가 너무 크고 컴파일 속도가 느리고 사용자가 직접 선택할 수 있다는 것입니다. .
- 같은 방법으로 CORE 및 USER에서 그룹을 찾고 필요한 파일을 추가합니다.
CORE 아래에 추가 할 파일은 startup_stm32f40_41xxx.s입니다 (기본적으로 추가 될 때 파일 유형은 .c입니다. 즉, startup_stm32f40_41xxx.s 시작 파일을 추가 할 때 파일 유형을 모든 파일로 선택해야이 파일을 볼 수 있습니다.) ).
USER 디렉토리에 추가 할 파일은 main.c, stm32f4xx_it.c 및 system_stm32f4xx.c입니다. 이러한 방식으로 추가해야하는 파일이 프로젝트에 추가되었습니다.
마지막으로 확인을 클릭하여 기본 프로젝트 인터페이스로 돌아갑니다.
- 다음으로 MDK에 헤더 파일 저장 경로를 설정해야합니다.
이는 MDK에게 해당 디렉토리에 포함 된 헤더 파일을 찾도록 지시하는 것입니다. 이 단계는 매우 중요합니다. 헤더 파일 경로가 설정되지 않은 경우 프로젝트는 오류를보고합니다. 헤더 파일 경로를 찾을 수 없습니다 .
구체적인 동작은 아래 그림과 같으며 5 단계 후 해당 헤더 파일 경로를 추가합니다.
여기에 \ CORE, \ USER \ 및 \ FWLIB \ inc를 포함한 헤더 파일 경로를 추가해야합니다. 여기에서 모두주의해야합니다. 펌웨어 라이브러리의 헤더 파일 하위 디렉토리는 FWLIB \ src가 아니라 \ FWLIB \ inc입니다.
확인을 클릭하면 C / C ++ 페이지가로 변경됩니다.
- 다음으로 STM32F40 시리즈 프로젝트의 경우 전역 매크로 정의 식별자를 추가해야합니다.
추가하는 방법은 마술 지팡이를 클릭하고 C / C ++ 탭을 입력 한 다음 정의 입력 상자를 입력하는 것
STM32F40_41xxx,USE_STDPERIPH_DRIVER
입니다. 쉼표로 구분 된 두 개의 식별자 STM32F40_41xxx 및 USE_STDPERIPH_DRIVER가 있습니다.
- 다음으로 프로젝트를 컴파일하고 컴파일하기 전에 먼저 중간 파일이 컴파일 된 디렉토리를 선택한 다음 컴파일해야합니다.
방법은 마술 지팡이를 클릭 한 다음 "출력"옵션에서 "객체에 대한 폴더 선택 ..."을 선택한 다음 위에서 만든 OBJ 디렉터리로 디렉터리를 선택하는 것입니다.
그런 다음 아래의 세 가지 옵션 상자를 모두 선택하십시오. Create HEX File 옵션을 선택하려면 컴파일 후에 HEX 파일을 생성해야합니다. 프로젝트에서 일부 기능 변수 정의를 쉽게 볼 수 있도록 정보 찾아보기 옵션이 선택되었습니다.
- 컴파일하기 전에 먼저 main.c 파일의 내용을 다음으로 바꿉니다.
#include "stm32f4xx.h"
void Delay(__IO uint32_t nCount);
void Delay(__IO uint32_t nCount){
while(nCount--){
}
}
int main(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
while(1){
GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
Delay(0x7FFFFF);
GPIO_ResetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10);
Delay(0x7FFFFF);
}
}
동시에 stm32f4xx_it.c 파일의 32 번째 줄, main.h 헤더 파일의 도입 및 144 줄 SysTick_Handler 함수 내용을 삭제합니다.
- 다음으로 컴파일 버튼을 클릭하여 프로젝트를 컴파일하면 프로젝트가 오류나 경고없이 컴파일되는 것을 볼 수 있습니다.
- 이때 펌웨어 라이브러리 V1.4를 기반으로 한 프로젝트 템플릿이 생성되고 해당 16 진수 파일이 프로젝트의 OBJ 디렉토리 아래에 생성됩니다.
- 여기에는 시스템 클록의 구성이라는 매우 중요한 요점이 있습니다. 여기서는 System_stm32f4xx.c 파일을 수정하여 PLL의 1 단계 주파수 분할 계수 M을 8로 수정해야합니다. 주파수는 168MHz입니다.
PLL_M 시스템 클럭이 168MHz가되도록 8로 수정해야합니다.
동시에 stm32f4xx.h의 외부 클럭 HSE_VALUE 값을 8MHz로 수정해야합니다. 외부 고속 클럭은 8M의 수정 발진기를 사용하기 때문에 구체적인 수정 방법은 다음과 같습니다.
더하기 기호가없는 경우 컴파일 후 stm32f4xx_it.c 파일의 왼쪽에, keil을 닫고 프로젝트를 다시여십시오 (이것은 keil의 버그입니다).
이 시점에서 프로젝트 템플릿이 설정되었습니다.