Cree una nueva plantilla de proyecto STM32F4XX en MDK5 (basada en la biblioteca de firmware)

0. La diferencia entre funciones de biblioteca y registros

Esencialmente lo mismo. Puede manipular directamente los registros en la plantilla de función de la biblioteca, porque los archivos de encabezado oficiales relacionados con la biblioteca tienen definiciones de registro. Pero no es posible llamar a funciones de biblioteca en la plantilla de registro, porque no se introduce la definición de funciones de biblioteca.

El propósito de comprender los principios básicos de los registros es brindarnos una comprensión más profunda del conocimiento relacionado con STM32, de modo que pueda ser útil durante el proceso de desarrollo. Si hay un problema con la configuración del código de bajo nivel y es necesario depurarlo, debe tener cierto conocimiento del registro para encontrar el problema. Debido a que el código está depurado, la capa inferior solo puede ver la configuración del Registrarse.

1. Herramientas utilizadas

Entorno de desarrollo:
versión de la biblioteca de firmware MDK5 : V1.4 (para F4)

La dirección de descarga de la biblioteca de firmware: https://download.csdn.net/download/mahoon411/13457727

2. Nueva plantilla de proyecto

  1. Primero cree una carpeta como Plantilla. Esta es la carpeta raíz del proyecto. Para almacenar algunos otros archivos necesarios para el proyecto de manera conveniente, cree las siguientes 5 subcarpetas: CORE, FWLIB, OBJ, SYSTEM, USER.
    Inserte la descripción de la imagen aquí

En cuanto a los nombres de estas carpetas, en realidad se pueden elegir arbitrariamente y son solo para una fácil identificación.

  1. A continuación, abra Keil, haga clic en el menú de Keil: Proyecto -> Nuevo proyecto de Uvision, y luego ubique el directorio en el subdirectorio USER en la carpeta Plantilla recién creada. Al mismo tiempo, nombre el proyecto como Plantilla y haga clic en Guardar. Nuestro proyecto Los archivos se guardan en la carpeta USUARIO. El proceso de operación es el siguiente:
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
  2. A continuación, aparecerá una interfaz para seleccionar Dispositivo, que es para seleccionar nuestro modelo de chip, aquí ubicamos STM32F407ZG bajo STMicroelectronics. Seleccione STMicroelectronics → Serie STM32F4 → STM32F407 → STM32F407ZG (si está usando otra serie de chips, simplemente seleccione el modelo correspondiente).
    Inserte la descripción de la imagen aquí

Atención especial: el contenido del chip correspondiente se mostrará solo después de que el paquete de dispositivo correspondiente se haya instalado por adelantado. El paquete de dispositivos se puede descargar directamente desde el sitio web oficial.
Inserte la descripción de la imagen aquí

