Если вы используете Keil, как вы сказали в ваших комментариях, то вы вполне уверены, что используете ST HAL. Как таковой, вы должны использовать его.
Используйте это для включения GPIO C часы
__GPIOC_CLK_ENABLE();
Похоже, вы не включили другие часы. Сейчас я не могу понять, какой это, но, вероятно, это один из самых высоких в цепи. (Вероятно, это происходит из-за того, что вы включили часы, используя APB2ENR
вместо макроса)
Другое решение, чтобы выяснить это, было бы использовать STM32CubeMX , это проверенный мультиплатформенный инструмент ST для создания базовых инициализированных проектов для нескольких IDE.
Загрузите и запустите его, создайте проект для MCU, добавьте вывод, который вы хотите использовать в качестве выходного сигнала, и сгенерируйте проект Keil, который должен скомпилироваться и запустить. Если это работает, вы можете выполнить обратный инжиниринг шагов, которые STM32CubeMX предпринял для создания рабочего кода.
Основная проблема заключается в том, что вы не включили reset and run
в конфигурации. Таким образом, после программирования плату необходимо сбросить перед запуском вновь прошитого кода. Запуск отладчика делает это.
![configuration window with reset and run](https://i.stack.imgur.com/yGjGN.png)
Эта конфигурация находится в меню утилит-> настройки. (не обращая внимания на красный маркер, я сам не смог запечатлеть изображение и получил его из целого числа rnet)
![enter image description here](https://i.stack.imgur.com/XC5Ye.png)