STM32F031のF0,F1ピンは外部クロックのピン(OSC_IN, OSC_OUT)を兼ねている。この切り替えはRCCレジスタのHSEONビットでおこなわれる。リセット値は 0 すなわち外部クロック無効なので、デフォルトではGPIOとして使える。
…のだが、環境によっては、main関数より前に実行されるスタートアップルーチンで勝手にHSEONが 1 にセットされている場合がある。実際には内部クロック動作で使用するにも関わらずである。HSEONが 1 すなわち外部クロック有効の設定では、当然ながら F0,F1ピンはGPIOとして使えない。
その場合は、下記のようにHSEONビットをクリアすればよい。
RCC->CR &= ~((uint32_t)RCC_CR_HSEON); // HSE無効