В данном прмере необходимо, чтобы компилятор поддерживал стандарт C99, в котором появились человеческие true/false. Это достигается путем применения флага компилятора -std=c99. Для среды PlatformIO этот флаг прописывается в файле platformio.ini следующим образом:
[env:bluepill_f103c8]
...
build_flags= -std=c99
...
Мигание происходит на пине PC13. Дефайны в этом примере очень замудренные, но понять как настраивается пин светодиода настраивается довольно несложно. Впрочем, данные дефайны легко можно упростить.
Код мигания светодиодом следующий:
#include <stdbool.h>
#include "stm32f1xx.h"
#define LEDPORT (GPIOC)
#define LED1 (13)
// Разрешение тактирования порта C
#define ENABLE_GPIO_CLOCK (RCC->APB2ENR |= RCC_APB2ENR_IOPCEN)
// Разрешение работы пина 13
#define GPIOMODER (GPIO_CRH_MODE13_0)
#define _MODER CRH
void msDelay(int ms)
{
while (ms-- > 0) {
volatile int x=500;
while (x-- > 0)
__asm("nop");
}
}
int main(void)
{
// Enable the clock to GPIO
ENABLE_GPIO_CLOCK;
// Set pins to be general purpose output
LEDPORT->_MODER |= GPIOMODER;
while (true) {
msDelay(500);
LEDPORT->ODR ^= (1<<LED1); // Toggle diode
}
return 0;
}