Keil construye el proyecto STM32 y utiliza proteus para simular el experimento de iluminación LED

    Hay una gran diferencia entre STM32 MCU y 51 MCU. No solo hay una gran diferencia en la estructura, STM32 es más complicado. En términos de operación, STM32 también es mucho más complicado. El código escrito a mano en 51 MCU puede operar pines directamente, pero MCU STM32 Antes de operar los pines, se requiere mucho trabajo de inicialización, como habilitar el reloj e inicializar los pines GPIO.

    La siguiente es una breve introducción al desarrollo de la microcomputadora de un solo chip STM32. Este artículo es una simulación. No necesita una microcomputadora de un solo chip STM32 real. Solo necesita instalar y desarrollar software relacionado en la computadora, principalmente keil- mdk y proteus.

    El keil instalado aquí es una versión que admite microcomputadoras de un solo chip STM32, lo que requiere la instalación de la versión mdk. Aquí hay un enlace de descarga de keil que admite mdk , código de extracción: 1234. Su instalación y craqueo son similares a keil-51. El craqueo también usa keygen.exe para generar el código de registro. Después de la instalación, también necesita instalar el paquete que admite microcontroladores STM32: Keil.STM32F1xx_DFP.1.0.5.pack, descargar el paquete desde el enlace anterior. Puede instalarlo sin conexión, de la siguiente manera:

    Seleccione el botón Instalar paquete en la barra de herramientas de keil, seleccione Archivo->Importar en el cuadro emergente y aparecerá el cuadro de diálogo de selección de archivos, seleccione el paquete descargado y podrá instalarlo sin conexión.

    Necesitamos una biblioteca estándar para construir el proyecto STM32. De manera similar, el enlace de descarga que acaba de llegar viene con: STM32F10x_StdPeriph_Lib_V3.5.0.rar. Después de la descompresión, la estructura es la siguiente:

 

    Aquí usamos la biblioteca estándar para construir el proyecto STM32, que contiene los archivos de encabezado y los archivos fuente requeridos por nuestro proyecto, así como el archivo de inicio. Antes de crear un nuevo proyecto STM, prepare una estructura de archivos de proyecto como esta:

    Core aquí también puede denominarse CMSIS. Según mis hábitos personales, literalmente significa archivo central. Aquí debemos copiar los archivos core_cm3.h y core_cm3.c en la biblioteca estándar. La ruta es STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport

   Fwlib es el significado de biblioteca de firmware, aquí copiamos las carpetas inc y src de STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src en la biblioteca estándar.

    Proyecto se utiliza para almacenar proyectos de keil y luego crear nuevos proyectos en keil; aquí especificamos la ubicación para guardar.

    Usuario, aquí está el archivo de usuario, copie los archivos stm32f10x.h, system_stm32f10x.c, system_stm32f10x.h y

stm32f10x_conf.h, stm32f10x_it.c, stm32f10x_it.h, system_stm32f10x.h en STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template (repetido).

 

    La carpeta donde se almacena el archivo de inicio de Inicio, aquí copiamos todos los archivos que terminan en s en STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm (en realidad solo se usa uno).

   De esta manera tenemos archivos en los otros cuatro directorios excepto que no hay archivos en la carpeta Proyecto.

   keil nueva construccion

   Abra keil-mdk, cree un nuevo proyecto y seleccione la carpeta del proyecto que acaba de preparar para la ubicación.

     

    En el siguiente asistente, seleccione el dispositivo para el objetivo de compilación. Elegimos STM32F103C8, y también hay otros disponibles, según las necesidades de simulación.

 

Este nuevo proyecto no tiene contenido, necesitamos restablecerlo. Haga clic en el botón "Administrar elementos de ingeniería" (tres bloques de colores) en la barra de herramientas:

Los objetivos del proyecto se cambian por el nombre del proyecto,

Grupos Agregue cuatro grupos aquí, a saber, Core, Fwlib, Startup, User y los archivos que contienen. Seleccionamos los archivos en las carpetas Core, Fwlib, Startup y User antes, y la estructura es la siguiente:

También debemos agregar manualmente el archivo main.c en el directorio de usuarios y luego hacer clic derecho en el grupo de usuarios para seleccionar: Agregar archivos existentes al grupo.

