summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2021-09-26 12:50:49 +0200
committerxengineering <me@xengineering.eu>2021-09-26 14:07:59 +0200
commit5d17a976070be9d66349da0ddd28361884f3461d (patch)
treeef3e2c0078863aa651008e4f2f9eb4f846bfcc50
parent7211bd49452e67e0b53ea06ca474f4e54af991ae (diff)
downloadledcontrol-5d17a976070be9d66349da0ddd28361884f3461d.tar
ledcontrol-5d17a976070be9d66349da0ddd28361884f3461d.tar.zst
ledcontrol-5d17a976070be9d66349da0ddd28361884f3461d.zip
Link against libopencm3
-rw-r--r--Makefile23
-rw-r--r--README.md5
-rw-r--r--ld/stm32f103c8t6.ld (renamed from ld/stm32.ld)0
-rw-r--r--src/main.c47
-rw-r--r--src/test_program.c8
5 files changed, 69 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 4ef61dd..0b7e9c0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,23 @@
-.PHONY: all clean
+OBJS = main.o startup.o
+
+# tools
+PREFIX ?= arm-none-eabi
+CC = $(PREFIX)-gcc
+LD = $(PREFIX)-gcc
+OBJCOPY = $(PREFIX)-objcopy
-all:
+all: deps/libopencm3/lib/libopencm3_stm32f1.a
mkdir build
- arm-none-eabi-gcc -O0 -c -g -mcpu=cortex-m3 -mthumb -o build/test_program.o src/test_program.c
- arm-none-eabi-gcc -O0 -c -g -mcpu=cortex-m3 -mthumb -o build/startup.o src/startup.c
- arm-none-eabi-ld -Tld/stm32.ld -o build/test_program.elf build/startup.o build/test_program.o
- arm-none-eabi-objcopy -O binary build/test_program.elf build/test_program.bin
+ $(CC) -O0 -c -g -DSTM32F1 -Ideps/libopencm3/include -mcpu=cortex-m3 -mthumb -o build/main.o src/main.c
+ $(CC) -O0 -c -g -DSTM32F1 -Ideps/libopencm3/include -mcpu=cortex-m3 -mthumb -o build/startup.o src/startup.c
+ $(LD) --static -nostartfiles -mcpu=cortex-m3 -mthumb -msoft-float -Tld/stm32f103c8t6.ld -Ldeps/libopencm3/lib build/startup.o build/main.o -lopencm3_stm32f1 -o build/ledcontrol.elf
+ $(OBJCOPY) -O binary build/ledcontrol.elf build/ledcontrol.bin
+
+deps/libopencm3/lib/libopencm3_stm32f1.a:
+ make -C deps/libopencm3
clean:
rm -rf build
+
+.PHONY: all clean
diff --git a/README.md b/README.md
index dad276d..0306080 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,8 @@
A firmware project for the STM32F103C8T6 to control LED strips.
+## External References
+
+- Nice [Tutorial](https://jacobmossberg.se/posts/2018/08/11/run-c-program-bare-metal-on-arm-cortex-m3.html) about C programs on bare-metal ARM chips
+- Another useful [Tutorial](https://www.rhye.org/post/stm32-with-opencm3-0-compiling-and-uploading/) about STM32 programming with libopencm3
+
diff --git a/ld/stm32.ld b/ld/stm32f103c8t6.ld
index 9f74206..9f74206 100644
--- a/ld/stm32.ld
+++ b/ld/stm32f103c8t6.ld
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..7a5290f
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,47 @@
+
+
+#include <libopencm3/stm32/rcc.h>
+#include <libopencm3/stm32/gpio.h>
+
+
+#define DELAY 1000000
+
+
+void clock_init(void);
+void gpio_init(void);
+void delay(void);
+
+
+int main(void)
+{
+ clock_init();
+ gpio_init();
+
+ while(1){
+ gpio_toggle(GPIOC, GPIO13);
+ delay();
+ }
+
+ return 0;
+}
+
+
+void clock_init(void)
+{
+ rcc_periph_clock_enable(RCC_GPIOC); // for PC13 blinking
+}
+
+
+void gpio_init(void)
+{
+ gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO13);
+ gpio_set(GPIOC, GPIO13);
+}
+
+
+void delay(void)
+{
+ for (int i = 0; i < DELAY; i++) {
+ __asm__("nop");
+ }
+}
diff --git a/src/test_program.c b/src/test_program.c
deleted file mode 100644
index 80f569b..0000000
--- a/src/test_program.c
+++ /dev/null
@@ -1,8 +0,0 @@
-static const int a = 7;
-static int b = 8;
-static int sum;
-
-void main()
-{
- sum = a + b;
-}