02 # operación de 2 bits

1. Concepto de operación de generación de bits, ventajas y desventajas:

Opere directamente el hardware a través de la dirección del puerto del hardware:

Ventajas: respuesta rápida, se puede aplicar a campos como la industria militar que tienen requisitos estrictos sobre el rendimiento del hardware

Desventajas: La operación es un poco más difícil, y el personal que necesita programar debe comprender y guiar cómo operar la dirección del hardware, así como otras configuraciones de hardware.

 

En segundo lugar, la técnica de conversión de dirección de registro y dirección de alias:

1. Determine la dirección de inicio de un acceso de puerto, por ejemplo, la dirección de inicio de acceso del puerto F es GPIOF_BASE
# define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)

2. Calcule el valor de desplazamiento de acuerdo con la dirección de registro a la que se accederá, como el cálculo
Dirección de registro GPIOF ODR = GPIOF_BASE + 0x14;
 
3. Convertir de acuerdo con la siguiente fórmula
Registrar bit alias = 0x42000000 + (dirección de registro - 0x40000000 ) * 8 * 4 + número de pin * 4   

 

3. Fórmula de cálculo de la operación de generación de bits:

Método uno, configure el código de nivel de pin PF9 de la siguiente manera
uint32_t * PF9_BitBand = ( uint32_t * ) ( 0x42000000 + ( GPIOF_BASE + 0x14 - 0x40000000 ) * 32 + 9 * 4 ) ;        
 
Método dos, una solución más óptima:
uint32_t * PF9_BitBand    = ( uint32_t * ) ( 0x42000000 + ( ( uint32_t ) y GPIOF -> ODR - 0x40000000 ) * 32 + 9 * 4 ) ;      

El siguiente código utiliza dos métodos para operar el puerto GPIOF9, principalmente para lograr la función de luz intermitente, 

#include " stm32f4xx.h " 
#include <stdio.h>

GPIO_InitTypeDef estático GPIO_InitStructure;
uint32_t * p9 = (uint32_t *) ( 0x42000000 + ((uint32_t) & GPIOF-> ODR- 0x40000000 ) * 32 + 9 * 4 );
 // Obtenga la dirección del hardware por operación de generación de bits
    
retraso nulo ( nulo )
{
    uint32_t i = 0x2000000 ;
    
    mientras que (i-- );
}
int main ( nulo )
{    
    
    // Habilitar (abrir) el reloj de hardware del puerto F, que es suministrar energía al puerto F 
    RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOF, ENABLE);


    // initialize GPIO pasadores 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;         // primer pasador 9 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;     // modo de salida 
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;     // salida push-pull, aumentar la capacidad de corriente de salida. 
    GPIO_InitStructure.GPIO_Speed ​​= GPIO_Speed_100MHz; // Respuesta de alta velocidad 
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;     // Las resistencias pull-up y pull-down 

    GPIO_Init (GPIOF, y GPIO_InitStructure) no están habilitadas
    
    
    mientras que ( 1 )
    {
        // PF9 pin output high level
         // GPIO_SetBits (GPIOF, GPIO_Pin_9); 
        * p9 = 1 ;
        retrasar();
        
        // El pin PF9 produce GPIO_ResetBits de bajo nivel 
        (GPIOF, GPIO_Pin_9);
    
        retrasar();    
    }



}

4. El diagrama esquemático es el siguiente: 

 

Supongo que te gusta

Origin www.cnblogs.com/lxuechao/p/12718605.html
Recomendado
Clasificación