La estructura del archivo del proyecto final:

    Podemos agregar algo de código a main.c para que pueda compilarse como un proyecto vacío.

#include "stm32f10x.h"

int main()
{

}

En este momento, se informará un error al compilar el proyecto directamente. Necesitamos realizar configuraciones para establecer el rango de búsqueda del archivo de encabezado. La operación específica es hacer clic en la varita mágica (Opciones para objetivos) en la barra de herramientas y seleccionar c/c++. en el cuadro emergente, ingrese USE_STDPERIPH_DRIVER en Definir e Incluir rutas a continuación Seleccione nuestra carpeta Core, Fwlib/inc, Usuario tres directorios, seleccione manualmente:

    Finalmente, se puede compilar con éxito:

 

  Debido a que la simulación necesita un archivo hexadecimal al final, también necesita una configuración, haga clic en Opciones para objetivos, cambie a salida y luego marque Crear archivo HEX:

    El código para la iluminación del microcontrolador STM32 es algo complicado, principalmente es necesario encender el reloj y configurar el nivel del pin.

#include "stm32f10x.h"

void Delay()
{
	unsigned int i, j;
    for(i = 0; i < 2000; i++)
	  for(j = 0; j < 110; j++);
}

void LED_Config()
{
      GPIO_InitTypeDef GPIO_InitStructure;                  // GPIO初始化结构体
	
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2时钟使能,这里单片机开启的是B口,所以对应RCC_APB2Periph_GPIOB,如果开启A口,这里对应RCC_APB2Periph_GPIOA
	  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;      // 推挽模式
	  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;             // 管脚B5作为输出
	  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //时钟频率
      GPIO_Init(GPIOB, &GPIO_InitStructure);                // GPIO初始化,开启GPIOB,如果要开启A或者C,改变这里的GPIOA或者GPIOC
}

int main()
{
    LED_Config();
	  while(1)
	  {
			GPIO_SetBits(GPIOB, GPIO_Pin_5);
			Delay();
			GPIO_ResetBits(GPIOB, GPIO_Pin_5);
			Delay();
	 }
}

    Si la compilación no reporta ningún error, puede iniciar la simulación. En proteus, construimos el diagrama de diseño del LED como se muestra a continuación:

 

   Seleccione el chip STM32F103C8, luego busque el diodo emisor de luz LED VERDE, agregue una resistencia y conecte a tierra. Conexión simple, la MCU STM32 parece ser un poco diferente de la MCU 51, aquí debe ocuparse de la conexión, seleccionar Configuración de Power Rail en la barra de menú Diseño y pasar las partes enumeradas a la izquierda de GND y VCC/VDD. a través de Agregar en el medio La flecha (mover a la derecha) se agrega a la derecha:

    Hay otro lugar importante que debe configurarse, que es la frecuencia del oscilador de cristal del microcontrolador. Si no se configura, se informará un error:

Acceso al registro del periférico desbloqueado en 0x40010C00 causa BUS_FAULT [U1_CM3CORE]
 

    Es posible que este problema solo se informe durante la simulación. Algunos lugares dicen que la habilitación del reloj debe configurarse en el código, pero nuestro código obviamente está configurado, que es  RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB, ENABLE);    este código. Este problema es muy problemático. Al principio pensé que el código no ejecutaba el contenido del archivo main.c. De hecho, no lo es, pero la frecuencia del oscilador de cristal, pero la frecuencia tampoco está configurada. Yo uso el código generado por STM32CubeMX se ejecuta sin problema.También es muy extraño.

    

    Los 50MHz aquí son la frecuencia de reloj GPIO_Speed_50MHz establecida en el código. 

    Finalmente, la simulación no reporta ningún error: 

     Aquí se utiliza la biblioteca estándar para construir el proyecto STM32, por lo que se agregan algunos archivos de encabezado y archivos fuente de la biblioteca estándar. Aquí, de acuerdo con las características del proyecto, las carpetas Core, Fwlib, Project, Startup, User son nuevas Se crean y se agregan los archivos relacionados, y finalmente en el proyecto keil Los grupos Core, Fwlib, Startup y User establecidos en el destino no tienen el mismo significado, pero los nombres son los mismos. Finalmente, debe agregar archivos manualmente a estos grupos.

    

Supongo que te gusta

Origin blog.csdn.net/feinifi/article/details/132261309
Recomendado
Clasificación