MyTetra Share
Делитесь знаниями!
Пример мигания светодиодом для BluePill STM32F103C8T6 через CMSIS
Время создания: 07.04.2022 18:56
Раздел: Компьютер - Аппаратное обеспечение - Микроконтроллеры ARM
Запись: xintrea/mytetra_syncro/master/base/1649346982xq3em237rg/text.html на raw.github.com

В данном прмере необходимо, чтобы компилятор поддерживал стандарт 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;

}


Так же в этом разделе:
 
MyTetra Share v.0.60
Яндекс индекс цитирования