Согласно справочному руководству регистры CRL GPIOA сбрасываются как 0x4444 4444 (см. Раздел 9.2.1 справочного руководства). Когда вы выполняете следующую команду:
GPIOA->CRL |= (1<<9);
вы устанавливаете биты РЕЖИМА PA2 на 10 (режим вывода, максимальная скорость 2 МГц). Но из-за инициализации начального регистра биты CNF2 равны 01, что является конфигурацией с открытым стоком. Вместо этого вы должны инициализировать PA2 следующим образом:
GPIOA->CRL &= ~(0b0000<<8);
GPIOA->CRL |= (0b0010<<8);
Это гарантирует, что оба MODE2 и CNF2 установлены, так что вывод действует как выход с конфигурацией pu sh -pull