0% encontró este documento útil (0 votos)
116 vistas19 páginas

Modulo Gpio

El documento describe la configuración del periférico GPIO en STM32. Explica cómo inicializar los pines GPIO usando la función HAL_GPIO_Init(), especificando el pin, modo, pull y velocidad. También presenta un ejemplo de programa que enciende y apaga dos LEDs alternativamente a diferentes velocidades dependiendo del estado de un botón conectado a un pin de entrada.

Cargado por

Vane R. Lerma
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
116 vistas19 páginas

Modulo Gpio

El documento describe la configuración del periférico GPIO en STM32. Explica cómo inicializar los pines GPIO usando la función HAL_GPIO_Init(), especificando el pin, modo, pull y velocidad. También presenta un ejemplo de programa que enciende y apaga dos LEDs alternativamente a diferentes velocidades dependiendo del estado de un botón conectado a un pin de entrada.

Cargado por

Vane R. Lerma
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1

ARQUITECTURA DEL PIN


ARQUITECTURA DEL PIN
Push-Pull

1
X
ARQUITECTURA DEL PIN
Push-Pull

0
X
0
ARQUITECTURA DEL PIN
Drenador Abierto

Alta
impedancia

1
X
ARQUITECTURA DEL PIN
Drenador Abierto

0
MODULO GPIO
• Para realizar la configuración del periférico es necesario usar la función:

HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)

GPIO_InitTypeDef Es una estructura en C

typedef struct
{
uint32_t Pin; /*!< Específica los pines GPIO que Deben ser configuradas*/
uint32_t Mode; /*!< Específica el modo de operación de los pines seleccionados*/
uint32_t Pull; /*!< Específica la activación de los Pull-up o Pull-Down de los
/* pines seleccionados.*/
uint32_t Speed; /*!< Específica la velocidad de los pines seleccionados*/

} GPIO_InitTypeDef;
MODULO GPIO
• PIN: Se refiere a los pines que configuraran:
GPIO_PIN_4

Se pueden configurar varios pines al mismo tiempo:


GPIO_PIN_4 |GPIO_PIN_3 |GPIO_PIN_2

typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;

uint32_t Speed;

} GPIO_InitTypeDef;
MODULO GPIO
• MODE: Se refiere al modo de operación del pin:
GPIO_MODE_INPUT Entrada flotante
GPIO_MODE_OUTPUT_PP Modo salida Push Pull
GPIO_MODE_OUTPUT_OD Modo salida drenador abierto

GPIO_MODE_AF_PP Modo función Alterna Push Pull


GPIO_MODE_AF_OD Modo función Alterna Drenador Abierto
typedef struct GPIO_MODE_AF_INPUT Modo función Alterna de Entrada
{ GPIO_MODE_ANALOG Modo Análogo
uint32_t Pin;
uint32_t Mode; GPIO_MODE_IT_RISING Modo Interrupción Externa con Detección de Flanco de Subida
uint32_t Pull; GPIO_MODE_IT_FALLING Modo Interrupción Externa con Detección de Flanco de Bajada
GPIO_MODE_IT_RISING_FALLING Modo Interrupción Externa con Detección de Flanco de Subida/Bajada
GPIO_MODE_EVT_RISING Modo Evento Externo con Detección de Flanco de Subida
uint32_t Speed; GPIO_MODE_EVT_FALLING Modo Evento Externo con Detección de Flanco de Bajada
GPIO_MODE_EVT_RISING_FALLING Modo Evento Externo con Detección de Flanco de Subida/bajada
} GPIO_InitTypeDef;
MODULO GPIO
• PULL: Específica la activación de los Pull-up o Pull-Down de los pines seleccionados:
GPIO_NOPULL No existe activación Pull-up ni Pull-down
GPIO_PULLUP Activación Pull-up
GPIO_PULLDOWN Activación Pull-down

typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;

uint32_t Speed;

} GPIO_InitTypeDef;
MODULO GPIO
• SPEED: Específica la rapidez del cambio de nivel desde un valor igual a 0V hasta VDD.
GPIO_SPEED_FREQ_LOW Velocidad Lenta
GPIO_SPEED_FREQ_MEDIUM Velocidad Media
GPIO_SPEED_FREQ_HIGH Velocidad Alta

