MDK5에서 새 STM32F4XX 프로젝트 템플릿 만들기 (펌웨어 라이브러리 기반)

0. 라이브러리 함수와 레지스터의 차이점

본질적으로 동일합니다. 공식 라이브러리 관련 헤더 파일에는 레지스터 정의가 있으므로 라이브러리 함수 템플릿에서 레지스터를 직접 조작 할 수 있습니다. 그러나 라이브러리 함수 정의가 도입되지 않았기 때문에 레지스터 템플릿에서 라이브러리 함수를 호출 할 수 없습니다.

레지스터의 기본 원리를 이해하는 목적은 STM32 관련 지식에 대한보다 심층적 인 이해를 제공하여 개발 과정에서 유용 할 수 있도록하는 것입니다. 하위 수준 코드의 구성에 문제가있어 디버깅이 필요한 경우 문제를 찾기 위해 레지스터에 대한 특정 이해가 있어야합니다. 코드가 디버깅되기 때문에 하위 계층은 구성을 볼 수만 있습니다. 레지스터.

1. 사용 도구

개발 환경 : MDK5
펌웨어 라이브러리 버전 : V1.4 (F4 용)

펌웨어 라이브러리의 다운로드 주소 : https://download.csdn.net/download/mahoon411/13457727

2. 새 프로젝트 템플릿

  1. 먼저 템플릿으로 폴더를 만듭니다. 프로젝트의 루트 폴더입니다. 프로젝트에 필요한 다른 파일을 편리하게 저장하려면 CORE, FWLIB, OBJ, SYSTEM, USER의 5 개 하위 폴더를 만듭니다.
    여기에 사진 설명 삽입

이 폴더의 이름은 실제로 임의로 선택할 수 있으며 쉽게 식별 할 수 있습니다.

  1. 다음으로 Keil을 열고 Keil의 메뉴 : Project-> New Uvision Project를 클릭 한 다음 방금 만든 Template 폴더 아래의 USER 하위 디렉터리에 대한 디렉터리를 찾습니다. 동시에 프로젝트 이름을 Template로 지정하고 Save를 클릭합니다. Our project The files USER 폴더에 저장됩니다. 운영 프로세스는 다음과 같습니다.
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입
  2. 다음으로, 칩 모델을 선택하는 Device 선택 인터페이스가 나타납니다. 여기서 STMicroelectronics 아래에 STM32F407ZG를 찾습니다. STMicroelectronics → STM32F4 시리즈 → STM32F407 → STM32F407ZG를 선택합니다 (다른 일련의 칩을 사용하는 경우 해당 모델 만 선택).
    여기에 사진 설명 삽입

특별한주의 : 해당 칩의 내용은 해당 장치 팩을 미리 설치 한 후에 만 ​​표시됩니다. 장치 팩은 공식 웹 사이트에서 직접 다운로드 할 수 있습니다.
여기에 사진 설명 삽입

확인을 클릭하면 MDK가 런타임 환경 관리 대화 상자를 표시합니다.
여기에 사진 설명 삽입
이것은 MDK5의 새로운 기능입니다.이 인터페이스에서 개발 환경을 쉽게 구성하는 데 필요한 구성 요소를 추가 할 수 있지만 소개되지는 않습니다. 여기. 취소를 클릭하십시오.
위의 단계를 완료하면 keil의 프로젝트 인터페이스는 아래 그림과 같아야합니다.
여기에 사진 설명 삽입

  1. USER 디렉토리에는 아래 그림과 같이 4 개의 파일이 있습니다.
    여기에 사진 설명 삽입
    여기서 설명하자면 Template.uvprojx는 매우 중요하고 쉽게 삭제할 수없는 프로젝트 파일로 MDK51.4에서 생성 된 프로젝트 파일에는 .uvprojx라는 접미사가 붙습니다.
    목록 및 개체 폴더는 MDK에 의해 자동으로 생성되며 컴파일 프로세스 중에 생성 된 중간 파일을 저장하는 데 사용됩니다. 여기에서는 두 폴더를 삭제하고 다음 단계에서 새로 생성 된 OBJ 폴더를 사용하여 컴파일로 생성 된 중간 파일을 저장합니다. 물론이 두 폴더를 삭제하지 않더라도 사용하지 않는 것은 중요하지 않습니다.
    여기에 사진 설명 삽입
  2. 다음으로 공식 펌웨어 라이브러리 패키지의 소스 코드 파일을 프로젝트 디렉토리 폴더에 복사합니다.
    공식 펌웨어 라이브러리 패키지를 열고 이전에 준비한 펌웨어 라이브러리 패키지의 디렉토리를 찾습니다. \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ STM32F4xx_StdPeriph_Driver, 디렉토리 아래의 src 및 inc 폴더를 방금 만든 FWLib 폴더에 복사합니다.
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입

