Configuración STM32 GPIO

Estoy tratando de encontrar algún recurso en línea para descubrir cómo configurar los registros GPIO en una placa STM32F4 Cortex M4. Solo tengo ejemplos para el Cortex M4

typedef struct
 {
   __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
   __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
   __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */
   __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
   __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */
   __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */
   __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */
   __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */
   __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */
   __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x24-0x28 */
 } GPIO_TypeDef;

Aquí están los registros. Pero no hay nada en línea que me muestre cómo configurar realmente un pin para decir salida/entrada, etc. ¿Puede alguien señalarme un recurso?

La forma en que necesita configurar los registros del puerto GPIO es algo que encontrará en la hoja de datos del dispositivo. Varía de un dispositivo a otro, incluso con la misma arquitectura.
Me encantaría algunos ejemplos.
las hojas de datos/manuales de usuario de las piezas están en línea y le muestran cómo configurar, incluidas las tablas para los diferentes modos (entrada digital, drenaje abierto, salida digital, etc.) Simplemente tome los valores de la tabla y conéctelos los registros
Por si acaso, alguien está buscando un manual que describa gpio en detalles: st.com/web/en/resource/technical/document/reference_manual/…

Respuestas (1)

Si está utilizando la biblioteca ST Standard Peripheral (descargable desde la página STM32F4, también está la biblioteca USB , y más cosas ), lea la documentación (es un archivo .chm en el nivel superior del zip) y verifique el código de ejemplo. Todas las funciones para configurar IO, periféricos, etc. están ahí.

Aquí hay un par de fragmentos que muestran la inicialización y el uso de un pin IO de parte de mi código.

Configuración de pines:

#include "stm32f4xx.h"

void LED_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* Enable the GPIO_LED Clock */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

    GPIO_InitStructure.GPIO_Pin = LED1 | LED2 | LED3 | LED4;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStructure);
}

LED de alternancia:

    GPIO_SetBits(GPIOD, LED1);
    GPIO_ResetBits(GPIOD, LED2);
Es posible que desee incluir definiciones de ejemplo para los diferentes LEDx, ya que no forman parte de la biblioteca de periféricos estándar. Buen punto que muestra la habilitación del reloj. Eso es algo fácil de olvidar.
Lo sé, pero quiero meterme con los registros. Supongo que podría estudiar el código de la biblioteca. :( Pero es bastante doloroso
Si desea "meterse con los registros", debe estudiar la hoja de datos. Desde el código de la biblioteca, no sabría por qué se establecen o borran ciertos bits.