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);
}