mirror of
https://github.com/eddyem/stm32samples.git
synced 2026-02-28 11:54:30 +03:00
restructuring
This commit is contained in:
137
F0:F030,F042,F072/blink/Makefile
Normal file
137
F0:F030,F042,F072/blink/Makefile
Normal file
@@ -0,0 +1,137 @@
|
||||
BINARY = blink
|
||||
BOOTPORT ?= /dev/ttyUSB0
|
||||
BOOTSPEED ?= 115200
|
||||
# MCU FAMILY
|
||||
FAMILY = F0
|
||||
# MCU code
|
||||
MCU = F042x6
|
||||
DEFS = -DEBUG
|
||||
# change this linking script depending on particular MCU model,
|
||||
# for example, if you have STM32F103VBT6, you should write:
|
||||
LDSCRIPT = stm32f042k.ld
|
||||
|
||||
INDEPENDENT_HEADERS=
|
||||
|
||||
FP_FLAGS ?= -msoft-float
|
||||
ASM_FLAGS = -mthumb -mcpu=cortex-m0 -march=armv6-m -mtune=cortex-m0
|
||||
ARCH_FLAGS = $(ASM_FLAGS) $(FP_FLAGS)
|
||||
|
||||
###############################################################################
|
||||
# Executables
|
||||
PREFIX ?= /opt/bin/arm-none-eabi
|
||||
|
||||
RM := rm -f
|
||||
RMDIR := rmdir
|
||||
CC := $(PREFIX)-gcc
|
||||
LD := $(PREFIX)-gcc
|
||||
AR := $(PREFIX)-ar
|
||||
AS := $(PREFIX)-as
|
||||
OBJCOPY := $(PREFIX)-objcopy
|
||||
OBJDUMP := $(PREFIX)-objdump
|
||||
GDB := $(PREFIX)-gdb
|
||||
STFLASH := $(shell which st-flash)
|
||||
STBOOT := $(shell which stm32flash)
|
||||
|
||||
###############################################################################
|
||||
# Source files
|
||||
OBJDIR = mk
|
||||
LDSCRIPT ?= $(BINARY).ld
|
||||
SRC := $(wildcard *.c)
|
||||
OBJS := $(addprefix $(OBJDIR)/, $(SRC:%.c=%.o))
|
||||
STARTUP = $(OBJDIR)/startup.o
|
||||
OBJS += $(STARTUP)
|
||||
DEPS := $(OBJS:.o=.d)
|
||||
|
||||
INC_DIR ?= ../inc
|
||||
|
||||
INCLUDE := -I$(INC_DIR)/F0 -I$(INC_DIR)/cm
|
||||
LIB_DIR := $(INC_DIR)/ld
|
||||
|
||||
###############################################################################
|
||||
# C flags
|
||||
CFLAGS += -O2 -g -MD -D__thumb2__=1
|
||||
CFLAGS += -Wall -Werror -Wextra -Wshadow -Wimplicit-function-declaration
|
||||
CFLAGS += -Wredundant-decls $(INCLUDE)
|
||||
# -Wmissing-prototypes -Wstrict-prototypes
|
||||
CFLAGS += -fno-common -ffunction-sections -fdata-sections
|
||||
|
||||
###############################################################################
|
||||
# Linker flags
|
||||
LDFLAGS += --static -nostartfiles
|
||||
#--specs=nano.specs
|
||||
LDFLAGS += -L$(LIB_DIR)
|
||||
LDFLAGS += -T$(LDSCRIPT)
|
||||
LDFLAGS += -Wl,-Map=$(OBJDIR)/$(BINARY).map
|
||||
LDFLAGS += -Wl,--gc-sections
|
||||
|
||||
###############################################################################
|
||||
# Used libraries
|
||||
LDLIBS += -Wl,--start-group -lc -lgcc -Wl,--end-group
|
||||
LDLIBS += $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
|
||||
|
||||
DEFS += -DSTM32$(FAMILY) -DSTM32$(MCU)
|
||||
|
||||
#.SUFFIXES: .elf .bin .hex .srec .list .map .images
|
||||
#.SECONDEXPANSION:
|
||||
#.SECONDARY:
|
||||
|
||||
ELF := $(OBJDIR)/$(BINARY).elf
|
||||
LIST := $(OBJDIR)/$(BINARY).list
|
||||
BIN := $(BINARY).bin
|
||||
HEX := $(BINARY).hex
|
||||
|
||||
all: bin list
|
||||
|
||||
elf: $(ELF)
|
||||
bin: $(BIN)
|
||||
hex: $(HEX)
|
||||
list: $(LIST)
|
||||
|
||||
ifneq ($(MAKECMDGOALS),clean)
|
||||
-include $(DEPS)
|
||||
endif
|
||||
|
||||
$(OBJDIR):
|
||||
mkdir $(OBJDIR)
|
||||
|
||||
$(STARTUP): $(INC_DIR)/startup/vector.c
|
||||
$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -o $@ -c $<
|
||||
|
||||
$(OBJDIR)/%.o: %.c
|
||||
@echo " CC $<"
|
||||
$(CC) $(CFLAGS) $(DEFS) $(INCLUDE) $(ARCH_FLAGS) -o $@ -c $<
|
||||
|
||||
#$(OBJDIR)/%.d: %.c $(OBJDIR)
|
||||
# $(CC) -MM -MG $< | sed -e 's,^\([^:]*\)\.o[ ]*:,$(@D)/\1.o $(@D)/\1.d:,' >$@
|
||||
|
||||
$(BIN): $(ELF)
|
||||
@echo " OBJCOPY $(BIN)"
|
||||
$(OBJCOPY) -Obinary $(ELF) $(BIN)
|
||||
|
||||
$(HEX): $(ELF)
|
||||
@echo " OBJCOPY $(HEX)"
|
||||
$(OBJCOPY) -Oihex $(ELF) $(HEX)
|
||||
|
||||
$(LIST): $(ELF)
|
||||
@echo " OBJDUMP $(LIST)"
|
||||
$(OBJDUMP) -S $(ELF) > $(LIST)
|
||||
|
||||
$(ELF): $(OBJDIR) $(OBJS)
|
||||
@echo " LD $(ELF)"
|
||||
$(LD) $(LDFLAGS) $(ARCH_FLAGS) $(OBJS) $(LDLIBS) -o $(ELF)
|
||||
|
||||
clean:
|
||||
@echo " CLEAN"
|
||||
$(RM) $(OBJS) $(DEPS) $(ELF) $(HEX) $(LIST) $(OBJDIR)/*.map
|
||||
@rmdir $(OBJDIR) 2>/dev/null || true
|
||||
|
||||
|
||||
flash: $(BIN)
|
||||
@echo " FLASH $(BIN)"
|
||||
$(STFLASH) write $(BIN) 0x8000000
|
||||
|
||||
boot: $(BIN)
|
||||
@echo " LOAD $(BIN) through bootloader"
|
||||
$(STBOOT) -b$(BOOTSPEED) $(BOOTPORT) -w $(BIN)
|
||||
|
||||
.PHONY: clean flash boot
|
||||
3
F0:F030,F042,F072/blink/README
Normal file
3
F0:F030,F042,F072/blink/README
Normal file
@@ -0,0 +1,3 @@
|
||||
Toggle Green LED on STM32F042-nucleo depending on jumper @ D2 (PA12):
|
||||
- no jumper == 'SOS' in Morze
|
||||
- with jumper - blink with period of 4 seconds
|
||||
BIN
F0:F030,F042,F072/blink/blink.bin
Executable file
BIN
F0:F030,F042,F072/blink/blink.bin
Executable file
Binary file not shown.
42
F0:F030,F042,F072/blink/blink.geanypro
Normal file
42
F0:F030,F042,F072/blink/blink.geanypro
Normal file
@@ -0,0 +1,42 @@
|
||||
[editor]
|
||||
line_wrapping=true
|
||||
line_break_column=100
|
||||
auto_continue_multiline=true
|
||||
|
||||
[file_prefs]
|
||||
final_new_line=true
|
||||
ensure_convert_new_lines=true
|
||||
strip_trailing_spaces=true
|
||||
replace_tabs=true
|
||||
|
||||
[indentation]
|
||||
indent_width=4
|
||||
indent_type=0
|
||||
indent_hard_tab_width=4
|
||||
detect_indent=false
|
||||
detect_indent_width=false
|
||||
indent_mode=3
|
||||
|
||||
[project]
|
||||
name=blink
|
||||
base_path=/Big/Data/00__Electronics/STM32/src/F0_new/blink/
|
||||
description=
|
||||
|
||||
[long line marker]
|
||||
long_line_behaviour=1
|
||||
long_line_column=100
|
||||
|
||||
[files]
|
||||
current_page=8
|
||||
FILE_NAME_0=1878;C;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Fabs_mini%2Fmai_n.c;0;4
|
||||
FILE_NAME_1=596;C;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Fabs_mini%2Fmain.c;0;4
|
||||
FILE_NAME_2=5714;None;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2Ftest%2Fstm32f0-discovery-basic-template%2FDevice%2Fstartup_stm32f0xx.s;0;4
|
||||
FILE_NAME_3=379;None;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Finc%2Fld%2Fstm32f0.ld;0;4
|
||||
FILE_NAME_4=1216;None;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Finc%2Fld%2Fstm32f0.ld__;0;4
|
||||
FILE_NAME_5=2501;None;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Finc%2Fld%2Flibopencm3_stm32f0.ld;0;4
|
||||
FILE_NAME_6=0;None;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Finc%2Fstartup%2FSTM32F042x6.s;0;4
|
||||
FILE_NAME_7=910;C;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Fblink%2Fsystick_blink.c;0;4
|
||||
FILE_NAME_8=4886;None;0;EUTF-8;0;1;1;%2FBig%2FData%2F00__Electronics%2FSTM32%2Fsrc%2FF0_new%2Finc%2Fstartup%2FSTM32F042x6.s_old;0;4
|
||||
|
||||
[VTE]
|
||||
last_dir=/home/eddy
|
||||
87
F0:F030,F042,F072/blink/systick_blink.c
Normal file
87
F0:F030,F042,F072/blink/systick_blink.c
Normal file
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* systick_blink.c
|
||||
*
|
||||
* Copyright 2017 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include "stm32f0.h"
|
||||
|
||||
static volatile uint32_t blink_ctr = 0;
|
||||
|
||||
/* Called when systick fires */
|
||||
void sys_tick_handler(void){
|
||||
++blink_ctr;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up timer to fire every x milliseconds
|
||||
*/
|
||||
static void systick_setup(uint32_t xms){
|
||||
static uint32_t curms = 0;
|
||||
if(curms == xms) return;
|
||||
// 6MHz - HCLK/8 (due to HPRE=1 HCLK=SYSCLK)
|
||||
// this function also clears counter so it starts right away
|
||||
SysTick_Config(6000 * xms, 1);
|
||||
curms = xms;
|
||||
}
|
||||
|
||||
|
||||
/* set STM32 to clock by 48MHz from HSI oscillator */
|
||||
//static void clock_setup(void){
|
||||
//StartHSE(RCC_CR_CSSON | RCC_CR_HSEBYP);
|
||||
//}
|
||||
|
||||
static void gpio_setup(void){
|
||||
/* Enable clocks to the GPIO subsystems (A&B) */
|
||||
RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;
|
||||
/* Set green led (PB3) as output */
|
||||
GPIOB->MODER = GPIO_MODER_MODER3_O;
|
||||
// gpio_mode_setup(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO3);
|
||||
/* D2 - PA12 - switch blink rate (pullup input) */
|
||||
GPIOA->PUPDR = GPIO_PUPDR_PUPDR12_0;
|
||||
//gpio_mode_setup(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO12);
|
||||
}
|
||||
|
||||
static const uint32_t L[] = {125,100,125,100,125,200, 350,100,350,100,350,200, 125,100,125,100,125, 1000};
|
||||
|
||||
int main(void){
|
||||
sysreset();
|
||||
// set divider by 8
|
||||
SysTick->CTRL &= ~SysTick_CTRL_CLKSOURCE_Msk;
|
||||
//StartHSE();
|
||||
//StartHSI48();
|
||||
// clock_setup();
|
||||
gpio_setup();
|
||||
|
||||
/* 500ms ticks => 1000ms period => 1Hz blinks */
|
||||
systick_setup(100);
|
||||
/* Do nothing in main loop */
|
||||
while (1){
|
||||
if(pin_read(GPIOA, 1<<12)){
|
||||
uint32_t T = blink_ctr % 18;
|
||||
systick_setup(L[T]);
|
||||
if(T & 1) pin_clear(GPIOB, 1<<3);
|
||||
else pin_set(GPIOB, 1<<3);
|
||||
}else{
|
||||
systick_setup(2000);
|
||||
if(blink_ctr & 1) pin_clear(GPIOB, 1<<3);
|
||||
else pin_set(GPIOB, 1<<3);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user