Carpa novata STM32

Cuenta pública de WeChat: Xiaofan Study está
preocupado por el aprendizaje común, preguntas o sugerencias, ¡por favor deje un mensaje en la cuenta pública!

Como programador, en el aprendizaje inicial de la programación, uno de los ejemplos básicos de nivel básico "Hello World" es inevitable. Entonces, ¿cuál es el ejemplo de entrada más básico cuando se aprende MCU? Así es, "encender una luz LED" lo llevará a través de un programa clásico de marquesina para llevar a todos a comenzar el viaje de STM32F4. A través de este estudio, comprenderá el puerto IO de STM32F4 como el método de salida .
Controlaremos los dos LED en la placa de desarrollo STM32F4 a través del código: DS0 y DS1 parpadean alternativamente para lograr un efecto similar al de una marquesina.

Conexión de hardware

 

 

Método de trabajo GPIO

  • 4 modos de entrada:
      entrada flotante
      entrada pull-up
      input pull-down
      entrada analógica

  • 4 modos de salida:
     salida de drenaje abierto (con pull-up o pull-down)
     función de multiplexación de drenaje abierto (con pull-up o pull-down)
     salida de push-pull (con pull-up o pull-down)
     función de multiplexación de push-pull (con pull-up o pull-down )

  • 4 tipos de velocidad de salida máxima:
      -2MHZ
      -25MHz
      -50MHz
      -100MHz

Diseño de software

led.c

# include " led.h "  
/////////////////////////////////////////// ////////////////////////////////////// /      


// initialize PF10 puerto de salida y PF9. y estos dos puertos para permitir reloj            
 // el LED inicializar el IO 
vacío LED_Init ( void ) 
{          
  GPIO_InitTypeDef GPIO_InitStructure; 

  RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOF, la habilitación); // permite el reloj GPIOF 

  // GPIOF9, la configuración de inicialización F10 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; // LED0 y LED1 corresponden al puerto IO 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // Modo de salida general 
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;// salida push-pull 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // 100MHz 
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; // tirón 
  GPIO_Init (GPIOF, y GPIO_InitStructure); // inicializar el GPIO 
    
    GPIO_SetBits (GPIOF, GPIO_Pin_9 | GPIO_Pin_10); // GPIOF9, siempre que el F10 alta, fuera 

}

 

Este código contiene una función void LED_Init (void). La función de esta función es configurar PF9 y PF10 como salida push-pull. Cabe señalar aquí que al configurar el periférico STM32, ¡el reloj del periférico debe estar habilitado en todo momento! GPIO es un periférico montado en el bus AHB1. El reloj periférico montado en el bus AHB1 en la biblioteca de firmware está habilitado por la función RCC_AHB1PeriphClockCmd ().

Después de configurar el reloj, LED_Init llama a la función GPIO_Init para completar la configuración inicial de PF9 y PF10, y luego llama a la función GPIO_SetBits para controlar la salida 1 de LED0 y LED1 (LED apagado). En este punto, la inicialización de los dos LED está completa. Esto completa la inicialización de estos dos puertos IO.

led.h

#ifndef __LED_H
 #define __LED_H 
#include " sys.h " 

////////////////////////////////////// //////////////////////////////////////////// /      
                                  
///// //////////////////////////////////////////////////// ////////////////////////// /      


// el puerto LED definición 
#define LED0 PFout (. 9)     // el DS0 
#define Ledl PFout (10)     / / DS1      

void LED_Init ( void ); // Inicializar #                              
endif

 

Aquí, las operaciones de banda de bits se utilizan para operar un bit de un puerto IO.

Escriba el siguiente código en la función principal:

#include " sys.h " 
#include " delay.h " 
#include " usart.h " 
#include " led.h " 


// Marquee experiment-library version version 

    
int main ( void ) 
{ 
 
    delay_init ( 168 );           // Función de retraso de inicialización 
    LED_Init ();                 // Inicializa el puerto de LED 
  mientras que ( 1 ) 
    { 
     LED0 = 0 ;               // LED0 enciende 
       LED1 = 1 ;                // LED1 apagado 
         delay_ms ( 500 ); 
         LED0 = 1 ;                 // LED0 apagado 
         LED1 = 0 ;                 // LED1 encendido 
         delay_ms ( 500 ); 
     } 
}

 

El código incluye la oración #include "led.h", para que se pueda invocar LED0, LED1, LED_Init, etc. en la función main (). Aquí debemos reiterar que en la biblioteca de firmware, el sistema llamará a la función SystemInit () en system_stm32f4xx.c para inicializar el reloj del sistema cuando se inicie, y llamará a la función main () después de que se complete la inicialización del reloj. Entonces ya no necesitamos llamar a la función SystemInit () en la función main (). Por supuesto, si necesita reiniciar el sistema del reloj, puede escribir su propio código de configuración del reloj. SystemInit () simplemente inicializa el sistema del reloj al estado predeterminado. La función main () es muy simple, primero llame delay_init () para inicializar el retraso, luego llame a LED_Init () para inicializar GPIOF.9 y GPIOF.10 como salida. Finalmente, LED0 y LED1 parpadean alternativamente en un bucle infinito a intervalos de 500 ms.

Luego presione

Compila el proyecto

Puede ver que no hay errores ni advertencias. A partir de la información de compilación, podemos ver que nuestro código ocupa un tamaño FLASH: 5672 bytes (5248 + 424), y el tamaño SRAM utilizado es: 1880 bytes (1832 + 48). Aquí explicamos el significado de varios datos en el resultado de la compilación: Código: indica el tamaño de FLASH ocupado por el programa (FLASH). Datos de RO: datos de solo lectura, que representan la constante definida por el programa (FLASH). Datos RW: Leer datos de escritura, lo que significa la variable inicializada (SRAM) Datos ZI: Cero datos iniciales, lo que significa la variable no inicializada (SRAM) Con esto, puede conocer el flash actual y El tamaño del sram es grande, por lo que es importante tener en cuenta que el tamaño del programa no es el tamaño del archivo .hex, sino la suma del código compilado y los datos de RO.

Descargar verificación

Después de la descarga, LED0 y LED1 parpadean cíclicamente

Supongo que te gusta

Origin www.cnblogs.com/fw-qql/p/12740467.html
Recomendado
Clasificación