Src는 펌웨어 라이브러리의 .c 파일을 저장하고 inc는 해당 .h 파일을 저장하며 각 주변 장치는 .c 파일과 .h 헤더 파일에 해당합니다. 파일의 내용은 아래 그림과 같습니다.
여기에 사진 설명 삽입
여기에 사진 설명 삽입

  1. 다음으로 펌웨어 라이브러리 패키지의 관련 시작 파일을 프로젝트 디렉토리 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 디렉터리로 복사합니다.

여기에 사진 설명 삽입
여기에 사진 설명 삽입

  1. 다음으로 프로젝트 템플릿에 필요한 다른 헤더 파일과 소스 파일을 프로젝트에 복사해야합니다.
    먼저 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 개의 파일을 복사합니다.
여기에 사진 설명 삽입
여기에 사진 설명 삽입

  1. 이전 7 단계에서 필요한 펌웨어 라이브러리 관련 파일을 프로젝트 디렉토리에 복사했습니다.
    다음으로이 파일을 프로젝트에 추가합니다.
    keil을 열고 Target1을 마우스 오른쪽 버튼으로 클릭 한 다음 아래 그림과 같이 Manage Project Items를 선택합니다.
    여기에 사진 설명 삽입

  2. Project Targets 열에서 Target 이름을 Template로 수정 한 다음 Groups 열에서 SourceGroup1을 삭제하고 USER, CORE, FWLIB의 세 그룹을 만듭니다. 그런 다음 확인을 클릭하면 아래와 같이 대상 이름 및 그룹 상황을 볼 수 있습니다.
    여기에 사진 설명 삽입
    확인을 클릭하면 프로젝트 상태가 아래 그림과 같이 표시됩니다.
    여기에 사진 설명 삽입

  3. 다음으로 필요한 파일을 그룹에 추가합니다.
    9 단계의 방법을 따르고 마우스 오른쪽 단추를 클릭하고 Tempate를 클릭 한 다음 프로젝트 항목 관리를 선택합니다. 그런 다음 파일을 추가해야하는 그룹을 선택하십시오.
    여기의 첫 번째 단계에서 FWLIB를 선택한 다음 오른쪽에있는 파일 추가를 클릭하고 방금 만든 \ FWLIB \ src 디렉터리로 이동 한 다음 안에있는 모든 파일 (Ctrl + A)을 선택하고 추가를 클릭 한 다음 닫기를 클릭합니다. 아래 그림과 같이 파일 목록에서 추가 한 파일을 볼 수 있습니다.
    여기에 사진 설명 삽입
    다음은 stm32f4xx_fmc.c 특수 파일입니다. 이 파일은 STM32F42 및 STM32F43 시리즈에서만 사용
    되므로 여기서 삭제해야합니다 (stm32f4xx_fsmc.c가 아니라 stm32f4xx_fmc.c를 삭제해야 함). 으로
    아래 그림과 같이 : 삭제 후 확인을 클릭합니다. 다음 단계로 이동
    여기에 사진 설명 삽입

코드를 작성하려면 주변 장치 중 하나만 사용하면 사용되지 않는 주변 장치에 대한 라이브러리 파일을 추가 할 필요가 없다는 점을 여기서 설명해야합니다. 예를 들어 GPIO 만 사용하는 경우 stm32f4xx_gpio.c 만 추가하면되고 다른 사용자는 추가 할 필요가 없습니다. 여기에서는 나중에 편의를 위해 모두 추가하고 매번 추가 할 필요가 없습니다. 물론 단점은 프로젝트가 너무 크고 컴파일 속도가 느리고 사용자가 직접 선택할 수 있다는 것입니다. .

  1. 같은 방법으로 CORE 및 USER에서 그룹을 찾고 필요한 파일을 추가합니다.
    CORE 아래에 추가 할 파일은 startup_stm32f40_41xxx.s입니다 (기본적으로 추가 될 때 파일 유형은 .c입니다. 즉, startup_stm32f40_41xxx.s 시작 파일을 추가 할 때 파일 유형을 모든 파일로 선택해야이 파일을 볼 수 있습니다.) ).
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입