Haga clic en Aceptar, MDK abrirá el cuadro de diálogo Administrar entorno de tiempo de ejecución.
Inserte la descripción de la imagen aquí
Esta es una nueva característica de MDK5. En esta interfaz, puede agregar los componentes que necesita para facilitar la construcción del entorno de desarrollo, pero no se presentarán aquí. Simplemente haga clic en Cancelar.
Después de completar los pasos anteriores, la interfaz del proyecto de keil debe ser como se muestra en la figura siguiente.
Inserte la descripción de la imagen aquí

  1. El directorio USER contiene cuatro archivos, como se muestra en la siguiente figura.
    Inserte la descripción de la imagen aquí
    Para explicarlo aquí, Template.uvprojx es un archivo de proyecto, que es muy crítico y no se puede eliminar fácilmente. El archivo de proyecto generado por MDK51.4 tiene el sufijo .uvprojx.
    MDK genera automáticamente las carpetas Listings y Objects y las utiliza para almacenar archivos intermedios generados durante el proceso de compilación. Aquí, borramos las dos carpetas, y usaremos la carpeta OBJ recién creada en el siguiente paso para almacenar los archivos intermedios generados por la compilación. Por supuesto, no importa si no eliminamos estas dos carpetas, simplemente no las usamos.
    Inserte la descripción de la imagen aquí
  2. A continuación, copiaremos los archivos de código fuente en el paquete de la biblioteca de firmware oficial a la carpeta del directorio de nuestro proyecto.
    Abra el paquete de la biblioteca de firmware oficial y ubique el directorio del paquete de la biblioteca de firmware que preparamos anteriormente: \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ STM32F4xx_StdPeriph_Driver, copie las carpetas src e inc del directorio a la carpeta FWLib que acabamos de crear.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Src almacena el archivo .c de la biblioteca de firmware e inc almacena el archivo .h correspondiente. Cada periférico corresponde a un archivo .c y un archivo de encabezado .h. El contenido del archivo se muestra en la siguiente figura.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. A continuación, copiaremos los archivos de inicio relevantes en el paquete de la biblioteca de firmware a nuestro directorio de proyectos CORE.
    Abra el paquete de la biblioteca de firmware oficial. Navegue al directorio \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ CMSIS \ Device \ ST \ STM32F4xx \ Source \ Templates \ arm y copie el archivo startup_stm32f40_41xxx.s en el directorio CORE.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Luego navegue al directorio \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ CMSIS \ Includ, y copie los cuatro archivos de encabezado dentro: core_cm4.h, core_cm4_simd.h, core_cmFunc.hy core_cmInstr.h al directorio CORE también.

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. A continuación, necesitamos copiar algunos otros archivos de encabezado y archivos de origen necesarios para la plantilla del proyecto en nuestro proyecto.
    Primero localice el directorio: STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Libraries \ CMSIS \ Device \ ST \ STM32F4xx \ Include. Copie los dos archivos de encabezado stm32f4xx.hy system_stm32f4xx.h en el directorio USER. Estos dos archivos de encabezado son dos archivos de encabezado muy críticos para el proyecto STM32F4.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Luego ingrese al directorio \ STM32F4xx_DSP_StdPeriph_Lib_V1.4.0 \ Project \ STM32F4xx_StdPeriph_Templates, y copie los cinco archivos main.c, stm32f4xx_conf.h, stm32f4xx_it.c, stm32f4xx_it.fc, stm32f.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. En los 7 pasos anteriores, copiamos los archivos relacionados con la biblioteca de firmware necesarios en nuestro directorio de proyectos.
    A continuación, agregaremos estos archivos a nuestro proyecto.
    Abra keil, haga clic con el botón derecho en Target1 y seleccione Administrar elementos del proyecto, como se muestra en la siguiente figura.
    Inserte la descripción de la imagen aquí

  2. En la columna Objetivos del proyecto, modificamos el nombre del Objetivo a Plantilla, luego eliminamos un SourceGroup1 en la columna Grupos y creamos tres Grupos: USER, CORE, FWLIB. Luego haga clic en Aceptar, puede ver nuestro nombre de destino y la situación de los grupos como se muestra a continuación.
    Inserte la descripción de la imagen aquí
    Haga clic en Aceptar, el estado del proyecto se muestra en la siguiente figura.
    Inserte la descripción de la imagen aquí

  3. A continuación, agregamos los archivos que necesitamos al Grupo.
    Seguimos el método del paso 9, hacemos clic derecho y hacemos clic en Tempate, y seleccionamos Administrar elementos del proyecto. Luego, seleccione el grupo que necesita agregar archivos.
    En el primer paso aquí, seleccionamos FWLIB, luego hacemos clic en Agregar archivos a la derecha, navegamos al directorio \ FWLIB \ src que acabamos de crear, seleccionamos todos los archivos dentro (Ctrl + A), luego hacemos clic en Agregar y luego en Cerrar. Puede ver los archivos que agregamos en la lista Archivos, como se muestra en la siguiente figura.
    Inserte la descripción de la imagen aquí
    Aquí hay un archivo especial stm32f4xx_fmc.c. Este archivo solo lo utilizan las series STM32F42 y STM32F43,
    por lo que debemos eliminarlo aquí (tenga en cuenta que debe eliminarse stm32f4xx_fmc.c, no stm32f4xx_fsmc.c). Como se
    muestra en la siguiente figura: Después de eliminar, haga clic en Aceptar. Vaya al siguiente paso
    Inserte la descripción de la imagen aquí

Es necesario explicar aquí que para que podamos escribir código, si solo usamos uno de los periféricos, no necesitamos agregar archivos de biblioteca para los periféricos que no se usan. Por ejemplo, si solo uso GPIO, puedo agregar stm32f4xx_gpio.cy otros no necesitan agregar. Aquí los agregamos todos para la conveniencia del último, y no es necesario agregarlos cada vez. Por supuesto, la desventaja es que el proyecto es demasiado grande, la velocidad de compilación es lenta y el usuario puede elegir por sí mismo. .

  1. De la misma manera, ubique Grupos en CORE y USER y agregue los archivos requeridos.
    El archivo que se agregará en CORE es startup_stm32f40_41xxx.s (tenga en cuenta que el tipo de archivo es .c cuando se agrega de forma predeterminada, es decir, al agregar archivos de inicio startup_stm32f40_41xxx.s, debe seleccionar el tipo de archivo como Todos los archivos para ver este archivo ).
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Los archivos que se agregarán en el directorio USER son main.c, stm32f4xx_it.c y system_stm32f4xx.c. De esta manera, los archivos que necesitamos agregar se han agregado a nuestro proyecto.
Inserte la descripción de la imagen aquí

