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 @@ + - - - + + + + + + + + + \ 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