typedef struct
{
uint32_t Pin;
uint32_t Mode;
uint32_t Pull;

uint32_t Speed;

} GPIO_InitTypeDef;
MODULO GPIO
LA librería HAL brinda cuatro rutinas de manipulación para la lectura,
escritura, cambio y bloqueo
FUNCIÓN DE LECTURA: HAL_GPIO_ReadPin
Nombre de la función:
HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)
Descripción de la función: Lee el pin del Puerto especificado.
Parametros:
GPIOx: Donde x puede ser (A..G dependiendo del dispositivo usado) un periferico GPIO Seleccionado
GPIO_Pin: Especifíca el bit del Puerto leido . Este parametro puede ser el GPIO_PIN_x donde x puede
ser (0..15).
Valores de retorno:
Valor del Puerto de entrada.
MODULO GPIO
LA librería HAL brinda cuatro rutinas de manipulación para la lectura,
escritura, cambio y bloqueo
FUNCIÓN DE ESCRITURA: HAL_GPIO_WritePin
Nombre de la función:
HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
Descripción de la Función: Pone 1 o 0 lógicos en el bit seleccionado.
Parametros:
GPIOx: donde x puede ser (A..G dependiendo del dispositivo usado) el periferico GPIO seleccionado
GPIO_Pin: especifíca el Puerto a ser escrito. Este parametron puede ser uno de GPIO_PIN_x donde x
puede ser (0..15).
PinState: especifíca el valor a ser escrito en el bit seleccionado. Este parametro puede ser uno de los
GPIO_PinState valores enumerados:
GPIO_BIT_RESET: pone a 0 el pin del Puerto
GPIO_BIT_SET: pone a 1 el pin del Puerto
Valores de retorno: ninguno.
MODULO GPIO
LA librería HAL brinda cuatro rutinas de manipulación para la lectura,
escritura, cambio y bloqueo
FUNCIÓN DE CAMBIO: HAL_GPIO_TogglePin
Nombre de la Funció:
void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)
Descripción de la Función: Invierte el valor del pin GPIO seleccionado.
Parametros:
GPIOx: donde x puede ser (A..G dependiendo del dispsitivo usado) un periférico GPIO seleccionado
GPIO_Pin: Especifíca el pin a ser invertido.
Valores de retorno: ninguno.
MODULO GPIO
LA librería HAL brinda cuatro rutinas de manipulación para la lectura,
escritura, cambio y bloqueo
FUNCIÓN DE BLOQUEO: HAL_GPIO_LockPin
Nombre de la Función:
HAL_StatusTypeDef HAL_GPIO_LockPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)
Descripción de la Función: Bloquea los registros de configuración de los pines GPIO.
Parametros
GPIOx: donde x puede ser(A..G dependiendo al dispositivo usado) el periférico de GPIO seleccionado.
GPIO_Pin: especifíca el pin del Puerto ser bloqueado. Este parametro puede ser cualquier combinacion de
los pines GPIO_Pin_x donde x puede ser (0..15).
Valores de retorno: ninguno.
MODULO GPIO

FUNCIÓN PARA CONFIGURACIÓN POR DEFECTO:

HAL_GPIO_DeInt (GPIO_TypeDef * GPIOx, uint32_t GPIO_Pin)


Descripción de la Función: Deshabilita cualquier configuracion previa del modulo GPIO.
Parametros
GPIOx: donde x puede ser(A..G dependiendo al dispositivo usado) el periférico de GPIO seleccionado.
GPIO_Pin: especifíca el pin del Puerto ser bloqueado. Este parametro puede ser cualquier combinacion de
los pines GPIO_Pin_x donde x puede ser (0..15).
Valores de retorno: ningunoó
CONFIGURACIÓN DE PERIFÉRICO GPIO

Para comprender la configuración de este periférico,


desarrollaremos el siguiente programa:

Escribir un programa en el cual dos leds conectados a dos


pines intercambian el parpadeo. Si se presiona un pulsador
conectado a otro pin el parpadeo debe ser más rápido.
CONFIGURACIÓN DE PERIFÉRICO GPIO
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
Configuración de los pines: Se usara
__HAL_RCC_GPIOB_CLK_ENABLE();
el puerto B. El pin12 como entrada con
pull-up habilitado, y los pines 13 y 14 GPIO_InitStruct.Pin = GPIO_PIN_12;
como salidas. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13|GPIO_PIN_14, GPIO_PIN_RESET);

}
CONFIGURACIÓN DE PERIFÉRICO GPIO
while (1)
{
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)==0) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_Delay(100);
}
else {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_Delay(500);
}

También podría gustarte