Finalmente, haga clic en Aceptar para volver a la interfaz principal del proyecto.
Inserte la descripción de la imagen aquí

  1. A continuación, debemos establecer la ruta de almacenamiento del archivo de encabezado en el MDK.
    Eso es para decirle a MDK que busque archivos de encabezado incluidos en esos directorios. Este paso es muy importante. Si no se establece la ruta del archivo de encabezado, el proyecto informará un error: no se puede encontrar la ruta del archivo de encabezado .
    La operación específica es como se muestra en la figura siguiente: Después de 5 pasos, agregue la ruta del archivo de encabezado correspondiente.
    Inserte la descripción de la imagen aquí
    Aquí debemos agregar la ruta del archivo de encabezado que incluye: \ CORE, \ USER \ y \ FWLIB \ inc. Todos deben tener cuidado aquí El subdirectorio del archivo de encabezado de la biblioteca de firmware es \ FWLIB \ inc, no FWLIB \ src.
    Inserte la descripción de la imagen aquí
    Después de hacer clic en Aceptar, la página C / C ++ cambia a.
    Inserte la descripción de la imagen aquí
  2. A continuación, para la serie de proyectos STM32F40, es necesario agregar un identificador de definición de macro global.
    El método para agregar es hacer clic en la varita mágica, ingresar a la pestaña C / C ++ y luego ingresar al cuadro de entrada Definir:
    STM32F40_41xxx,USE_STDPERIPH_DRIVER
    Tenga en cuenta que hay dos identificadores STM32F40_41xxx y USE_STDPERIPH_DRIVER, que están separados por comas.
    Inserte la descripción de la imagen aquí
  3. A continuación, necesitamos compilar el proyecto, antes de compilar, primero debemos seleccionar el directorio donde se compilan los archivos intermedios y luego se compilan.
    El método es hacer clic en la varita mágica y luego seleccionar "Seleccionar carpeta para objetos ..." en la opción "Salida", y luego seleccionar el directorio como el directorio OBJ que creamos anteriormente.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Luego, marque las tres casillas de opciones a continuación. La selección de la opción Crear archivo HEX requiere que los archivos HEX se generen después de la compilación. La opción Examinar información se selecciona para facilitarnos la visualización de algunas definiciones de variables de función en el proyecto.
Inserte la descripción de la imagen aquí

  1. Antes de compilar, primero reemplazamos el contenido del archivo main.c con lo siguiente:
#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);
	
	}
}

Al mismo tiempo, elimine la línea 32 en el archivo stm32f4xx_it.c, la introducción del archivo de encabezado main.h y el contenido de la función SysTick_Handler de 144 líneas.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. A continuación, hacemos clic en el botón de compilación para compilar el proyecto, y puede ver que el proyecto se compila sin errores ni advertencias.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
  2. En este punto, se crea una plantilla de proyecto basada en la biblioteca de firmware V1.4 y se genera el archivo hexadecimal correspondiente en el directorio OBJ del proyecto.
    Inserte la descripción de la imagen aquí
  3. También hay un punto clave muy importante aquí, que es la configuración del reloj del sistema. Aquí necesitamos modificar el archivo System_stm32f4xx.c para modificar el factor de división de frecuencia M de la primera etapa del PLL a 8, de modo que el reloj principal La frecuencia es de 168 MHz.
    Inserte la descripción de la imagen aquí
    PLL_M Aquí tenemos que modificarlo a 8, de modo que el reloj de nuestro sistema sea de 168MHz.
    Inserte la descripción de la imagen aquí
    Al mismo tiempo, necesitamos modificar el valor HSE_VALUE del reloj externo en stm32f4xx.h a 8MHz, ya que nuestro reloj externo de alta velocidad usa un oscilador de cristal de 8M, el método de modificación específico es el siguiente:
    Inserte la descripción de la imagen aquí
    si no hay signo más en el lado izquierdo de su archivo stm32f4xx_it.c después de la compilación, cierre keil y vuelva a abrir el proyecto (esto es un error de keil).
    En este punto, se ha establecido la plantilla del proyecto.

Supongo que te gusta

Origin blog.csdn.net/mahoon411/article/details/110738443
Recomendado
Clasificación