¿No están documentadas las opciones pull-up/pull-down para STM32F103?

Mientras intentaba configurar los GPIO usando CMSIS en una placa NUCLEO-F103RB , no pude encontrar en el manual de referencia cómo se supone que uno debe elegir entre resistencias pull-up y pull-down internas.

La página 160 muestra la configuración de los bits CNF y MODE y muestra que los bits son los mismos para pull-up y pull-down. La búsqueda de "pull-up" y "pull-down" en todo el archivo PDF no produce resultados. La fe de erratas tampoco menciona esto.

¿ ST en serio se olvidó de poner esta información en el manual? Si es así, ¿cómo es que nadie se ha dado cuenta de esto? ¿O solo estoy siendo ciego?

De todos modos, mirando su biblioteca de periféricos estándar, parece que escribir un 1 en el bit correspondiente en el registro GPIO BRR activa la resistencia desplegable, mientras que escribir un 1 en el BSRR activa la resistencia desplegable:

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

Este código se puede encontrar en el archivo stm32f10x_gpio.c.

Respuestas (2)

La información que está buscando está en el manual, pero no es tan obvia como podría ser. La tabla que mencionó en la página 160 contiene más información:

gpio

Como puede ver, asumiendo que el pin está configurado como una entrada, el valor en los registros ODR es el factor decisivo en cuanto a si el pin es pull-up o pull-down.

Puede configurar y/o borrar todos estos bits a la vez escribiendo un valor de 16 bits en el registro GPIOx_ODR apropiado, o puede configurarlos/restablecerlos individualmente usando los registros GPIOx_BRR y/o GPIOx_BSRR.

Curiosamente, el mismo registro ODR controla el estado del pin (alto o bajo) cuando el pin está configurado como salida.

¡Descubrí que a veces puedo aprender más sobre el funcionamiento de los controladores STM ARM leyendo sus bibliotecas de periféricos estándar que sus manuales de referencia!

Me gusta cómo estaba frente a mis ojos y, aunque miré esa mesa tantas veces, todavía no podía verla. palma de la mano Gracias.
@Chi Ja! Eso me pasa más de lo que me gusta admitir :)

Hola, la información de la entrada pull-up configurada está aquí, verifique esto[![ingrese la descripción de la imagen aquí][1]][1] [1]: https://i.stack.imgur.com/CwAT3.png

ingrese la descripción de la imagen aquí

La configuración podría ser:

#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){
    }
}
Hola Cris. Veo que eres nuevo en el intercambio de pilas de ingeniería eléctrica, bienvenido :) Gracias por tu respuesta, pero... esta ya ha sido respondida (correctamente) hace casi 6 años. Si no está seguro de cómo funciona el intercambio de pilas, puede leer la guía turística disponible aquí: electronics.stackexchange.com/tour