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 entradaAdjunto:
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 p>
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); p>
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.