Red de conocimiento informático - Problemas con los teléfonos móviles - STM32 generalmente usa funciones de biblioteca para operaciones GPIO. Quiero saber cómo usar operaciones de bits para implementar luces de marcha. ¡Gracias!

STM32 generalmente usa funciones de biblioteca para operaciones GPIO. Quiero saber cómo usar operaciones de bits para implementar luces de marcha. ¡Gracias!

Operaciones relacionadas con el archivo de función GPIO:

Antes de usar la función GPIO, primero debe inicializar el sistema. El método más simple es: agregar stm32f10x_rcc.c, abrir stm32f10x_conf.h y cambiar /. en la línea 41 * #include "stm32f10x_rcc.h""*/ Elimina los comentarios de ambos lados y agrega el código SystemInit() en la función principal;

Agrega stm32f10x_gpio.c

Abra stm32f10x_conf.h en 37 Elimine los comentarios en ambos lados de /*#include "stm32f10x_gpio.h"*/

Habilitación del puerto GPIO:

Defina una variable de estructura de tipo de inicialización. , asignaremos valores a cada variable en,

GPIO_InitTypeDef GPIO_InitStructure;

2 Encienda el reloj GPIO Solo cuando el reloj GPIO esté encendido podrá funcionar. normalmente el puerto GPIO corresponde al reloj APB2

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

3 Asignar valor a la estructura

Establecer el puerto GPIO como. salida

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; / /Establecer pin

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP //Salida push-pull general, otras opciones

GPIO_InitStructure. GPIO_Speed ​​​​= GPIO_Speed_50MHz; //Frecuencia máxima de salida, otras opciones

Establece el puerto GPIO como entrada

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 //Establece el pin

<; p>GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //Dejar entrada

Adjunto:

Valor GPIO_Mode

Entrada analógica GPIO_Mode_AIN

Entrada flotante GPIO_Mode_IN_FLOATING

Entrada desplegable GPIO_Mode_IPD

Entrada pull-up GPIO_Mode_IPU

Salida de drenaje abierto GPIO_Mode_Out_OD

Salida push-pull GPIO_Mode_Out_PP

GPIO_Mode_AF_OD salida multiplexada de drenaje abierto

GPIO_Mode_AF_PP salida push-pull multiplexada

Valor GPIO_Speed

GPIO_Speed_10MHz Velocidad máxima de salida 10MHz

GPIO_Speed_2MHz Velocidad de salida máxima 2MHz

GPIO_Speed_50MHz Velocidad de salida máxima 50MHz

4. Habilitar puerto GPIO

GPIO_Init(GPIOA, amp; GPIO_InitStructure);

Ejemplo:

void GPIOA0_Init(

vacío)

{

GPIO_InitTypeDef GPIO_InitStructure

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; >

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP

GPIO_InitStructure.GPIO_Speed ​​​​= GPIO_Speed_50MHz

GPIO_Init(GPIOA, amp; GPIO_InitStructure); GPIO_Pin = GPIO_Pin_8;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA y GPIO_InitStructure

}

Uso de GPIO:

Estado de salida:

El puerto GPIO está configurado en alto: GPIO_SetBits(GPIOA, GPIO_Pin_0| GPIO_Pin_1);

El puerto GPIO está configurado en bajo: GPIO_ResetBits(GPIOA, GPIO_Pin_0 );

Escribir datos en un pin de GPIO: GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);

Escribir datos en GPIO: GPIO_Write(GPIOA, 0x1101);

Obtener el estado del puerto GPIO: GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0);

u16 ReadValue

ReadValue = GPIO_ReadOutputData(GPIOC); p>

#define LED0_OFF GPIO_ResetBits(GPIOA, GPIO_Pin_0)

#define LED0_ON GPIO_SetBits(GPIOA, GPIO_Pin_0)

#define LED0 GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0)

int main(void)

{

mientras(1)

{

retraso();

if(LED1)

LED0_OFF

else LED0_ON

}

}

Entrada estado:

Obtener el estado del puerto GPIO: GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)

u16 ReadValue

ReadValue = GPIO_ReadInputData(GPIOC); p>Este es el método de configuración básico de GPIO

p>

Para realizar la linterna giratoria, simplemente reemplace los pines del interior de acuerdo con los pines correspondientes conectados a las pequeñas luces de su propio tablero.