diff --git a/.gitignore b/.gitignore
index 938c84e..eeedd05 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,6 +37,7 @@
*.hex
# Debug files
+*/Debug/
*.dSYM/
*.su
*.idb
@@ -56,4 +57,4 @@ dkms.conf
/.metadata/
# Other
-/.settings
\ No newline at end of file
+*/.settings
\ No newline at end of file
diff --git a/SerialConsoleTemplate/.settings/language.settings.xml b/SerialConsoleTemplate/.settings/language.settings.xml
deleted file mode 100644
index 22c26ba..0000000
--- a/SerialConsoleTemplate/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SerialConsoleTemplate/Debug/.gitignore b/SerialConsoleTemplate/Debug/.gitignore
deleted file mode 100644
index ffd9cbe..0000000
--- a/SerialConsoleTemplate/Debug/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/Src/
-/Startup/
-/makefile
-/objects.list
-/objects.mk
-/sources.mk
diff --git a/labW2barnestr/.settings/language.settings.xml b/labW2barnestr/.settings/language.settings.xml
deleted file mode 100644
index 907f111..0000000
--- a/labW2barnestr/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/labW2barnestr/Debug/.gitignore b/labW2barnestr/Debug/.gitignore
deleted file mode 100644
index ffd9cbe..0000000
--- a/labW2barnestr/Debug/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/Src/
-/Startup/
-/makefile
-/objects.list
-/objects.mk
-/sources.mk
diff --git a/labW3barnestr/.settings/language.settings.xml b/labW3barnestr/.settings/language.settings.xml
deleted file mode 100644
index dd1350d..0000000
--- a/labW3barnestr/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/labW3barnestr/Debug/.gitignore b/labW3barnestr/Debug/.gitignore
deleted file mode 100644
index ffd9cbe..0000000
--- a/labW3barnestr/Debug/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/Src/
-/Startup/
-/makefile
-/objects.list
-/objects.mk
-/sources.mk
diff --git a/labW4barnestr/.settings/language.settings.xml b/labW4barnestr/.settings/language.settings.xml
deleted file mode 100644
index efd9022..0000000
--- a/labW4barnestr/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/labW4barnestr/Debug/Src/subdir.mk b/labW4barnestr/Debug/Src/subdir.mk
deleted file mode 100644
index 60c5275..0000000
--- a/labW4barnestr/Debug/Src/subdir.mk
+++ /dev/null
@@ -1,36 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables
-C_SRCS += \
-../Src/delay.c \
-../Src/led.c \
-../Src/main.c \
-../Src/uart_driver.c
-
-OBJS += \
-./Src/delay.o \
-./Src/led.o \
-./Src/main.o \
-./Src/uart_driver.o
-
-C_DEPS += \
-./Src/delay.d \
-./Src/led.d \
-./Src/main.d \
-./Src/uart_driver.d
-
-
-# Each subdirectory must supply rules for building sources it contributes
-Src/%.o: ../Src/%.c Src/subdir.mk
- arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DSTM32 -DSTM32F4 -DSTM32F446RETx -DDEBUG -c -I../Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
-
-clean: clean-Src
-
-clean-Src:
- -$(RM) ./Src/delay.d ./Src/delay.o ./Src/led.d ./Src/led.o ./Src/main.d ./Src/main.o ./Src/uart_driver.d ./Src/uart_driver.o
-
-.PHONY: clean-Src
-
diff --git a/labW4barnestr/Debug/Startup/subdir.mk b/labW4barnestr/Debug/Startup/subdir.mk
deleted file mode 100644
index ed2bf5d..0000000
--- a/labW4barnestr/Debug/Startup/subdir.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables
-S_SRCS += \
-../Startup/startup_stm32f446retx.s
-
-OBJS += \
-./Startup/startup_stm32f446retx.o
-
-S_DEPS += \
-./Startup/startup_stm32f446retx.d
-
-
-# Each subdirectory must supply rules for building sources it contributes
-Startup/%.o: ../Startup/%.s Startup/subdir.mk
- arm-none-eabi-gcc -mcpu=cortex-m4 -g3 -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<"
-
-clean: clean-Startup
-
-clean-Startup:
- -$(RM) ./Startup/startup_stm32f446retx.d ./Startup/startup_stm32f446retx.o
-
-.PHONY: clean-Startup
-
diff --git a/labW4barnestr/Debug/makefile b/labW4barnestr/Debug/makefile
deleted file mode 100644
index 0c0d7d3..0000000
--- a/labW4barnestr/Debug/makefile
+++ /dev/null
@@ -1,98 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
--include ../makefile.init
-
-RM := rm -rf
-
-# All of the sources participating in the build are defined here
--include sources.mk
--include Startup/subdir.mk
--include Src/subdir.mk
--include objects.mk
-
-ifneq ($(MAKECMDGOALS),clean)
-ifneq ($(strip $(S_DEPS)),)
--include $(S_DEPS)
-endif
-ifneq ($(strip $(S_UPPER_DEPS)),)
--include $(S_UPPER_DEPS)
-endif
-ifneq ($(strip $(C_DEPS)),)
--include $(C_DEPS)
-endif
-endif
-
--include ../makefile.defs
-
-OPTIONAL_TOOL_DEPS := \
-$(wildcard ../makefile.defs) \
-$(wildcard ../makefile.init) \
-$(wildcard ../makefile.targets) \
-
-
-BUILD_ARTIFACT_NAME := labW4barnestr
-BUILD_ARTIFACT_EXTENSION := elf
-BUILD_ARTIFACT_PREFIX :=
-BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),)
-
-# Add inputs and outputs from these tool invocations to the build variables
-EXECUTABLES += \
-labW4barnestr.elf \
-
-SIZE_OUTPUT += \
-default.size.stdout \
-
-OBJDUMP_LIST += \
-labW4barnestr.list \
-
-OBJCOPY_BIN += \
-labW4barnestr.bin \
-
-
-# All Target
-all: main-build
-
-# Main-build Target
-main-build: labW4barnestr.elf secondary-outputs
-
-# Tool invocations
-labW4barnestr.elf: $(OBJS) $(USER_OBJS) C:\Users\Trevor\Documents\CE2812-Workspace\labW4barnestr\STM32F446RETX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-gcc -o "labW4barnestr.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"C:\Users\Trevor\Documents\CE2812-Workspace\labW4barnestr\STM32F446RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="labW4barnestr.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
- @echo 'Finished building target: $@'
- @echo ' '
-
-default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-size $(EXECUTABLES)
- @echo 'Finished building: $@'
- @echo ' '
-
-labW4barnestr.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-objdump -h -S $(EXECUTABLES) > "labW4barnestr.list"
- @echo 'Finished building: $@'
- @echo ' '
-
-labW4barnestr.bin: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-objcopy -O binary $(EXECUTABLES) "labW4barnestr.bin"
- @echo 'Finished building: $@'
- @echo ' '
-
-# Other Targets
-clean:
- -$(RM) default.size.stdout labW4barnestr.bin labW4barnestr.elf labW4barnestr.list
- -@echo ' '
-
-secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) $(OBJCOPY_BIN)
-
-fail-specified-linker-script-missing:
- @echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.'
- @exit 2
-
-warn-no-linker-script-specified:
- @echo 'Warning: No linker script specified. Check the linker settings in the build configuration.'
-
-.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified
-
--include ../makefile.targets
diff --git a/labW4barnestr/Debug/objects.mk b/labW4barnestr/Debug/objects.mk
deleted file mode 100644
index e12976d..0000000
--- a/labW4barnestr/Debug/objects.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-USER_OBJS :=
-
-LIBS :=
-
diff --git a/labW4barnestr/Debug/sources.mk b/labW4barnestr/Debug/sources.mk
deleted file mode 100644
index 0dff210..0000000
--- a/labW4barnestr/Debug/sources.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-ELF_SRCS :=
-OBJ_SRCS :=
-S_SRCS :=
-C_SRCS :=
-S_UPPER_SRCS :=
-O_SRCS :=
-SIZE_OUTPUT :=
-OBJDUMP_LIST :=
-EXECUTABLES :=
-OBJS :=
-S_DEPS :=
-S_UPPER_DEPS :=
-C_DEPS :=
-OBJCOPY_BIN :=
-
-# Every subdirectory with source files must be described here
-SUBDIRS := \
-Src \
-Startup \
-
diff --git a/labW5barnestr/.cproject b/labW5barnestr/.cproject
index c8612fd..0a71ac2 100644
--- a/labW5barnestr/.cproject
+++ b/labW5barnestr/.cproject
@@ -10,54 +10,55 @@
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
+
+
-
-
-
+
+
-
+
-
+
@@ -87,53 +88,54 @@
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
+
+
-
-
-
+
+
-
+
-
+
@@ -169,4 +171,12 @@
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/labW5barnestr/.settings/language.settings.xml b/labW5barnestr/.settings/language.settings.xml
deleted file mode 100644
index 9aad8aa..0000000
--- a/labW5barnestr/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/labW5barnestr/Debug/Src/subdir.mk b/labW5barnestr/Debug/Src/subdir.mk
deleted file mode 100644
index f59d668..0000000
--- a/labW5barnestr/Debug/Src/subdir.mk
+++ /dev/null
@@ -1,42 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables
-C_SRCS += \
-../Src/delay.c \
-../Src/led.c \
-../Src/main.c \
-../Src/memory.c \
-../Src/piezoSpeaker.c \
-../Src/uart_driver.c
-
-OBJS += \
-./Src/delay.o \
-./Src/led.o \
-./Src/main.o \
-./Src/memory.o \
-./Src/piezoSpeaker.o \
-./Src/uart_driver.o
-
-C_DEPS += \
-./Src/delay.d \
-./Src/led.d \
-./Src/main.d \
-./Src/memory.d \
-./Src/piezoSpeaker.d \
-./Src/uart_driver.d
-
-
-# Each subdirectory must supply rules for building sources it contributes
-Src/%.o: ../Src/%.c Src/subdir.mk
- arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DSTM32 -DSTM32F4 -DSTM32F446RETx -DDEBUG -c -I../Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
-
-clean: clean-Src
-
-clean-Src:
- -$(RM) ./Src/delay.d ./Src/delay.o ./Src/led.d ./Src/led.o ./Src/main.d ./Src/main.o ./Src/memory.d ./Src/memory.o ./Src/piezoSpeaker.d ./Src/piezoSpeaker.o ./Src/uart_driver.d ./Src/uart_driver.o
-
-.PHONY: clean-Src
-
diff --git a/labW5barnestr/Debug/Startup/subdir.mk b/labW5barnestr/Debug/Startup/subdir.mk
deleted file mode 100644
index ed2bf5d..0000000
--- a/labW5barnestr/Debug/Startup/subdir.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables
-S_SRCS += \
-../Startup/startup_stm32f446retx.s
-
-OBJS += \
-./Startup/startup_stm32f446retx.o
-
-S_DEPS += \
-./Startup/startup_stm32f446retx.d
-
-
-# Each subdirectory must supply rules for building sources it contributes
-Startup/%.o: ../Startup/%.s Startup/subdir.mk
- arm-none-eabi-gcc -mcpu=cortex-m4 -g3 -c -x assembler-with-cpp -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@" "$<"
-
-clean: clean-Startup
-
-clean-Startup:
- -$(RM) ./Startup/startup_stm32f446retx.d ./Startup/startup_stm32f446retx.o
-
-.PHONY: clean-Startup
-
diff --git a/labW5barnestr/Debug/makefile b/labW5barnestr/Debug/makefile
deleted file mode 100644
index e670f6e..0000000
--- a/labW5barnestr/Debug/makefile
+++ /dev/null
@@ -1,98 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
--include ../makefile.init
-
-RM := rm -rf
-
-# All of the sources participating in the build are defined here
--include sources.mk
--include Startup/subdir.mk
--include Src/subdir.mk
--include objects.mk
-
-ifneq ($(MAKECMDGOALS),clean)
-ifneq ($(strip $(S_DEPS)),)
--include $(S_DEPS)
-endif
-ifneq ($(strip $(S_UPPER_DEPS)),)
--include $(S_UPPER_DEPS)
-endif
-ifneq ($(strip $(C_DEPS)),)
--include $(C_DEPS)
-endif
-endif
-
--include ../makefile.defs
-
-OPTIONAL_TOOL_DEPS := \
-$(wildcard ../makefile.defs) \
-$(wildcard ../makefile.init) \
-$(wildcard ../makefile.targets) \
-
-
-BUILD_ARTIFACT_NAME := labW5barnestr
-BUILD_ARTIFACT_EXTENSION := elf
-BUILD_ARTIFACT_PREFIX :=
-BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),)
-
-# Add inputs and outputs from these tool invocations to the build variables
-EXECUTABLES += \
-labW5barnestr.elf \
-
-SIZE_OUTPUT += \
-default.size.stdout \
-
-OBJDUMP_LIST += \
-labW5barnestr.list \
-
-OBJCOPY_BIN += \
-labW5barnestr.bin \
-
-
-# All Target
-all: main-build
-
-# Main-build Target
-main-build: labW5barnestr.elf secondary-outputs
-
-# Tool invocations
-labW5barnestr.elf: $(OBJS) $(USER_OBJS) C:\Users\Trevor\Documents\CE2812-Workspace\labW5barnestr\STM32F446RETX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-gcc -o "labW5barnestr.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"C:\Users\Trevor\Documents\CE2812-Workspace\labW5barnestr\STM32F446RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="labW5barnestr.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
- @echo 'Finished building target: $@'
- @echo ' '
-
-default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-size $(EXECUTABLES)
- @echo 'Finished building: $@'
- @echo ' '
-
-labW5barnestr.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-objdump -h -S $(EXECUTABLES) > "labW5barnestr.list"
- @echo 'Finished building: $@'
- @echo ' '
-
-labW5barnestr.bin: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
- arm-none-eabi-objcopy -O binary $(EXECUTABLES) "labW5barnestr.bin"
- @echo 'Finished building: $@'
- @echo ' '
-
-# Other Targets
-clean:
- -$(RM) default.size.stdout labW5barnestr.bin labW5barnestr.elf labW5barnestr.list
- -@echo ' '
-
-secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) $(OBJCOPY_BIN)
-
-fail-specified-linker-script-missing:
- @echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.'
- @exit 2
-
-warn-no-linker-script-specified:
- @echo 'Warning: No linker script specified. Check the linker settings in the build configuration.'
-
-.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified
-
--include ../makefile.targets
diff --git a/labW5barnestr/Debug/objects.mk b/labW5barnestr/Debug/objects.mk
deleted file mode 100644
index e12976d..0000000
--- a/labW5barnestr/Debug/objects.mk
+++ /dev/null
@@ -1,9 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-USER_OBJS :=
-
-LIBS :=
-
diff --git a/labW5barnestr/Debug/sources.mk b/labW5barnestr/Debug/sources.mk
deleted file mode 100644
index 0dff210..0000000
--- a/labW5barnestr/Debug/sources.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-# Toolchain: GNU Tools for STM32 (9-2020-q2-update)
-################################################################################
-
-ELF_SRCS :=
-OBJ_SRCS :=
-S_SRCS :=
-C_SRCS :=
-S_UPPER_SRCS :=
-O_SRCS :=
-SIZE_OUTPUT :=
-OBJDUMP_LIST :=
-EXECUTABLES :=
-OBJS :=
-S_DEPS :=
-S_UPPER_DEPS :=
-C_DEPS :=
-OBJCOPY_BIN :=
-
-# Every subdirectory with source files must be described here
-SUBDIRS := \
-Src \
-Startup \
-
diff --git a/labW5barnestr/Inc/piezoSpeaker.h b/labW5barnestr/Inc/piezoSpeaker.h
index a9fa927..e1adb99 100644
--- a/labW5barnestr/Inc/piezoSpeaker.h
+++ b/labW5barnestr/Inc/piezoSpeaker.h
@@ -53,7 +53,7 @@ void piezo_init();
void play_note(Note noteToPlay);
// void play_note(double playFrequency, double playDuration);
-void play_song(Note *song);
+void play_song(Note *songToPlay);
// Note Frequency Symbols
// Rest technically = 0
@@ -161,7 +161,7 @@ void play_song(Note *song);
// Ending "termination" value indicating end of a song
#define T 5000.00
// Tempo value set at 120 beats per min
-#define BPM 120
+#define BPM 240
#define H 2*Q
#define Q 60000/BPM
#define E Q/2
diff --git a/labW5barnestr/Src/main.c b/labW5barnestr/Src/main.c
index 55c884c..bc0c22b 100644
--- a/labW5barnestr/Src/main.c
+++ b/labW5barnestr/Src/main.c
@@ -33,7 +33,7 @@ Note songSMFF[66]= { {G3, S/3}, {Ab3,S/3}, {A3, S/3}, {Bb3,S/3}, {B3,S/3},
{Bb5, W}, {B5, Q}, {B5, Q}, {B5, Q}, {C6, W}, {T, Q} };
// Imperial March
-Note songIM[138] = { {A3, Q}, {r, Q}, {A3, Q}, {r, Q}, {A3, Q}, {r, Q},
+Note songIM[138] = { {A3, Q}, {A3, Q}, {A3, Q}, {r, Q},
{F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, Q}, {r, Q},
{F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H},
{E4, Q}, {r, Q}, {E4, Q}, {r, Q}, {E4, Q}, {r, Q},
@@ -76,47 +76,47 @@ int main(void) {
init_usart2(57600, F_CPU);
piezo_init();
led_init();
- char line[50];
- char command[10];
- int address;
- int data;
- int length;
- int songSelection;
+// char line[50];
+// char command[10];
+// int address;
+// int data;
+// int length;
+// int songSelection;
// play_note(261.63, 10000.00);
- for(;;) {
- // Get command from user
- fgets(line, 100, stdin);
- // Parse only the command for strcmp
- sscanf(line, "%s", command);
- if (!strcmp(command, "help")) {
- printHelp();
- } else if (!strcmp(command, "songs")) {
- songInfo();
- } else if (!strcmp(command, "rmw")) {
- sscanf(line, "%s %X", command, &address);
- readMem(address);
- } else if (!strcmp(command, "wmw")) {
- sscanf(line, "%s %X %u", command, &address, &data);
- writeMem(address, data);
- } else if (!strcmp(command, "dm")) {
- sscanf(line, "%s %X %u", command, &address, &length);
- dumpMem(address, length);
- } else if (!strcmp(command, "ps")) {
- sscanf(line, "%s %u", command, &songSelection);
- switch(songSelection) {
- case 1:
- printf("Playing Imperial March\n\r");
+// for(;;) {
+// // Get command from user
+// fgets(line, 100, stdin);
+// // Parse only the command for strcmp
+// sscanf(line, "%s", command);
+// if (!strcmp(command, "help")) {
+// printHelp();
+// } else if (!strcmp(command, "songs")) {
+// songInfo();
+// } else if (!strcmp(command, "rmw")) {
+// sscanf(line, "%s %X", command, &address);
+// readMem(address);
+// } else if (!strcmp(command, "wmw")) {
+// sscanf(line, "%s %X %u", command, &address, &data);
+// writeMem(address, data);
+// } else if (!strcmp(command, "dm")) {
+// sscanf(line, "%s %X %u", command, &address, &length);
+// dumpMem(address, length);
+// } else if (!strcmp(command, "ps")) {
+// sscanf(line, "%s %u", command, &songSelection);
+// switch(songSelection) {
+// case 1:
+// printf("Playing Imperial March\n\r");
play_song(&songIM[0]);
- break;
- case 2:
- printf("Playing Super Mario Bros Flagpole Fanfare\n\r");
- play_song(&songSMFF[0]);
- break;
- default:
- break;
- }
- } else {
- printf("Invalid input, type 'help' for instructions\n\r");
- }
- }
+// break;
+// case 2:
+// printf("Playing Super Mario Bros Flagpole Fanfare\n\r");
+// play_song(&songSMFF[0]);
+// break;
+// default:
+// break;
+// }
+// } else {
+// printf("Invalid input, type 'help' for instructions\n\r");
+// }
+// }
}
diff --git a/labW5barnestr/Src/piezoSpeaker.c b/labW5barnestr/Src/piezoSpeaker.c
index b7c4317..edbb8f9 100644
--- a/labW5barnestr/Src/piezoSpeaker.c
+++ b/labW5barnestr/Src/piezoSpeaker.c
@@ -67,11 +67,12 @@ void play_note(Note noteToPlay) {
*TIM3_CR1 &= ~1;
}
-
-void play_song(Note *song){
+void play_song(Note *songToPlay){
int i = 0;
- while(song[i].noteFrequency != T){
- play_note(song[i]);
+ // double freq = songToPlay[i].noteFrequency;
+ // Note newNote = {songToPlay[i].noteFrequency, songToPlay[i].noteDuration };
+ while(songToPlay[i].noteFrequency != T) {
+ play_note(songToPlay[i]);
i++;
}
}
diff --git a/labW6barnestr/.cproject b/labW6barnestr/.cproject
new file mode 100644
index 0000000..ad14e0f
--- /dev/null
+++ b/labW6barnestr/.cproject
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/labW6barnestr/.project b/labW6barnestr/.project
new file mode 100644
index 0000000..1a16a90
--- /dev/null
+++ b/labW6barnestr/.project
@@ -0,0 +1,31 @@
+
+
+ labW6barnestr
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ com.st.stm32cube.ide.mcu.MCUProjectNature
+ org.eclipse.cdt.core.cnature
+ com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature
+ com.st.stm32cube.ide.mcu.MCUManagedMakefileProjectNature
+ com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature
+ com.st.stm32cube.ide.mcu.MCURootProjectNature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/labW6barnestr/Inc/delay.h b/labW6barnestr/Inc/delay.h
new file mode 100644
index 0000000..fc2a61b
--- /dev/null
+++ b/labW6barnestr/Inc/delay.h
@@ -0,0 +1,37 @@
+/*
+ * delay.h
+ *
+ * Created on: Dec 10, 2021
+ * Author: Trevor Barnes
+ */
+
+//include guards
+#ifndef DELAY_H_
+#define DELAY_H_
+
+#include
+
+#define STK_CTRL (volatile uint32_t*) 0xE000E010
+#define STK_LOAD (volatile uint32_t*) 0xE000E014
+#define STK_VAL (volatile uint32_t*) 0xE000E018
+
+#define EN 1
+#define TICKINT (1<<1)
+#define CLKSOURCE (1<<2)
+#define COUNTFLAG (1<<16)
+
+/*
+ * delay_1ms
+ * Busy wait for n ms
+ *
+ * For n iterations
+ * load number of cycles for 1 ms
+ * set one to enable and clock source
+ *
+ * wait for countflag to be set
+ */
+void delay_1ms(uint32_t n);
+
+
+
+#endif /* DELAY_H_ */
diff --git a/labW6barnestr/Inc/led.h b/labW6barnestr/Inc/led.h
new file mode 100644
index 0000000..e927468
--- /dev/null
+++ b/labW6barnestr/Inc/led.h
@@ -0,0 +1,101 @@
+/*
+ * led.h
+ *
+ * Created on: Dec 10, 2021
+ * Author: Trevor Barnes
+ */
+
+#ifndef LED_H_
+#define LED_H_
+
+#include
+
+#define RCC_AHB1ENR (volatile uint32_t*) 0x40023830
+#define GPIOBEN 1
+#define GPIOB_MODER (volatile uint32_t*) 0x40020400
+#define GPIOB_PUPDR (volatile uint32_t*) 0x4002040C
+#define GPIOB_IDR (volatile uint32_t*) 0x40020410
+#define GPIOB_ODR (volatile uint32_t*) 0x40020414
+#define GPIOB_BSRR (volatile uint32_t*) 0x40020418
+
+#define ALL_LEDS (0b11110111111<<5)
+
+/*
+ * led_init()
+ * This function should:
+ * 1. Enable the GPIOB in RCC_AHB1ENR
+ * 2. Turn on to set LED0 - LED9 to output mode ("01")
+ */
+void led_init();
+
+/*
+ * led_allOn()
+ * 1. Turn on all leds (hint use ODR or BSRR)
+ * Note you should not effect other pins on PortB
+ */
+void led_allOn();
+
+/*
+ * led_allOff()
+ * 1. Turn off all leds (hint use ODR or BSRR)
+ * Note you should not effect other pins on PortB
+ */
+void led_allOff();
+
+/*
+ * led_on()
+ * Args: 0-9 to turn on specific led
+ * print error message is arg is out of range
+ */
+void led_on(uint8_t ledIndex);
+
+/*
+ * led_off()
+ * Args: 0-9 to turn off specific led
+ * print error message is arg is out of range
+ */
+void led_off(uint8_t ledIndex);
+
+
+/*
+ * led_scan()
+ * Scan the light across and back at the current speed
+ */
+void led_scan();
+
+/*
+ * led_flash()
+ * flash all of the lights 10 times at the current speed
+ */
+void led_flash();
+
+/*
+ * led_setSpeed (uint8_t speed)
+ * arg: speed (0 slow - 9 fast)
+ * Args out of range should print error to console
+ */
+void led_setSpeed(uint8_t speed);
+
+/*
+ * led_incSpeed()
+ * increases the speed by one
+ * if maxed out leaves the speed at the max value
+ */
+void led_incSpeed();
+
+/*
+ * led_decSpeed()
+ * decreases the speed by one
+ * if at zero should stay at zero
+ */
+void led_decSpeed();
+
+/*
+ * getCurrentSpeed
+ * returns the current speed
+ */
+uint8_t getCurrentSpeed();
+
+
+
+#endif
diff --git a/labW6barnestr/Inc/memory.h b/labW6barnestr/Inc/memory.h
new file mode 100644
index 0000000..f0a4a27
--- /dev/null
+++ b/labW6barnestr/Inc/memory.h
@@ -0,0 +1,35 @@
+/**
+ * @file memory.h
+ * @author Trevor Barnes
+ * @brief
+ * @version 0.1
+ * @date 2022-01-19
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+
+//include guards
+#ifndef MEMORY_H_
+#define MEMORY_H_
+
+#include
+#include "uart_driver.h"
+
+void initMemConsole();
+
+/**
+ * Reads and prints the memory value at address provided: "addr"
+ */
+void readMem(uint32_t addr);
+/**
+ * Writes the provided "data" value as an unsigned 32-bit word at the provided address: "addr"
+ */
+void writeMem(uint32_t addr, uint32_t data);
+/**
+ * Prints out formatted, hexadecimal memory values in "byte-sized" chunks starting at the provided
+ * memory address: "addr". The length of the memory dump is provided by "length".
+ */
+void dumpMem(uint32_t addr, int length);
+
+#endif /* MEMORY_H_ */
diff --git a/labW6barnestr/Inc/piezoSpeaker.h b/labW6barnestr/Inc/piezoSpeaker.h
new file mode 100644
index 0000000..34c003b
--- /dev/null
+++ b/labW6barnestr/Inc/piezoSpeaker.h
@@ -0,0 +1,171 @@
+/**
+ * @file piezoSpeaker.h
+ * @author Trevor Barnes
+ * @brief
+ * @version 0.1
+ * @date 2022-01-19
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+
+#ifndef PIEZOSPEAKER_H_
+#define PIEZOSPEAKER_H_
+
+// RCC
+#define RCC_AHB1ENR (volatile uint32_t*) 0x40023830
+#define RCC_APB1ENR (volatile uint32_t*) 0x40023840
+
+// GPIOB
+#define GPIOB_MODER (volatile uint32_t*) 0x40020400
+#define GPIOBEN 1
+#define GPIOB_AFRL (volatile uint32_t*) 0x40020420
+#define AFRL_TIM3_CH1_EN 17
+
+// Timer 3
+#define TIM3_EN 1
+#define TIM3_CCMR1 (volatile uint32_t*) 0x40000418
+#define OC1PE 3
+#define OC1M_PWM2 0b1110000
+#define TIM3_CCER (volatile uint32_t*) 0x40000420
+#define CCER_CC1E 1
+#define TIM3_EGR (volatile uint32_t*) 0x40000414
+#define EGR_UG 1
+#define TIM3_PSC (volatile uint32_t*) 0x40000428
+#define TIM3_ARR (volatile uint32_t*) 0x4000042C
+#define TIM3_CCR1 (volatile uint32_t*) 0x40000434
+#define TIM3_CR1 (volatile uint32_t*) 0x40000400
+#define CR_ARPE_EN 7
+#define CR_CEN 1
+
+#define PB4_AF_V 0b10
+#define PB4_AF_P 9
+
+#define mil 1000000
+
+typedef struct{
+ double noteFrequency;
+ double noteDuration;
+} Note;
+
+void piezo_init();
+
+int play_note(Note noteToPlay);
+// void play_note(double playFrequency, double playDuration);
+
+void play_song(Note *song);
+
+// Note Frequency Symbols
+// Rest technically = 0
+#define r 0
+#define C0 16.35
+#define Db0 17.32
+#define D0 18.35
+#define Eb0 19.45
+#define E0 20.60
+#define F0 21.83
+#define Gb0 23.12
+#define G0 24.50
+#define Ab0 25.96
+#define A0 27.50
+#define Bb0 29.14
+#define B0 30.87
+#define C1 32.70
+#define Db1 34.65
+#define D1 36.71
+#define Eb1 38.89
+#define E1 41.20
+#define F1 43.65
+#define Gb1 46.25
+#define G1 49.00
+#define Ab1 51.91
+#define A1 55.00
+#define Bb1 58.27
+#define B1 61.74
+#define C2 65.41
+#define Db2 69.30
+#define D2 73.42
+#define Eb2 77.78
+#define E2 82.41
+#define F2 87.31
+#define Gb2 92.50
+#define G2 98.00
+#define Ab2 103.83
+#define A2 110.00
+#define Bb2 116.54
+#define B2 123.47
+#define C3 130.81
+#define Db3 138.59
+#define D3 146.83
+#define Eb3 155.56
+#define E3 164.81
+#define F3 174.61
+#define Gb3 185.00
+#define G3 196.00
+#define Ab3 207.65
+#define A3 220.00
+#define Bb3 233.08
+#define B3 246.94
+#define C4 261.63
+#define Db4 277.18
+#define D4 293.66
+#define Eb4 311.13
+#define E4 329.63
+#define F4 349.23
+#define Gb4 369.99
+#define G4 392.00
+#define Ab4 415.30
+#define A4 440.00
+#define Bb4 466.16
+#define B4 493.88
+#define C5 523.25
+#define Db5 554.37
+#define D5 587.33
+#define Eb5 622.25
+#define E5 659.26
+#define F5 698.46
+#define Gb5 739.99
+#define G5 783.99
+#define Ab5 830.61
+#define A5 880.00
+#define Bb5 932.33
+#define B5 987.77
+#define C6 1046.50
+#define Db6 1108.73
+#define D6 1174.66
+#define Eb6 1244.51
+#define E6 1318.51
+#define F6 1396.91
+#define Gb6 1479.98
+#define G6 1567.98
+#define Ab6 1661.22
+#define A6 1760.00
+#define Bb6 1864.66
+#define B6 1975.53
+#define C7 2093.00
+#define Db7 2217.46
+#define D7 2349.32
+#define Eb7 2489.02
+#define E7 2637.02
+#define F7 2793.83
+#define Gb7 2959.96
+#define G7 3135.96
+#define Ab7 3322.44
+#define A7 3520.01
+#define Bb7 3729.31
+#define B7 3951.07
+#define C8 4186.01
+#define Db8 4434.92
+#define D8 4698.64
+#define Eb8 4978.03
+// Ending "termination" value indicating end of a song
+#define T 5000.00
+// Tempo value set at 120 beats per min
+#define BPM 120
+#define H 2*Q
+#define Q 60000/BPM
+#define E Q/2
+#define S Q/4
+#define W 4*Q
+
+#endif
diff --git a/labW6barnestr/Inc/uart_driver.h b/labW6barnestr/Inc/uart_driver.h
new file mode 100644
index 0000000..a1d6427
--- /dev/null
+++ b/labW6barnestr/Inc/uart_driver.h
@@ -0,0 +1,49 @@
+/*
+ * uart_driver.h
+ *
+ * Created on: Nov 8, 2016
+ * Author: barnekow
+ */
+
+#ifndef UART_DRIVER_H_
+#define UART_DRIVER_H_
+
+#include
+
+// RCC registers
+#define RCC_APB1ENR (volatile uint32_t*) 0x40023840
+#define RCC_AHB1ENR (volatile uint32_t*) 0x40023830
+
+#define GPIOAEN 0 // GPIOA Enable is bit 0 in RCC_APB1LPENR
+#define USART2EN 17 // USART2 enable is bit 17 in RCC_AHB1LPENR
+
+// GPIOA registers
+#define GPIOA_MODER (volatile uint32_t*) 0x40020000
+#define GPIOA_AFRL (volatile uint32_t*) 0x40020020
+#define USART_SR (volatile uint32_t*) 0x40004400
+#define USART_DR (volatile uint32_t*) 0x40004404
+#define USART_BRR (volatile uint32_t*) 0x40004408
+#define USART_CR1 (volatile uint32_t*) 0x4000440c
+#define USART_CR2 (volatile uint32_t*) 0x40004410
+#define USART_CR3 (volatile uint32_t*) 0x40004414
+
+// CR1 bits
+#define UE 13 //UART enable
+#define TE 3 // Transmitter enable
+#define RE 2 // Receiver enable
+
+// Status register bits
+#define TXE 7 // Transmit register empty
+#define RXNE 5 // Receive register is not empty..char received
+
+// Function prototypes
+extern void init_usart2(uint32_t baud, uint32_t sysclk);
+extern char usart2_getch();
+extern void usart2_putch(char c);
+
+// syscalls overrides
+int _read(int file, char *ptr, int len);
+int _write(int file, char *ptr, int len);
+
+
+#endif /* UART_DRIVER_H_ */
diff --git a/labW6barnestr/STM32F446RETX_FLASH.ld b/labW6barnestr/STM32F446RETX_FLASH.ld
new file mode 100644
index 0000000..db39937
--- /dev/null
+++ b/labW6barnestr/STM32F446RETX_FLASH.ld
@@ -0,0 +1,185 @@
+/*
+******************************************************************************
+**
+** @file : LinkerScript.ld
+**
+** @author : Auto-generated by STM32CubeIDE
+**
+** @brief : Linker script for STM32F446RETx Device from STM32F4 series
+** 512Kbytes FLASH
+** 128Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed as is, without any warranty
+** of any kind.
+**
+******************************************************************************
+** @attention
+**
+** Copyright (c) 2022 STMicroelectronics.
+** All rights reserved.
+**
+** This software is licensed under terms that can be found in the LICENSE file
+** in the root directory of this software component.
+** If no LICENSE file comes with this software, it is provided AS-IS.
+**
+******************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
+
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Memories definition */
+MEMORY
+{
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
+ FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
+}
+
+/* Sections */
+SECTIONS
+{
+ /* The startup code into "FLASH" Rom type memory */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data into "FLASH" Rom type memory */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >FLASH
+
+ /* Constant data into "FLASH" Rom type memory */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : {
+ . = ALIGN(4);
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM : {
+ . = ALIGN(4);
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ . = ALIGN(4);
+ } >FLASH
+
+ .preinit_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ .init_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ .fini_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ /* Used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections into "RAM" Ram type memory */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(.RamFunc) /* .RamFunc sections */
+ *(.RamFunc*) /* .RamFunc* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+
+ } >RAM AT> FLASH
+
+ /* Uninitialized data section into "RAM" Ram type memory */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+ /* Remove information from the compiler libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/labW6barnestr/STM32F446RETX_RAM.ld b/labW6barnestr/STM32F446RETX_RAM.ld
new file mode 100644
index 0000000..a3ed812
--- /dev/null
+++ b/labW6barnestr/STM32F446RETX_RAM.ld
@@ -0,0 +1,185 @@
+/*
+******************************************************************************
+**
+** @file : LinkerScript.ld (debug in RAM dedicated)
+**
+** @author : Auto-generated by STM32CubeIDE
+**
+** @brief : Linker script for STM32F446RETx Device from STM32F4 series
+** 512Kbytes FLASH
+** 128Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed as is, without any warranty
+** of any kind.
+**
+******************************************************************************
+** @attention
+**
+** Copyright (c) 2022 STMicroelectronics.
+** All rights reserved.
+**
+** This software is licensed under terms that can be found in the LICENSE file
+** in the root directory of this software component.
+** If no LICENSE file comes with this software, it is provided AS-IS.
+**
+******************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
+
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Memories definition */
+MEMORY
+{
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
+ FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
+}
+
+/* Sections */
+SECTIONS
+{
+ /* The startup code into "RAM" Ram type memory */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >RAM
+
+ /* The program code and other data into "RAM" Ram type memory */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+ *(.RamFunc) /* .RamFunc sections */
+ *(.RamFunc*) /* .RamFunc* sections */
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >RAM
+
+ /* Constant data into "RAM" Ram type memory */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >RAM
+
+ .ARM.extab : {
+ . = ALIGN(4);
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ . = ALIGN(4);
+ } >RAM
+
+ .ARM : {
+ . = ALIGN(4);
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ . = ALIGN(4);
+ } >RAM
+
+ .preinit_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ . = ALIGN(4);
+ } >RAM
+
+ .init_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ . = ALIGN(4);
+ } >RAM
+
+ .fini_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ . = ALIGN(4);
+ } >RAM
+
+ /* Used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections into "RAM" Ram type memory */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+
+ } >RAM
+
+ /* Uninitialized data section into "RAM" Ram type memory */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+ /* Remove information from the compiler libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/labW6barnestr/Src/delay.c b/labW6barnestr/Src/delay.c
new file mode 100644
index 0000000..e0e9355
--- /dev/null
+++ b/labW6barnestr/Src/delay.c
@@ -0,0 +1,28 @@
+/*
+ * delay.c
+ *
+ * Created on: Dec 10, 2021
+ * Author: Trevor Barnes
+ */
+
+#include
+#include "delay.h" //include declaration header file
+
+void delay_1ms(uint32_t n){
+
+ // 1ms = 16,000 ticks
+ for (int i = n ; i > 0 ; i--) {
+ // Clear value register
+ *STK_VAL = 0x0000;
+ // Store 16,000 in STK_LOAD
+ *STK_LOAD = 16000;
+ // Enable clock, no prescaler, no interrupt
+ *STK_CTRL |= CLKSOURCE;
+ *STK_CTRL |= EN;
+ // Loop n times: Wait for countflag high
+ int flag;
+ do {
+ flag = ((*STK_CTRL & (1<<16))>>16);
+ } while (flag != 1);
+ }
+}
diff --git a/labW6barnestr/Src/led.c b/labW6barnestr/Src/led.c
new file mode 100644
index 0000000..69add9b
--- /dev/null
+++ b/labW6barnestr/Src/led.c
@@ -0,0 +1,147 @@
+/*
+ * led.c
+ *
+ * Created on: Dec 10, 2021
+ * Author: Trevor Barnes
+ */
+
+#include "led.h"
+#include "delay.h"
+#include
+#include
+
+int ledSpeed = 5;
+
+void led_init(){
+ // Initialize corresponding RCC and GPIO registers
+ *RCC_AHB1ENR |= (1<= 6) {
+ // Add pin offset to index
+ *GPIOB_BSRR = (1<<(22+ledIndex));
+ } else {
+ printf("LED index out of range\n\r");
+ }
+}
+
+void led_scan(){
+ led_allOff();
+ // Right to left each LED
+ for (int i = 0; i <= 9 ; i++) {
+ // Scaled Delay
+ delay_1ms(50+(ledSpeed*50));
+ if(i != 0){
+ led_off(i-1);
+ }
+ led_on(i);
+ }
+ // Left to right each LED
+ for (int i = 9; i >= 0; i--) {
+ if(i != 9){
+ led_off(i+1);
+ }
+ led_on(i);
+ // Scaled Delay
+ delay_1ms(50+(ledSpeed*50));
+ }
+ led_off(0);
+}
+
+void led_flash(){
+ // Flash LED on and off 10 times at a speed between 0-1 seconds
+ for (int i = 0; i < 10; i++) {
+ led_allOn();
+ delay_1ms(100+(ledSpeed*100));
+ led_allOff();
+ delay_1ms(100+(ledSpeed*100));
+ }
+}
+
+void led_setSpeed(uint8_t speed){
+ ledSpeed = speed;
+}
+
+void led_incSpeed(){
+ if (ledSpeed == 0){
+ printf("Speed too fast\n\r");
+ } else {
+ ledSpeed--;
+ }
+}
+
+void led_decSpeed(){
+ if (ledSpeed == 9){
+ printf("Speed too slow\n\r");
+ } else {
+ ledSpeed++;
+ }
+}
+
+uint8_t getCurrentSpeed()
+{
+ return ledSpeed;
+}
+
+
diff --git a/labW6barnestr/Src/main.c b/labW6barnestr/Src/main.c
new file mode 100644
index 0000000..55c884c
--- /dev/null
+++ b/labW6barnestr/Src/main.c
@@ -0,0 +1,122 @@
+/*
+ * main.c
+ *
+ * Created on: January 12, 2022
+ * Author: Trevor Barnes
+ */
+
+#include
+#include
+#include
+#include
+#include "uart_driver.h"
+#include "memory.h"
+#include "led.h"
+#include "delay.h"
+#include "piezoSpeaker.h"
+
+#define F_CPU 16000000UL
+
+// Super Mario "Flagpole Fanfare"
+Note songSMFF[66]= { {G3, S/3}, {Ab3,S/3}, {A3, S/3}, {Bb3,S/3}, {B3,S/3},
+ {C4, S/3}, {Db4,S/3}, {D4, S/3}, {Eb4,S/3}, {E4,S/3},
+ {F4, S/3}, {Gb4,S/3}, {G4, S/3}, {Ab4,S/3}, {A4,S/3},
+ {Bb4,S/3}, {B4, S/3}, {C5, S/3}, {Db5,S/3}, {D5,S/3},
+ {Eb5,S/3}, {E5, S/3}, {F5, S/3}, {Gb5,S/3}, {G5,S/3},
+ {Ab5,S/3}, {A5, S/3}, {Bb5,S/3}, {B5, S/3}, {C6,S/3},
+ {Db6,S/3}, {D6, S/3}, {Eb6,S/3}, {E6, S/3}, {F6,S/3},
+ {Eb6,S/3}, {G6, S/3}, {r, 7*S}, {G3, Q}, {C4, Q},
+ {E4, Q}, {G4, Q}, {C5, Q}, {E5, Q}, {G5, H},
+ {E5, H}, {Ab3, Q}, {C4, Q}, {Eb4, Q}, {Ab4, Q},
+ {C5, Q}, {Eb5, Q}, {Ab6, H}, {Eb5, H}, {Bb3, Q},
+ {D4, Q}, {F4, Q}, {Bb4, Q}, {D5, Q}, {F5, Q},
+ {Bb5, W}, {B5, Q}, {B5, Q}, {B5, Q}, {C6, W}, {T, Q} };
+
+// Imperial March
+Note songIM[138] = { {A3, Q}, {r, Q}, {A3, Q}, {r, Q}, {A3, Q}, {r, Q},
+ {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, Q}, {r, Q},
+ {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H},
+ {E4, Q}, {r, Q}, {E4, Q}, {r, Q}, {E4, Q}, {r, Q},
+ {F4,E+S}, {r, E+S}, {C4, S}, {r, S}, {Ab3, Q}, {r, Q},
+ {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H},
+ {A4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, {A3, S}, {r, S},
+ {A4, Q}, {r, Q}, {Ab4,E+S}, {r, E+S}, {G4, S}, {r, S},
+ {Gb4, Q}, {r, S}, {E4, S}, {r, S}, {F4, E}, {r, E},
+ {r, E}, {Bb3, E}, {r, E}, {Eb4, Q}, {r, Q}, {D4,E+S},
+ {r, E+S}, {Db4, S}, {r, H}, {C4, S}, {r, S}, {B3, S},
+ {r, S}, {C4, E}, {r, E}, {r, E}, {F3, E}, {r, E},
+ {Ab3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, {A3, S}, {r, S},
+ {C4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, {C4, S}, {r, S},
+ {E4, H}, {r, H}, {A4, Q}, {r, Q}, {A3, E+S}, {r, E+S},
+ {A3, S}, {r, S}, {A4, Q}, {r, S}, {Ab4,E+S}, {r, E+S},
+ {G4, S}, {r, S}, {Gb4, S}, {r, S}, {E4, S}, {r, S},
+ {F4, E}, {r, E}, {r, E}, {Bb3, E}, {r, E}, {Eb4, Q},
+ {r, Q}, {D4,E+S}, {r, E+S}, {Db4, S}, {r, S}, {C4, S},
+ {r, S}, {B3, S}, {r, S}, {C4, E}, {r, E}, {r, E},
+ {F3, E}, {r, E}, {Ab3, Q}, {r, Q}, {F3, E+S}, {r, E+S},
+ {C4, S}, {r, S}, {A3, Q}, {r, Q}, {F3, E+S}, {r, E+S},
+ {C4, S}, {r, S}, {A3, H}, {r, H}, {T, Q} };
+
+void printHelp() {
+ printf("*Commands*\n\r");
+ printf("'rmw {hex address}' - Reads mem at a given address\n\r");
+ printf("'wmw {hex address} {value}' - Writes the given value as a word to the given address\n\r");
+ printf("'dm {hex address} {length}' - Dumps the memory at a given address. Defaults to 16 B if no "
+ "length is given\n\r");
+ printf("'ps {song choice}' - Plays a song with the given selection\n\r");
+ printf("'songs' - Prints info about each song selection\n\r");
+}
+void songInfo() {
+ printf("Type 1 or 2 to play a song!\n\r");
+ printf("Song 1: Imperial March\n\r");
+ printf("Song 2: Super Mario Bros Flagpole Fanfare\n\r");
+}
+
+int main(void) {
+ init_usart2(57600, F_CPU);
+ piezo_init();
+ led_init();
+ char line[50];
+ char command[10];
+ int address;
+ int data;
+ int length;
+ int songSelection;
+ // play_note(261.63, 10000.00);
+ for(;;) {
+ // Get command from user
+ fgets(line, 100, stdin);
+ // Parse only the command for strcmp
+ sscanf(line, "%s", command);
+ if (!strcmp(command, "help")) {
+ printHelp();
+ } else if (!strcmp(command, "songs")) {
+ songInfo();
+ } else if (!strcmp(command, "rmw")) {
+ sscanf(line, "%s %X", command, &address);
+ readMem(address);
+ } else if (!strcmp(command, "wmw")) {
+ sscanf(line, "%s %X %u", command, &address, &data);
+ writeMem(address, data);
+ } else if (!strcmp(command, "dm")) {
+ sscanf(line, "%s %X %u", command, &address, &length);
+ dumpMem(address, length);
+ } else if (!strcmp(command, "ps")) {
+ sscanf(line, "%s %u", command, &songSelection);
+ switch(songSelection) {
+ case 1:
+ printf("Playing Imperial March\n\r");
+ play_song(&songIM[0]);
+ break;
+ case 2:
+ printf("Playing Super Mario Bros Flagpole Fanfare\n\r");
+ play_song(&songSMFF[0]);
+ break;
+ default:
+ break;
+ }
+ } else {
+ printf("Invalid input, type 'help' for instructions\n\r");
+ }
+ }
+}
diff --git a/labW6barnestr/Src/memory.c b/labW6barnestr/Src/memory.c
new file mode 100644
index 0000000..68d38d8
--- /dev/null
+++ b/labW6barnestr/Src/memory.c
@@ -0,0 +1,66 @@
+/**
+ * @file memory.c
+ * @author Trevor Barnes
+ * @brief
+ * @version 0.1
+ * @date 2022-01-19
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+
+#include
+#include
+#include "memory.h"
+
+#define F_CPU 16000000UL
+
+void initMemConsole() {
+ init_usart2(57600, F_CPU);
+ printf("Memory Console Initialized! Type 'help' for info.\n\r");
+}
+
+void readMem(uint32_t addr) {
+ // Assign and casts a new int pointer the value of addr
+ uint32_t * memPtr = (uint32_t *)addr;
+ // Formatted print with both hex and decimal values
+ printf("Memory Value at %#08x\n\r"
+ "Hex: %#08x\n\r"
+ "Decimal: %d\n\r", addr, *memPtr, *memPtr);
+ return;
+}
+
+void writeMem(uint32_t addr, uint32_t data) {
+ // Assign and casts a new int pointer the value of addr
+ uint32_t * memPtr = (uint32_t *)addr;
+ // Write data
+ *memPtr = data;
+ // Confirmation printout showing the new value and address
+ printf("Value written at %#08x: %u \n\r", addr, data);
+ return;
+}
+
+
+void dumpMem(uint32_t addr, int length) {
+ // Set length to default value if length is negative
+ // (No limit or protection for large, overflow values yet)
+ if(length <= 0) {
+ length = 16;
+ printf("Length set to default! (16)\n\r");
+ }
+ // Assign and casts a new int pointer the value of addr
+ uint8_t * memPtr = (uint8_t *)addr;
+ // Loop that executes each read and print operation
+ for(int i=0 ; i < length ; i++) {
+ // Print newline and memory location every 16 bytes
+ if((i % 16) == 0) {
+ printf("\n\r%p:", memPtr);
+ }
+ // Print each byte
+ printf(" %02X", *memPtr);
+ // Iterate pointer to next byte
+ memPtr++;
+ }
+ printf("\n\r");
+ return;
+}
diff --git a/labW6barnestr/Src/piezoInt.c b/labW6barnestr/Src/piezoInt.c
new file mode 100644
index 0000000..e69de29
diff --git a/labW6barnestr/Src/piezoSpeaker.c b/labW6barnestr/Src/piezoSpeaker.c
new file mode 100644
index 0000000..ea54ae2
--- /dev/null
+++ b/labW6barnestr/Src/piezoSpeaker.c
@@ -0,0 +1,82 @@
+/**
+ * @file piezoSpeaker.c
+ * @author Trevor Barnes
+ * @brief
+ * @version 0.1
+ * @date 2022-01-19
+ *
+ * @copyright Copyright (c) 2022
+ *
+ */
+
+#include
+#include
+#include "piezoSpeaker.h"
+#include "delay.h"
+
+
+void piezo_init(){
+
+ //enable GPIOB and Timer 3 RCC
+ *RCC_AHB1ENR |= (1<
+#include
+
+
+// These will override _read and _write in syscalls.c, which are
+// prototyped as weak
+int _read(int file, char *ptr, int len)
+{
+ int DataIdx;
+ // Modified the for loop in order to get the correct behavior for fgets
+ int byteCnt = 0;
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ //*ptr++ = __io_getchar();
+ byteCnt++;
+ //*ptr++ = usart2_getch();
+ *ptr = usart2_getch();
+ if(*ptr == '\n') break;
+ ptr++;
+ }
+
+ //return len;
+ return byteCnt; // Return byte count
+}
+
+int _write(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ usart2_putch(*ptr++);
+ }
+ return len;
+}
+
+
+
+char usart2_getch(){
+ char c;
+ while((*(USART_SR)&(1<
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/labW7barnestr/.project b/labW7barnestr/.project
new file mode 100644
index 0000000..ccb12d3
--- /dev/null
+++ b/labW7barnestr/.project
@@ -0,0 +1,31 @@
+
+
+ labW7barnestr
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ com.st.stm32cube.ide.mcu.MCUProjectNature
+ org.eclipse.cdt.core.cnature
+ com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature
+ com.st.stm32cube.ide.mcu.MCUManagedMakefileProjectNature
+ com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature
+ com.st.stm32cube.ide.mcu.MCURootProjectNature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/labW7barnestr/STM32F446RETX_FLASH.ld b/labW7barnestr/STM32F446RETX_FLASH.ld
new file mode 100644
index 0000000..db39937
--- /dev/null
+++ b/labW7barnestr/STM32F446RETX_FLASH.ld
@@ -0,0 +1,185 @@
+/*
+******************************************************************************
+**
+** @file : LinkerScript.ld
+**
+** @author : Auto-generated by STM32CubeIDE
+**
+** @brief : Linker script for STM32F446RETx Device from STM32F4 series
+** 512Kbytes FLASH
+** 128Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed as is, without any warranty
+** of any kind.
+**
+******************************************************************************
+** @attention
+**
+** Copyright (c) 2022 STMicroelectronics.
+** All rights reserved.
+**
+** This software is licensed under terms that can be found in the LICENSE file
+** in the root directory of this software component.
+** If no LICENSE file comes with this software, it is provided AS-IS.
+**
+******************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
+
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Memories definition */
+MEMORY
+{
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
+ FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
+}
+
+/* Sections */
+SECTIONS
+{
+ /* The startup code into "FLASH" Rom type memory */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >FLASH
+
+ /* The program code and other data into "FLASH" Rom type memory */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >FLASH
+
+ /* Constant data into "FLASH" Rom type memory */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM.extab : {
+ . = ALIGN(4);
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ . = ALIGN(4);
+ } >FLASH
+
+ .ARM : {
+ . = ALIGN(4);
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ . = ALIGN(4);
+ } >FLASH
+
+ .preinit_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ .init_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ .fini_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ . = ALIGN(4);
+ } >FLASH
+
+ /* Used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections into "RAM" Ram type memory */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+ *(.RamFunc) /* .RamFunc sections */
+ *(.RamFunc*) /* .RamFunc* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+
+ } >RAM AT> FLASH
+
+ /* Uninitialized data section into "RAM" Ram type memory */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+ /* Remove information from the compiler libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/labW7barnestr/STM32F446RETX_RAM.ld b/labW7barnestr/STM32F446RETX_RAM.ld
new file mode 100644
index 0000000..a3ed812
--- /dev/null
+++ b/labW7barnestr/STM32F446RETX_RAM.ld
@@ -0,0 +1,185 @@
+/*
+******************************************************************************
+**
+** @file : LinkerScript.ld (debug in RAM dedicated)
+**
+** @author : Auto-generated by STM32CubeIDE
+**
+** @brief : Linker script for STM32F446RETx Device from STM32F4 series
+** 512Kbytes FLASH
+** 128Kbytes RAM
+**
+** Set heap size, stack size and stack location according
+** to application requirements.
+**
+** Set memory bank area and size if external memory is used
+**
+** Target : STMicroelectronics STM32
+**
+** Distribution: The file is distributed as is, without any warranty
+** of any kind.
+**
+******************************************************************************
+** @attention
+**
+** Copyright (c) 2022 STMicroelectronics.
+** All rights reserved.
+**
+** This software is licensed under terms that can be found in the LICENSE file
+** in the root directory of this software component.
+** If no LICENSE file comes with this software, it is provided AS-IS.
+**
+******************************************************************************
+*/
+
+/* Entry Point */
+ENTRY(Reset_Handler)
+
+/* Highest address of the user mode stack */
+_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
+
+_Min_Heap_Size = 0x200; /* required amount of heap */
+_Min_Stack_Size = 0x400; /* required amount of stack */
+
+/* Memories definition */
+MEMORY
+{
+ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
+ FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
+}
+
+/* Sections */
+SECTIONS
+{
+ /* The startup code into "RAM" Ram type memory */
+ .isr_vector :
+ {
+ . = ALIGN(4);
+ KEEP(*(.isr_vector)) /* Startup code */
+ . = ALIGN(4);
+ } >RAM
+
+ /* The program code and other data into "RAM" Ram type memory */
+ .text :
+ {
+ . = ALIGN(4);
+ *(.text) /* .text sections (code) */
+ *(.text*) /* .text* sections (code) */
+ *(.glue_7) /* glue arm to thumb code */
+ *(.glue_7t) /* glue thumb to arm code */
+ *(.eh_frame)
+ *(.RamFunc) /* .RamFunc sections */
+ *(.RamFunc*) /* .RamFunc* sections */
+
+ KEEP (*(.init))
+ KEEP (*(.fini))
+
+ . = ALIGN(4);
+ _etext = .; /* define a global symbols at end of code */
+ } >RAM
+
+ /* Constant data into "RAM" Ram type memory */
+ .rodata :
+ {
+ . = ALIGN(4);
+ *(.rodata) /* .rodata sections (constants, strings, etc.) */
+ *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
+ . = ALIGN(4);
+ } >RAM
+
+ .ARM.extab : {
+ . = ALIGN(4);
+ *(.ARM.extab* .gnu.linkonce.armextab.*)
+ . = ALIGN(4);
+ } >RAM
+
+ .ARM : {
+ . = ALIGN(4);
+ __exidx_start = .;
+ *(.ARM.exidx*)
+ __exidx_end = .;
+ . = ALIGN(4);
+ } >RAM
+
+ .preinit_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__preinit_array_start = .);
+ KEEP (*(.preinit_array*))
+ PROVIDE_HIDDEN (__preinit_array_end = .);
+ . = ALIGN(4);
+ } >RAM
+
+ .init_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__init_array_start = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array*))
+ PROVIDE_HIDDEN (__init_array_end = .);
+ . = ALIGN(4);
+ } >RAM
+
+ .fini_array :
+ {
+ . = ALIGN(4);
+ PROVIDE_HIDDEN (__fini_array_start = .);
+ KEEP (*(SORT(.fini_array.*)))
+ KEEP (*(.fini_array*))
+ PROVIDE_HIDDEN (__fini_array_end = .);
+ . = ALIGN(4);
+ } >RAM
+
+ /* Used by the startup to initialize data */
+ _sidata = LOADADDR(.data);
+
+ /* Initialized data sections into "RAM" Ram type memory */
+ .data :
+ {
+ . = ALIGN(4);
+ _sdata = .; /* create a global symbol at data start */
+ *(.data) /* .data sections */
+ *(.data*) /* .data* sections */
+
+ . = ALIGN(4);
+ _edata = .; /* define a global symbol at data end */
+
+ } >RAM
+
+ /* Uninitialized data section into "RAM" Ram type memory */
+ . = ALIGN(4);
+ .bss :
+ {
+ /* This is used by the startup in order to initialize the .bss section */
+ _sbss = .; /* define a global symbol at bss start */
+ __bss_start__ = _sbss;
+ *(.bss)
+ *(.bss*)
+ *(COMMON)
+
+ . = ALIGN(4);
+ _ebss = .; /* define a global symbol at bss end */
+ __bss_end__ = _ebss;
+ } >RAM
+
+ /* User_heap_stack section, used to check that there is enough "RAM" Ram type memory left */
+ ._user_heap_stack :
+ {
+ . = ALIGN(8);
+ PROVIDE ( end = . );
+ PROVIDE ( _end = . );
+ . = . + _Min_Heap_Size;
+ . = . + _Min_Stack_Size;
+ . = ALIGN(8);
+ } >RAM
+
+ /* Remove information from the compiler libraries */
+ /DISCARD/ :
+ {
+ libc.a ( * )
+ libm.a ( * )
+ libgcc.a ( * )
+ }
+
+ .ARM.attributes 0 : { *(.ARM.attributes) }
+}
diff --git a/labW7barnestr/Src/main.c b/labW7barnestr/Src/main.c
new file mode 100644
index 0000000..2a53113
--- /dev/null
+++ b/labW7barnestr/Src/main.c
@@ -0,0 +1,29 @@
+/**
+ ******************************************************************************
+ * @file : main.c
+ * @author : Auto-generated by STM32CubeIDE
+ * @brief : Main program body
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2022 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+
+#include
+
+#if !defined(__SOFT_FP__) && defined(__ARM_FP)
+ #warning "FPU is not initialized, but the project is compiling for an FPU. Please initialize the FPU before use."
+#endif
+
+int main(void)
+{
+ /* Loop forever */
+ for(;;);
+}
diff --git a/labW7barnestr/Src/syscalls.c b/labW7barnestr/Src/syscalls.c
new file mode 100644
index 0000000..8370509
--- /dev/null
+++ b/labW7barnestr/Src/syscalls.c
@@ -0,0 +1,155 @@
+/**
+ ******************************************************************************
+ * @file syscalls.c
+ * @author Auto-generated by STM32CubeIDE
+ * @brief STM32CubeIDE Minimal System calls file
+ *
+ * For more information about which c-functions
+ * need which of these lowlevel functions
+ * please consult the Newlib libc-manual
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+
+/* Includes */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+/* Variables */
+extern int __io_putchar(int ch) __attribute__((weak));
+extern int __io_getchar(void) __attribute__((weak));
+
+
+char *__env[1] = { 0 };
+char **environ = __env;
+
+
+/* Functions */
+void initialise_monitor_handles()
+{
+}
+
+int _getpid(void)
+{
+ return 1;
+}
+
+int _kill(int pid, int sig)
+{
+ errno = EINVAL;
+ return -1;
+}
+
+void _exit (int status)
+{
+ _kill(status, -1);
+ while (1) {} /* Make sure we hang here */
+}
+
+__attribute__((weak)) int _read(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ *ptr++ = __io_getchar();
+ }
+
+return len;
+}
+
+__attribute__((weak)) int _write(int file, char *ptr, int len)
+{
+ int DataIdx;
+
+ for (DataIdx = 0; DataIdx < len; DataIdx++)
+ {
+ __io_putchar(*ptr++);
+ }
+ return len;
+}
+
+int _close(int file)
+{
+ return -1;
+}
+
+
+int _fstat(int file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return 0;
+}
+
+int _isatty(int file)
+{
+ return 1;
+}
+
+int _lseek(int file, int ptr, int dir)
+{
+ return 0;
+}
+
+int _open(char *path, int flags, ...)
+{
+ /* Pretend like we always fail */
+ return -1;
+}
+
+int _wait(int *status)
+{
+ errno = ECHILD;
+ return -1;
+}
+
+int _unlink(char *name)
+{
+ errno = ENOENT;
+ return -1;
+}
+
+int _times(struct tms *buf)
+{
+ return -1;
+}
+
+int _stat(char *file, struct stat *st)
+{
+ st->st_mode = S_IFCHR;
+ return 0;
+}
+
+int _link(char *old, char *new)
+{
+ errno = EMLINK;
+ return -1;
+}
+
+int _fork(void)
+{
+ errno = EAGAIN;
+ return -1;
+}
+
+int _execve(char *name, char **argv, char **env)
+{
+ errno = ENOMEM;
+ return -1;
+}
diff --git a/labW7barnestr/Src/sysmem.c b/labW7barnestr/Src/sysmem.c
new file mode 100644
index 0000000..4353a47
--- /dev/null
+++ b/labW7barnestr/Src/sysmem.c
@@ -0,0 +1,79 @@
+/**
+ ******************************************************************************
+ * @file sysmem.c
+ * @author Generated by STM32CubeIDE
+ * @brief STM32CubeIDE System Memory calls file
+ *
+ * For more information about which C functions
+ * need which of these lowlevel functions
+ * please consult the newlib libc manual
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2021 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+
+/* Includes */
+#include
+#include
+
+/**
+ * Pointer to the current high watermark of the heap usage
+ */
+static uint8_t *__sbrk_heap_end = NULL;
+
+/**
+ * @brief _sbrk() allocates memory to the newlib heap and is used by malloc
+ * and others from the C library
+ *
+ * @verbatim
+ * ############################################################################
+ * # .data # .bss # newlib heap # MSP stack #
+ * # # # # Reserved by _Min_Stack_Size #
+ * ############################################################################
+ * ^-- RAM start ^-- _end _estack, RAM end --^
+ * @endverbatim
+ *
+ * This implementation starts allocating at the '_end' linker symbol
+ * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack
+ * The implementation considers '_estack' linker symbol to be RAM end
+ * NOTE: If the MSP stack, at any point during execution, grows larger than the
+ * reserved size, please increase the '_Min_Stack_Size'.
+ *
+ * @param incr Memory size
+ * @return Pointer to allocated memory
+ */
+void *_sbrk(ptrdiff_t incr)
+{
+ extern uint8_t _end; /* Symbol defined in the linker script */
+ extern uint8_t _estack; /* Symbol defined in the linker script */
+ extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */
+ const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size;
+ const uint8_t *max_heap = (uint8_t *)stack_limit;
+ uint8_t *prev_heap_end;
+
+ /* Initialize heap end at first call */
+ if (NULL == __sbrk_heap_end)
+ {
+ __sbrk_heap_end = &_end;
+ }
+
+ /* Protect heap from growing into the reserved MSP stack */
+ if (__sbrk_heap_end + incr > max_heap)
+ {
+ errno = ENOMEM;
+ return (void *)-1;
+ }
+
+ prev_heap_end = __sbrk_heap_end;
+ __sbrk_heap_end += incr;
+
+ return (void *)prev_heap_end;
+}
diff --git a/labW7barnestr/Startup/startup_stm32f446retx.s b/labW7barnestr/Startup/startup_stm32f446retx.s
new file mode 100644
index 0000000..94030ea
--- /dev/null
+++ b/labW7barnestr/Startup/startup_stm32f446retx.s
@@ -0,0 +1,539 @@
+/**
+ ******************************************************************************
+ * @file startup_stm32f446retx.s
+ * @author Auto-generated by STM32CubeIDE
+ * @brief STM32F446RETx device vector table for GCC toolchain.
+ * This module performs:
+ * - Set the initial SP
+ * - Set the initial PC == Reset_Handler,
+ * - Set the vector table entries with the exceptions ISR address
+ * - Branches to main in the C library (which eventually
+ * calls main()).
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) ${year} STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+
+.syntax unified
+.cpu cortex-m4
+.fpu softvfp
+.thumb
+
+.global g_pfnVectors
+.global Default_Handler
+
+/* start address for the initialization values of the .data section.
+defined in linker script */
+.word _sidata
+/* start address for the .data section. defined in linker script */
+.word _sdata
+/* end address for the .data section. defined in linker script */
+.word _edata
+/* start address for the .bss section. defined in linker script */
+.word _sbss
+/* end address for the .bss section. defined in linker script */
+.word _ebss
+
+/**
+ * @brief This is the code that gets called when the processor first
+ * starts execution following a reset event. Only the absolutely
+ * necessary set is performed, after which the application
+ * supplied main() routine is called.
+ * @param None
+ * @retval : None
+*/
+
+ .section .text.Reset_Handler
+ .weak Reset_Handler
+ .type Reset_Handler, %function
+Reset_Handler:
+ ldr r0, =_estack
+ mov sp, r0 /* set stack pointer */
+/* Call the clock system initialization function.*/
+ bl SystemInit
+
+/* Copy the data segment initializers from flash to SRAM */
+ ldr r0, =_sdata
+ ldr r1, =_edata
+ ldr r2, =_sidata
+ movs r3, #0
+ b LoopCopyDataInit
+
+CopyDataInit:
+ ldr r4, [r2, r3]
+ str r4, [r0, r3]
+ adds r3, r3, #4
+
+LoopCopyDataInit:
+ adds r4, r0, r3
+ cmp r4, r1
+ bcc CopyDataInit
+
+/* Zero fill the bss segment. */
+ ldr r2, =_sbss
+ ldr r4, =_ebss
+ movs r3, #0
+ b LoopFillZerobss
+
+FillZerobss:
+ str r3, [r2]
+ adds r2, r2, #4
+
+LoopFillZerobss:
+ cmp r2, r4
+ bcc FillZerobss
+
+/* Call static constructors */
+ bl __libc_init_array
+/* Call the application's entry point.*/
+ bl main
+
+LoopForever:
+ b LoopForever
+
+ .size Reset_Handler, .-Reset_Handler
+
+/**
+ * @brief This is the code that gets called when the processor receives an
+ * unexpected interrupt. This simply enters an infinite loop, preserving
+ * the system state for examination by a debugger.
+ *
+ * @param None
+ * @retval : None
+*/
+ .section .text.Default_Handler,"ax",%progbits
+Default_Handler:
+Infinite_Loop:
+ b Infinite_Loop
+ .size Default_Handler, .-Default_Handler
+
+/******************************************************************************
+*
+* The STM32F446RETx vector table. Note that the proper constructs
+* must be placed on this to ensure that it ends up at physical address
+* 0x0000.0000.
+*
+******************************************************************************/
+ .section .isr_vector,"a",%progbits
+ .type g_pfnVectors, %object
+ .size g_pfnVectors, .-g_pfnVectors
+
+g_pfnVectors:
+ .word _estack
+ .word Reset_Handler
+ .word NMI_Handler
+ .word HardFault_Handler
+ .word MemManage_Handler
+ .word BusFault_Handler
+ .word UsageFault_Handler
+ .word 0
+ .word 0
+ .word 0
+ .word 0
+ .word SVC_Handler
+ .word DebugMon_Handler
+ .word 0
+ .word PendSV_Handler
+ .word SysTick_Handler
+ .word WWDG_IRQHandler /* Window Watchdog interrupt */
+ .word PVD_IRQHandler /* PVD through EXTI line detection interrupt */
+ .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamp interrupts through the EXTI line */
+ .word RTC_WKUP_IRQHandler /* RTC Wakeup interrupt through the EXTI line */
+ .word FLASH_IRQHandler /* Flash global interrupt */
+ .word RCC_IRQHandler /* RCC global interrupt */
+ .word EXTI0_IRQHandler /* EXTI Line0 interrupt */
+ .word EXTI1_IRQHandler /* EXTI Line1 interrupt */
+ .word EXTI2_IRQHandler /* EXTI Line2 interrupt */
+ .word EXTI3_IRQHandler /* EXTI Line3 interrupt */
+ .word EXTI4_IRQHandler /* EXTI Line4 interrupt */
+ .word DMA1_Stream0_IRQHandler /* DMA1 Stream0 global interrupt */
+ .word DMA1_Stream1_IRQHandler /* DMA1 Stream1 global interrupt */
+ .word DMA1_Stream2_IRQHandler /* DMA1 Stream2 global interrupt */
+ .word DMA1_Stream3_IRQHandler /* DMA1 Stream3 global interrupt */
+ .word DMA1_Stream4_IRQHandler /* DMA1 Stream4 global interrupt */
+ .word DMA1_Stream5_IRQHandler /* DMA1 Stream5 global interrupt */
+ .word DMA1_Stream6_IRQHandler /* DMA1 Stream6 global interrupt */
+ .word ADC_IRQHandler /* ADC1 global interrupt */
+ .word CAN1_TX_IRQHandler /* CAN1 TX interrupts */
+ .word CAN1_RX0_IRQHandler /* CAN1 RX0 interrupts */
+ .word CAN1_RX1_IRQHandler /* CAN1 RX1 interrupts */
+ .word CAN1_SCE_IRQHandler /* CAN1 SCE interrupt */
+ .word EXTI9_5_IRQHandler /* EXTI Line[9:5] interrupts */
+ .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break interrupt and TIM9 global interrupt */
+ .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update interrupt and TIM10 global interrupt */
+ .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation interrupts and TIM11 global interrupt */
+ .word TIM1_CC_IRQHandler /* TIM1 Capture Compare interrupt */
+ .word TIM2_IRQHandler /* TIM2 global interrupt */
+ .word TIM3_IRQHandler /* TIM3 global interrupt */
+ .word TIM4_IRQHandler /* TIM4 global interrupt */
+ .word I2C1_EV_IRQHandler /* I2C1 event interrupt */
+ .word I2C1_ER_IRQHandler /* I2C1 error interrupt */
+ .word I2C2_EV_IRQHandler /* I2C2 event interrupt */
+ .word I2C2_ER_IRQHandler /* I2C2 error interrupt */
+ .word SPI1_IRQHandler /* SPI1 global interrupt */
+ .word SPI2_IRQHandler /* SPI2 global interrupt */
+ .word USART1_IRQHandler /* USART1 global interrupt */
+ .word USART2_IRQHandler /* USART2 global interrupt */
+ .word USART3_IRQHandler /* USART3 global interrupt */
+ .word EXTI15_10_IRQHandler /* EXTI Line[15:10] interrupts */
+ .word RTC_Alarm_IRQHandler /* RTC Alarms (A and B) through EXTI line interrupt */
+ .word OTG_FS_WKUP_IRQHandler /* USB On-The-Go FS Wakeup through EXTI line interrupt */
+ .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break interrupt and TIM12 global interrupt */
+ .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update interrupt and TIM13 global interrupt */
+ .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation interrupts and TIM14 global interrupt */
+ .word TIM8_CC_IRQHandler /* TIM8 Capture Compare interrupt */
+ .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 global interrupt */
+ .word FMC_IRQHandler /* FMC global interrupt */
+ .word SDIO_IRQHandler /* SDIO global interrupt */
+ .word TIM5_IRQHandler /* TIM5 global interrupt */
+ .word SPI3_IRQHandler /* SPI3 global interrupt */
+ .word UART4_IRQHandler /* UART4 global interrupt */
+ .word UART5_IRQHandler /* UART5 global interrupt */
+ .word TIM6_DAC_IRQHandler /* TIM6 global interrupt, DAC1 and DAC2 underrun error interrupt */
+ .word TIM7_IRQHandler /* TIM7 global interrupt */
+ .word DMA2_Stream0_IRQHandler /* DMA2 Stream0 global interrupt */
+ .word DMA2_Stream1_IRQHandler /* DMA2 Stream1 global interrupt */
+ .word DMA2_Stream2_IRQHandler /* DMA2 Stream2 global interrupt */
+ .word DMA2_Stream3_IRQHandler /* DMA2 Stream3 global interrupt */
+ .word DMA2_Stream4_IRQHandler /* DMA2 Stream4 global interrupt */
+ .word 0 /* Reserved */
+ .word 0 /* Reserved */
+ .word CAN2_TX_IRQHandler /* CAN2 TX interrupts */
+ .word CAN2_RX0_IRQHandler /* CAN2 RX0 interrupts */
+ .word CAN2_RX1_IRQHandler /* CAN2 RX1 interrupts */
+ .word CAN2_SCE_IRQHandler /* CAN2 SCE interrupt */
+ .word OTG_FS_IRQHandler /* USB On The Go FS global interrupt */
+ .word DMA2_Stream5_IRQHandler /* DMA2 Stream5 global interrupt */
+ .word DMA2_Stream6_IRQHandler /* DMA2 Stream6 global interrupt */
+ .word DMA2_Stream7_IRQHandler /* DMA2 Stream7 global interrupt */
+ .word USART6_IRQHandler /* USART6 global interrupt */
+ .word I2C3_EV_IRQHandler /* I2C3 event interrupt */
+ .word I2C3_ER_IRQHandler /* I2C3 error interrupt */
+ .word OTG_HS_EP1_OUT_IRQHandler /* USB On The Go HS End Point 1 Out */
+ .word OTG_HS_EP1_IN_IRQHandler /* USB On The Go HS End Point 1 In */
+ .word OTG_HS_WKUP_IRQHandler /* USB On The Go HS Wakeup */
+ .word OTG_HS_IRQHandler /* USB On The Go HS global interrupt */
+ .word DCMI_IRQHandler /* DCMI global interrupt */
+ .word 0 /* Reserved */
+ .word 0 /* Reserved */
+ .word FPU_IRQHandler /* Floating point unit interrupt */
+ .word 0 /* Reserved */
+ .word 0 /* Reserved */
+ .word SPI4_IRQHandler /* SPI 4 global interrupt */
+ .word 0 /* Reserved */
+ .word 0 /* Reserved */
+ .word SAI1_IRQHandler /* SAI1 global interrupt */
+ .word 0 /* Reserved */
+ .word 0 /* Reserved */
+ .word 0 /* Reserved */
+ .word SAI2_IRQHandler /* SAI2 global interrupt */
+ .word QuadSPI_IRQHandler /* QuadSPI global interrupt */
+ .word HDMI_CEC_IRQHandler /* HDMI-CEC global interrupt */
+ .word SPDIF_Rx_IRQHandler /* SPDIF-Rx global interrupt */
+ .word FMPI2C1_IRQHandler /* FMPI2C1 event interrupt */
+ .word FMPI2C1_error_IRQHandler /* FMPI2C1 error interrupt */
+
+/*******************************************************************************
+*
+* Provide weak aliases for each Exception handler to the Default_Handler.
+* As they are weak aliases, any function with the same name will override
+* this definition.
+*
+*******************************************************************************/
+
+ .weak NMI_Handler
+ .thumb_set NMI_Handler,Default_Handler
+
+ .weak HardFault_Handler
+ .thumb_set HardFault_Handler,Default_Handler
+
+ .weak MemManage_Handler
+ .thumb_set MemManage_Handler,Default_Handler
+
+ .weak BusFault_Handler
+ .thumb_set BusFault_Handler,Default_Handler
+
+ .weak UsageFault_Handler
+ .thumb_set UsageFault_Handler,Default_Handler
+
+ .weak SVC_Handler
+ .thumb_set SVC_Handler,Default_Handler
+
+ .weak DebugMon_Handler
+ .thumb_set DebugMon_Handler,Default_Handler
+
+ .weak PendSV_Handler
+ .thumb_set PendSV_Handler,Default_Handler
+
+ .weak SysTick_Handler
+ .thumb_set SysTick_Handler,Default_Handler
+
+ .weak WWDG_IRQHandler
+ .thumb_set WWDG_IRQHandler,Default_Handler
+
+ .weak PVD_IRQHandler
+ .thumb_set PVD_IRQHandler,Default_Handler
+
+ .weak TAMP_STAMP_IRQHandler
+ .thumb_set TAMP_STAMP_IRQHandler,Default_Handler
+
+ .weak RTC_WKUP_IRQHandler
+ .thumb_set RTC_WKUP_IRQHandler,Default_Handler
+
+ .weak FLASH_IRQHandler
+ .thumb_set FLASH_IRQHandler,Default_Handler
+
+ .weak RCC_IRQHandler
+ .thumb_set RCC_IRQHandler,Default_Handler
+
+ .weak EXTI0_IRQHandler
+ .thumb_set EXTI0_IRQHandler,Default_Handler
+
+ .weak EXTI1_IRQHandler
+ .thumb_set EXTI1_IRQHandler,Default_Handler
+
+ .weak EXTI2_IRQHandler
+ .thumb_set EXTI2_IRQHandler,Default_Handler
+
+ .weak EXTI3_IRQHandler
+ .thumb_set EXTI3_IRQHandler,Default_Handler
+
+ .weak EXTI4_IRQHandler
+ .thumb_set EXTI4_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream0_IRQHandler
+ .thumb_set DMA1_Stream0_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream1_IRQHandler
+ .thumb_set DMA1_Stream1_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream2_IRQHandler
+ .thumb_set DMA1_Stream2_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream3_IRQHandler
+ .thumb_set DMA1_Stream3_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream4_IRQHandler
+ .thumb_set DMA1_Stream4_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream5_IRQHandler
+ .thumb_set DMA1_Stream5_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream6_IRQHandler
+ .thumb_set DMA1_Stream6_IRQHandler,Default_Handler
+
+ .weak ADC_IRQHandler
+ .thumb_set ADC_IRQHandler,Default_Handler
+
+ .weak CAN1_TX_IRQHandler
+ .thumb_set CAN1_TX_IRQHandler,Default_Handler
+
+ .weak CAN1_RX0_IRQHandler
+ .thumb_set CAN1_RX0_IRQHandler,Default_Handler
+
+ .weak CAN1_RX1_IRQHandler
+ .thumb_set CAN1_RX1_IRQHandler,Default_Handler
+
+ .weak CAN1_SCE_IRQHandler
+ .thumb_set CAN1_SCE_IRQHandler,Default_Handler
+
+ .weak EXTI9_5_IRQHandler
+ .thumb_set EXTI9_5_IRQHandler,Default_Handler
+
+ .weak TIM1_BRK_TIM9_IRQHandler
+ .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler
+
+ .weak TIM1_UP_TIM10_IRQHandler
+ .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler
+
+ .weak TIM1_TRG_COM_TIM11_IRQHandler
+ .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler
+
+ .weak TIM1_CC_IRQHandler
+ .thumb_set TIM1_CC_IRQHandler,Default_Handler
+
+ .weak TIM2_IRQHandler
+ .thumb_set TIM2_IRQHandler,Default_Handler
+
+ .weak TIM3_IRQHandler
+ .thumb_set TIM3_IRQHandler,Default_Handler
+
+ .weak TIM4_IRQHandler
+ .thumb_set TIM4_IRQHandler,Default_Handler
+
+ .weak I2C1_EV_IRQHandler
+ .thumb_set I2C1_EV_IRQHandler,Default_Handler
+
+ .weak I2C1_ER_IRQHandler
+ .thumb_set I2C1_ER_IRQHandler,Default_Handler
+
+ .weak I2C2_EV_IRQHandler
+ .thumb_set I2C2_EV_IRQHandler,Default_Handler
+
+ .weak I2C2_ER_IRQHandler
+ .thumb_set I2C2_ER_IRQHandler,Default_Handler
+
+ .weak SPI1_IRQHandler
+ .thumb_set SPI1_IRQHandler,Default_Handler
+
+ .weak SPI2_IRQHandler
+ .thumb_set SPI2_IRQHandler,Default_Handler
+
+ .weak USART1_IRQHandler
+ .thumb_set USART1_IRQHandler,Default_Handler
+
+ .weak USART2_IRQHandler
+ .thumb_set USART2_IRQHandler,Default_Handler
+
+ .weak USART3_IRQHandler
+ .thumb_set USART3_IRQHandler,Default_Handler
+
+ .weak EXTI15_10_IRQHandler
+ .thumb_set EXTI15_10_IRQHandler,Default_Handler
+
+ .weak RTC_Alarm_IRQHandler
+ .thumb_set RTC_Alarm_IRQHandler,Default_Handler
+
+ .weak OTG_FS_WKUP_IRQHandler
+ .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler
+
+ .weak TIM8_BRK_TIM12_IRQHandler
+ .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler
+
+ .weak TIM8_UP_TIM13_IRQHandler
+ .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler
+
+ .weak TIM8_TRG_COM_TIM14_IRQHandler
+ .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler
+
+ .weak TIM8_CC_IRQHandler
+ .thumb_set TIM8_CC_IRQHandler,Default_Handler
+
+ .weak DMA1_Stream7_IRQHandler
+ .thumb_set DMA1_Stream7_IRQHandler,Default_Handler
+
+ .weak FMC_IRQHandler
+ .thumb_set FMC_IRQHandler,Default_Handler
+
+ .weak SDIO_IRQHandler
+ .thumb_set SDIO_IRQHandler,Default_Handler
+
+ .weak TIM5_IRQHandler
+ .thumb_set TIM5_IRQHandler,Default_Handler
+
+ .weak SPI3_IRQHandler
+ .thumb_set SPI3_IRQHandler,Default_Handler
+
+ .weak UART4_IRQHandler
+ .thumb_set UART4_IRQHandler,Default_Handler
+
+ .weak UART5_IRQHandler
+ .thumb_set UART5_IRQHandler,Default_Handler
+
+ .weak TIM6_DAC_IRQHandler
+ .thumb_set TIM6_DAC_IRQHandler,Default_Handler
+
+ .weak TIM7_IRQHandler
+ .thumb_set TIM7_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream0_IRQHandler
+ .thumb_set DMA2_Stream0_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream1_IRQHandler
+ .thumb_set DMA2_Stream1_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream2_IRQHandler
+ .thumb_set DMA2_Stream2_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream3_IRQHandler
+ .thumb_set DMA2_Stream3_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream4_IRQHandler
+ .thumb_set DMA2_Stream4_IRQHandler,Default_Handler
+
+ .weak CAN2_TX_IRQHandler
+ .thumb_set CAN2_TX_IRQHandler,Default_Handler
+
+ .weak CAN2_RX0_IRQHandler
+ .thumb_set CAN2_RX0_IRQHandler,Default_Handler
+
+ .weak CAN2_RX1_IRQHandler
+ .thumb_set CAN2_RX1_IRQHandler,Default_Handler
+
+ .weak CAN2_SCE_IRQHandler
+ .thumb_set CAN2_SCE_IRQHandler,Default_Handler
+
+ .weak OTG_FS_IRQHandler
+ .thumb_set OTG_FS_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream5_IRQHandler
+ .thumb_set DMA2_Stream5_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream6_IRQHandler
+ .thumb_set DMA2_Stream6_IRQHandler,Default_Handler
+
+ .weak DMA2_Stream7_IRQHandler
+ .thumb_set DMA2_Stream7_IRQHandler,Default_Handler
+
+ .weak USART6_IRQHandler
+ .thumb_set USART6_IRQHandler,Default_Handler
+
+ .weak I2C3_EV_IRQHandler
+ .thumb_set I2C3_EV_IRQHandler,Default_Handler
+
+ .weak I2C3_ER_IRQHandler
+ .thumb_set I2C3_ER_IRQHandler,Default_Handler
+
+ .weak OTG_HS_EP1_OUT_IRQHandler
+ .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler
+
+ .weak OTG_HS_EP1_IN_IRQHandler
+ .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler
+
+ .weak OTG_HS_WKUP_IRQHandler
+ .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler
+
+ .weak OTG_HS_IRQHandler
+ .thumb_set OTG_HS_IRQHandler,Default_Handler
+
+ .weak DCMI_IRQHandler
+ .thumb_set DCMI_IRQHandler,Default_Handler
+
+ .weak FPU_IRQHandler
+ .thumb_set FPU_IRQHandler,Default_Handler
+
+ .weak SPI4_IRQHandler
+ .thumb_set SPI4_IRQHandler,Default_Handler
+
+ .weak SAI1_IRQHandler
+ .thumb_set SAI1_IRQHandler,Default_Handler
+
+ .weak SAI2_IRQHandler
+ .thumb_set SAI2_IRQHandler,Default_Handler
+
+ .weak QuadSPI_IRQHandler
+ .thumb_set QuadSPI_IRQHandler,Default_Handler
+
+ .weak HDMI_CEC_IRQHandler
+ .thumb_set HDMI_CEC_IRQHandler,Default_Handler
+
+ .weak SPDIF_Rx_IRQHandler
+ .thumb_set SPDIF_Rx_IRQHandler,Default_Handler
+
+ .weak FMPI2C1_IRQHandler
+ .thumb_set FMPI2C1_IRQHandler,Default_Handler
+
+ .weak FMPI2C1_error_IRQHandler
+ .thumb_set FMPI2C1_error_IRQHandler,Default_Handler
+
+ .weak SystemInit
+
+/************************ (C) COPYRIGHT STMicroelectonics *****END OF FILE****/
diff --git a/labW9barnestr/.settings/language.settings.xml b/labW9barnestr/.settings/language.settings.xml
deleted file mode 100644
index aeefe68..0000000
--- a/labW9barnestr/.settings/language.settings.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file