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.
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:
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!
Hallo, die Informationen vom konfigurierten Pull-up-Eingang sind hier. Überprüfen Sie dies
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){
}
}
Chi
bitsmack