Implement the simplest possible (working) blinking LED example application.
This is the first working example code which is tested on hardware. The LED on the Olimex STM-H103 eval board is happily blinking. We use a dummy "delay" function (basically a busy-waiting for-loop), which will only work if you use -O0 in CFLAGS (-O2, -O3, or -Os will not work as the compiler optimizes the loop away). We use some arbitrary value for stack size (2 KB) and use main() directly as the reset vector function. This will change later. Also, we do the GPIO and clock init as well as the GPIO toggling for the LED blinking fully "manually" for now, but there may be more higher-level functions for doing that at some later date.
This commit is contained in:
parent
355701525e
commit
915d5bff90
@ -26,7 +26,7 @@ CC = $(PREFIX)-gcc
|
||||
LD = $(PREFIX)-ld
|
||||
OBJCOPY = $(PREFIX)-objcopy
|
||||
OBJDUMP = $(PREFIX)-objdump
|
||||
CFLAGS = -Os -g -Wall -Wextra -I../include -fno-common \
|
||||
CFLAGS = -O0 -g -Wall -Wextra -I../include -fno-common \
|
||||
-mcpu=cortex-m3 -mthumb
|
||||
LDFLAGS = -L../lib -T$(BINARY).ld -nostartfiles
|
||||
OBJS = $(BINARY).o
|
||||
|
@ -22,6 +22,26 @@
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* TODO */
|
||||
int i;
|
||||
|
||||
/* GPIO setup: Enable GPIOC clock, set GPIO12 to 'output push-pull'. */
|
||||
RCC_APB2ENR = RCC_IOPCEN;
|
||||
GPIOC_CRH = (GPIO_CNF_OUTPUT_PUSHPULL << (((12 - 8) * 4) + 2));
|
||||
GPIOC_CRH |= (GPIO_MODE_OUTPUT_2_MHZ << ((12 - 8) * 4));
|
||||
|
||||
/* Blink the LED (PC12) on the board. */
|
||||
while (1) {
|
||||
GPIOC_BSRR = GPIO12; /* LED off */
|
||||
for (i = 0; i < 80000; i++); /* Wait (needs -O0 CFLAGS). */
|
||||
GPIOC_BRR = GPIO12; /* LED on */
|
||||
for (i = 0; i < 80000; i++); /* Wait (needs -O0 CFLAGS). */
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
u32 *vector_table[2] __attribute__ ((section(".vectors"))) = {
|
||||
(u32 *)0x20000800, /* Use 2 KB stack (0x800 bytes). */
|
||||
(u32 *)main, /* Use main() as reset vector for now. */
|
||||
};
|
||||
|
||||
|
@ -33,6 +33,7 @@ SECTIONS
|
||||
. = ORIGIN(rom);
|
||||
|
||||
.text : {
|
||||
*(.vectors) /* Vector table */
|
||||
*(.text) /* Program code */
|
||||
*(.rodata) /* Read-only data */
|
||||
} >rom
|
||||
|
Loading…
x
Reference in New Issue
Block a user