Debe reinicializar el pin como una salida controlada por software. Por ejemplo, si está utilizando la biblioteca periférica estándar STM32, y suponiendo que el pin en cuestión es PA5, tendría que hacer algo como:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOA, &GPIO_InitStructure);
Posiblemente también necesitarías establecer el campo GPIO_InitStructure.GPIO_Speed
si la señal de tu reloj es más rápida que 2 MHz (la configuración predeterminada).
De ahora en adelante, puede hacer GPIO_Toggle(GPIOA, GPIO_Pin_5)
y funcionaría, ya que el pin ahora está bajo el control del software. Por supuesto, al estar bajo el control del software, el periférico que alterna el reloj SPI ya no tendrá efecto en el pin. Si alguna vez desea delegar el control del pin de nuevo en el periférico, ejecutará el código nuevamente, pero establecerá el campo GPIO_Mode
en GPIO_Mode_AF
.