Sind Pullup-/Pulldown-Optionen für STM32F103 nicht dokumentiert?

Beim Versuch, die GPIOs mit CMSIS auf einem NUCLEO-F103RB- Board zu konfigurieren , konnte ich im Referenzhandbuch anscheinend nicht finden , wie man zwischen internen Pull-up- und Pull-down-Widerständen wählen soll.

Seite 160 zeigt die Konfiguration der CNF- und MODE-Bits und zeigt, dass die Bits für Pull-up und Pull-down gleich sind. Das Durchsuchen der gesamten PDF-Datei nach „pull-up“ und „pull-down“ liefert keine Ergebnisse. Auch die Errata erwähnt dies nicht.

Hat ST ernsthaft vergessen, diese Informationen in das Handbuch aufzunehmen? Wenn ja, warum hat das niemand bemerkt? Oder bin ich nur blind?

Wie auch immer, wenn man sich ihre Standard-Peripheriebibliothek ansieht, scheint es, dass das Schreiben einer 1 in das entsprechende Bit im GPIO BRR-Register den Pulldown-Widerstand aktiviert, während das Schreiben einer 1 in das BSRR den Pullup-Widerstand aktiviert:

    /* Reset the corresponding ODR bit */
    if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
    {
      GPIOx->BRR = (((uint32_t)0x01) << pinpos);
    }
    else
    {
      /* Set the corresponding ODR bit */
      if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
      {
        GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
      }
    }

Dieser Code befindet sich in der Datei stm32f10x_gpio.c.

Antworten (2)

Die Informationen, nach denen Sie suchen, sind im Handbuch enthalten, aber nicht so offensichtlich, wie es sein könnte. Die Tabelle, die Sie auf Seite 160 erwähnt haben, enthält weitere Informationen:

gpio

Wie Sie sehen, ist unter der Annahme, dass der Pin als Eingang konfiguriert ist, der Wert in den ODR-Registern der entscheidende Faktor, ob der Pin Pull-up oder Pull-down ist.

Sie können alle diese Bits auf einmal setzen und/oder löschen, indem Sie einen 16-Bit-Wert in das entsprechende GPIOx_ODR-Register schreiben, oder Sie können sie einzeln setzen/zurücksetzen, indem Sie die GPIOx_BRR- und/oder GPIOx_BSRR-Register verwenden.

Interessanterweise steuert dasselbe ODR-Register den Pin-Zustand (hoch oder niedrig), wenn der Pin als Ausgang konfiguriert ist.

Ich habe festgestellt, dass ich manchmal mehr über die Funktionsweise der STM ARM-Controller erfahren kann, indem ich ihre Standard-Peripheriebibliotheken durchlese als ihre Referenzhandbücher!

Ich mag es, wie es direkt vor meinen Augen war, und obwohl ich so oft auf diesen Tisch geschaut habe, konnte ich es immer noch nicht sehen. Gesichtspalme . Danke schön.
@ Chi Ha! Das passiert mir öfter, als ich zugeben möchte :)

Hallo, die Informationen vom konfigurierten Pull-up-Eingang sind hier. Überprüfen Sie dies[![Bildbeschreibung hier eingeben][1]][1] [1]: https://i.stack.imgur.com/CwAT3.png

Geben Sie hier die Bildbeschreibung ein

Die Konfiguration könnte sein:

#include "stm32f10x.h"              // Declaracion del Header
#define Clk_A   2

int main (){
RCC->APB2ENR|=(1<<Clk_A);       // Enable Clock to GPIOA
GPIOA->CRL=0x22220000;          // GPIO->A0:A3,Out A4:A7,in
GPIOA->CRL=0x22220000;          // GPIO->A7:A4,Out A3:A0,in
GPIOA->CRL|=0x8888;             // Pull-UP input A0:A3
GPIOA->ODR|=0x0F;               // Enable Pull UP A0:A3
while (1){
    }
}
Hallo Criss. Wie ich sehe, sind Sie neu im Elektrotechnik-Stack-Austausch, willkommen :) Vielen Dank für Ihre Antwort, aber ... diese wurde bereits vor fast 6 Jahren (richtig) beantwortet. Wenn Sie sich nicht sicher sind, wie der Stack-Austausch funktioniert, können Sie die hier verfügbare Anleitung lesen: electronic.stackexchange.com/tour