USER 디렉토리에 추가 할 파일은 main.c, stm32f4xx_it.c 및 system_stm32f4xx.c입니다. 이러한 방식으로 추가해야하는 파일이 프로젝트에 추가되었습니다.
여기에 사진 설명 삽입

마지막으로 확인을 클릭하여 기본 프로젝트 인터페이스로 돌아갑니다.
여기에 사진 설명 삽입

  1. 다음으로 MDK에 헤더 파일 저장 경로를 설정해야합니다.
    이는 MDK에게 해당 디렉토리에 포함 된 헤더 파일을 찾도록 지시하는 것입니다. 이 단계는 매우 중요합니다. 헤더 파일 경로가 설정되지 않은 경우 프로젝트는 오류를보고합니다. 헤더 파일 경로를 찾을 수 없습니다 .
    구체적인 동작은 아래 그림과 같으며 5 단계 후 해당 헤더 파일 경로를 추가합니다.
    여기에 사진 설명 삽입
    여기에 \ CORE, \ USER \ 및 \ FWLIB \ inc를 포함한 헤더 파일 경로를 추가해야합니다. 여기에서 모두주의해야합니다. 펌웨어 라이브러리의 헤더 파일 하위 디렉토리는 FWLIB \ src가 아니라 \ FWLIB \ inc입니다.
    여기에 사진 설명 삽입
    확인을 클릭하면 C / C ++ 페이지가로 변경됩니다.
    여기에 사진 설명 삽입
  2. 다음으로 STM32F40 시리즈 프로젝트의 경우 전역 매크로 정의 식별자를 추가해야합니다.
    추가하는 방법은 마술 지팡이를 클릭하고 C / C ++ 탭을 입력 한 다음 정의 입력 상자를 입력하는 것
    STM32F40_41xxx,USE_STDPERIPH_DRIVER
    입니다. 쉼표로 구분 된 두 개의 식별자 STM32F40_41xxx 및 USE_STDPERIPH_DRIVER가 있습니다.
    여기에 사진 설명 삽입
  3. 다음으로 프로젝트를 컴파일하고 컴파일하기 전에 먼저 중간 파일이 컴파일 된 디렉토리를 선택한 다음 컴파일해야합니다.
    방법은 마술 지팡이를 클릭 한 다음 "출력"옵션에서 "객체에 대한 폴더 선택 ..."을 선택한 다음 위에서 만든 OBJ 디렉터리로 디렉터리를 선택하는 것입니다.
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입

그런 다음 아래의 세 가지 옵션 상자를 모두 선택하십시오. Create HEX File 옵션을 선택하려면 컴파일 후에 HEX 파일을 생성해야합니다. 프로젝트에서 일부 기능 변수 정의를 쉽게 볼 수 있도록 정보 찾아보기 옵션이 선택되었습니다.
여기에 사진 설명 삽입

  1. 컴파일하기 전에 먼저 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 함수 내용을 삭제합니다.
여기에 사진 설명 삽입
여기에 사진 설명 삽입

  1. 다음으로 컴파일 버튼을 클릭하여 프로젝트를 컴파일하면 프로젝트가 오류나 경고없이 컴파일되는 것을 볼 수 있습니다.
    여기에 사진 설명 삽입
    여기에 사진 설명 삽입
  2. 이때 펌웨어 라이브러리 V1.4를 기반으로 한 프로젝트 템플릿이 생성되고 해당 16 진수 파일이 프로젝트의 OBJ 디렉토리 아래에 생성됩니다.
    여기에 사진 설명 삽입
  3. 여기에는 시스템 클록의 구성이라는 매우 중요한 요점이 있습니다. 여기서는 System_stm32f4xx.c 파일을 수정하여 PLL의 1 단계 주파수 분할 계수 M을 8로 수정해야합니다. 주파수는 168MHz입니다.
    여기에 사진 설명 삽입
    PLL_M 시스템 클럭이 168MHz가되도록 8로 수정해야합니다.
    여기에 사진 설명 삽입
    동시에 stm32f4xx.h의 외부 클럭 HSE_VALUE 값을 8MHz로 수정해야합니다. 외부 고속 클럭은 8M의 수정 발진기를 사용하기 때문에 구체적인 수정 방법은 다음과 같습니다.
    여기에 사진 설명 삽입
    더하기 기호가없는 경우 컴파일 후 stm32f4xx_it.c 파일의 왼쪽에, keil을 닫고 프로젝트를 다시여십시오 (이것은 keil의 버그입니다).
    이 시점에서 프로젝트 템플릿이 설정되었습니다.

추천

출처blog.csdn.net/mahoon411/article/details/110738443