STM32 GPIO-Konfiguration

Ich versuche, eine Online-Ressource zu finden, um herauszufinden, wie die GPIO-Register auf einem STM32F4 Cortex M4-Board konfiguriert werden. Ich habe nur Beispiele für den 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;

Hier sind die Register. Aber es gibt nichts online, das mir zeigt, wie man einen Pin tatsächlich konfiguriert, um Ausgabe / Eingabe usw. zu sagen. Kann mir jemand eine Ressource zeigen?

Wie Sie die GPIO-Portregister einrichten müssen, finden Sie im Gerätedatenblatt. Sie variiert von Gerät zu Gerät, selbst bei gleicher Architektur.
würde mich über ein paar beispiele freuen.
Die Datenblätter / Benutzerhandbücher für die Teile sind online und zeigen Ihnen, wie Sie konfigurieren, einschließlich Tabellen für die verschiedenen Modi (Digitaleingang, Open Drain, Digitalausgang usw.). Nehmen Sie einfach die Werte aus der Tabelle und stecken Sie sie ein die Register
Nur für den Fall, dass jemand nach einem Handbuch sucht, das gpio im Detail beschreibt: st.com/web/en/resource/technical/document/reference_manual/…

Antworten (1)

Wenn Sie die ST- Standardperipheriebibliothek verwenden (herunterladbar von der STM32F4-Seite, es gibt auch die USB-Bibliothek und mehr ), dann lesen Sie die Dokumentation (es ist eine .chm-Datei auf der obersten Ebene der ZIP-Datei) und Überprüfen Sie den Beispielcode. Alle Funktionen zum Einrichten von IOs, Peripheriegeräten usw. sind darin enthalten.

Hier sind ein paar Ausschnitte, die die Initialisierung und Verwendung eines IO-Pins aus meinem Code zeigen.

Pins einrichten:

#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 umschalten:

    GPIO_SetBits(GPIOD, LED1);
    GPIO_ResetBits(GPIOD, LED2);
Möglicherweise möchten Sie Beispieldefinitionen für die verschiedenen LEDx einschließen, da diese nicht Teil der standardmäßigen Peripheriebibliothek sind. Guter Punkt, der die Aktivierung der Uhr zeigt. Das vergisst man leicht.
Ich weiß das, aber ich will mit den Registern herumspielen. Ich nehme an, ich könnte den Bibliothekscode studieren. :( Aber es ist ziemlich schmerzhaft
Wenn Sie "mit den Registern herumspielen" möchten, müssen Sie das Datenblatt studieren. Aus dem Bibliothekscode wissen Sie nicht, warum bestimmte Bits gesetzt oder gelöscht werden.