Hice una placa en la que conecto la placa del microcontrolador Nucleo-F767ZI. Hay un pin GPIO que no puedo usar como salida digital: PG2
.
Este es mi código en mbed-os:
static DigitalOut myPin_A(PG_2);
static DigitalOut myPin_B(PG_3);
...
static void someFunction()
{
myPin_A.write(1); // <- This one doesn't work :-(
myPin_B.write(1); // <- But this one works!
}
Pensé: "Quizás este problema tiene que ver con mbed-os". Así que he probado el ST HAL:
static void someFunction()
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_2;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_SET); // <- This one doesn't work :-(
HAL_GPIO_WritePin(GPIOG, GPIO_PIN_3, GPIO_PIN_SET); // <- But this one works!
}
Como puedes ver, obtengo exactamente el mismo resultado. Probé con otra placa Nucleo-F767ZI independiente. No la conecto a mi placa personalizada para asegurarme de que el pin PG2 no se ve afectado por nada fuera de Nucleo, pero aún así obtuve el mismo resultado.
EDIT
He generado un nuevo proyecto desde cero con CubeMX. Como saben, CubeMX no admite mbed-os, sino freeRTOS en su lugar. Cuando se usa freeRTOS, el pin PG_2
funciona, usando el código dado arriba.
¿Por qué no lo hago funcionar cuando mbed-os se está ejecutando? Esto es tan extraño :-(