STM32F051 GPIO

Auf dieser Seite gibt es eine minimalistische Vorlage und einige Programmbeispiele zum STM32F051 (der ist zum auf dem STM32F0 Discovery board verbaut). Die Beispiele sollten sich auch leicht auf andere Controller der STM32F0 Familie übertragen lassen, es wird dann wohl das Linkerscript angepasst werden müssen (die Controller sind auch für mich noch Neuland :-)
Alle Beispiele sind zur Verwendung mit dem STM32F0-template gedacht. Die Standard-Peripherie-Library wird absichtlich nicht verwendet (dafür gibt es schon genug Beispiele und der Code wird dadurch grösser).

Beispiel 1 - Lässt die blaue LED (an Port PC8 angeschlossen) blinken

example_1.c
#include "stm32f0xx.h"

#define BLUE_LED_PIN	(1<<8)

void delay(int a)
{
	for (; a > 0; a--) {
		__asm("nop");
	}
	return;
}

int main(void)
{
	RCC->AHBENR |= RCC_AHBENR_GPIOCEN;	/* enable GPIOC periph clk */
	GPIOC->MODER |= GPIO_MODER_MODER8_0;	/* configure PC8 as output */
	GPIOC->OTYPER &= ~(GPIO_OTYPER_OT_8);	/* set push pull mode */
	GPIOC->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8;	/* maximum speed setting (even though it is unnecessary) */
	GPIOC->PUPDR &= ~(GPIO_PUPDR_PUPDR8);	/* disable pull up/down resistors */
	while (1) {
		GPIOC->BSRR = BLUE_LED_PIN;	/* set */
		delay(250000);
		GPIOC->BRR = BLUE_LED_PIN;	/* clear */
		delay(250000);
	}
}