Compare commits
5 Commits
beta-0.0.3
...
master
Author | SHA1 | Date | |
---|---|---|---|
674dbb96c2 | |||
4122ec3631 | |||
bb0cd45a76 | |||
47cf5388e3 | |||
33ab540653 |
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
1
.idea/.name
generated
Normal file
1
.idea/.name
generated
Normal file
@ -0,0 +1 @@
|
||||
FloatPUMP
|
11
.idea/cmake.xml
generated
Normal file
11
.idea/cmake.xml
generated
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeSharedSettings">
|
||||
<configurations>
|
||||
<configuration PROFILE_NAME="Debug-fw" ENABLED="true" GENERATION_DIR=".out/fw-debug" CONFIG_NAME="Debug" TOOLCHAIN_NAME="dev-arm-stm32" NO_GENERATOR="true" />
|
||||
<configuration PROFILE_NAME="Release-fw" ENABLED="true" GENERATION_DIR=".out/fw-release" CONFIG_NAME="Release" TOOLCHAIN_NAME="dev-arm-stm32" NO_GENERATOR="true" />
|
||||
<configuration PROFILE_NAME="RelWithDebInfo-fw" ENABLED="true" GENERATION_DIR=".out/fw-relwithdebinfo" CONFIG_NAME="RelWithDebInfo" TOOLCHAIN_NAME="dev-arm-stm32" NO_GENERATOR="true" />
|
||||
<configuration PROFILE_NAME="MinSizeRel-fw" ENABLED="true" GENERATION_DIR=".out/fw-minsizerel" CONFIG_NAME="MinSizeRel" TOOLCHAIN_NAME="dev-arm-stm32" NO_GENERATOR="true" />
|
||||
</configurations>
|
||||
</component>
|
||||
</project>
|
2
.idea/floatpump-firmware.iml
generated
Normal file
2
.idea/floatpump-firmware.iml
generated
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
4
.idea/misc.xml
generated
Normal file
4
.idea/misc.xml
generated
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/floatpump-firmware.iml" filepath="$PROJECT_DIR$/.idea/floatpump-firmware.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
102
README.md
102
README.md
@ -1,3 +1,101 @@
|
||||
# study_research
|
||||
# FloatPUMP - Firmware Repository
|
||||
|
||||
Studienarbeit Semester 7
|
||||
This repository contains the necessary files to completely build the firmware for the FloatPUMP controller.
|
||||
The toolchain used in this project is built up using **docker**. The following sections describe how to setup the
|
||||
jetbrains
|
||||
CLion IDE to automatically use the included docker image to build the project. It also contains some description
|
||||
on how to use OpenOCD to flash the controller using a **STLink-V2** Programmer.
|
||||
|
||||
## Toolchain Setup
|
||||
|
||||
This chapter describes how to setup the CLion IDE to use the toolchain built with docker.
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Install jetbrains CLion IDE
|
||||
- Install Docker
|
||||
- Open the Project by clicking _New project from version control_
|
||||
|
||||
### Build the docker image
|
||||
|
||||
You can build the image by yourself. Alternatively you can pull the image from the robtor.de registry.
|
||||
Open a command line and enter the subdirectory build-tools. There run the follwing command to
|
||||
build the docker image:
|
||||
|
||||
`docker build -t dev-arm-stm32:latest .`
|
||||
|
||||
As an alternative you could open the Dockerfile in this directory using CLion and build it directly out of the IDE!
|
||||
|
||||
### Pulling the image
|
||||
|
||||
This method is currently not supported. Coming soon...
|
||||
|
||||
### Configure toolchain
|
||||
|
||||
First enter the Settings dialog in CLion while the floatpump-firmware project is opened.
|
||||
Under `Build, Execution, Deployment > Toolchain` add a new toolchain and choose the type `docker`.
|
||||
Now setup everything as depicted in this screenshot:
|
||||
![toolchain_settings.png](doc/toolchain_settings.png)
|
||||
|
||||
If you named the image different than dev-arm-stm32:latest, choose the correct image corresponding to your name.
|
||||
|
||||
Usually now the correct CMake build targets should appear under `Build, Execution, Deployment > CMake`.
|
||||
|
||||
### Configure OpenOCD
|
||||
|
||||
To configure OpenOCD for directly flashing and debugging out of CLion go to the BuildTargets dropdown in the
|
||||
header line and click on `Edit configurations`.
|
||||
There add a new configuration for `OpenOCD` and enter the following proerties:
|
||||
![openocd_settings.png](doc/openocd_settings.png)
|
||||
As `Board config file` chosse the correct `floatpump.cfg` file contained in the project root dir.
|
||||
|
||||
## Project structure
|
||||
|
||||
| Folder | Contents |
|
||||
|:--------------------------------|:-----------------------|
|
||||
| .out | Build output directory |
|
||||
| build-tools | Files for building the toolchain|
|
||||
| doc | Files for documentation or inclusion in .md Files|
|
||||
| floatpump/Core | Firmware core source files |
|
||||
| floatpump/Drivers | STM32 HAL and CMSIS Library files |
|
||||
| floatpump/Middlewares/floatpump | Modules for the floatpump firmware |
|
||||
| Middlewares/ST | STM32 Middleware files for USB OTG implementation |
|
||||
| USB_DEVICE | same as above |
|
||||
| net | Folder containing material for external Tasmota device and SmartHome integration |
|
||||
| stm32-cube | Old files from the originating STM32 Cube Project |
|
||||
|
||||
# License
|
||||
| Component | Copyright | License |
|
||||
|:--------- |:----------------------------------------------------------|:---------------------------------------------|
|
||||
| CMSIS | ARM Limited | Apache License 2.0 |
|
||||
| CMSIS Device | ARM Limited - STMicroelectronics | Apache License 2.0 |
|
||||
| STM32F4 HAL | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F4-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F4xx_Nucleo_144 | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F4xx-Nucleo | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F401-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F411E-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F413H-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32F429I-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM324x9I_EVAL | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM324xG_EVAL | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32412G-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32446E_EVAL | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32469I_EVAL | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP STM32469I-Discovery | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP Components | STMicroelectronics | BSD-3-Clause |
|
||||
| BSP Adafruit | STMicroelectronics | BSD-3-Clause |
|
||||
| FreeRTOS kernel | Amazon.com, Inc. or its affiliates | MIT |
|
||||
| FatFS | ChaN - STMicroelectronics | BSD-3-Clause |
|
||||
| LibJPEG | Thomas G. Lane, Guido Vollbe | Independent JPEG Group License |
|
||||
| LwIP | Swedish Institute of Computer Science | BSD-3-Clause |
|
||||
| mbedTLS | ARM Limited | Apache License 2.0 |
|
||||
| STM32_USB_Device_Library | STMicroelectronics | SLA0044 |
|
||||
| STM32_USB_Host_Library | STMicroelectronics | SLA0044 |
|
||||
| STemWin | STMicroelectronics | SLA0044 |
|
||||
| TouchGFX | STMicroelectronics | SLA0044 |
|
||||
| STM32_Audio | STMicroelectronics | SLA0044 |
|
||||
| STM32 Projects | STMicroelectronics | SLA0044 (BSD-3-Clause for basic Examples) |
|
||||
| STM32 Utilities | STMicroelectronics | BSD-3-Clause |
|
||||
|
||||
The default `LICENSE` file applies on all other Components not covered by the table above!
|
@ -1,4 +0,0 @@
|
||||
# Toolchain Setup
|
||||
|
||||
## Prerequisites
|
||||
- Install Docker
|
BIN
doc/openocd_settings.png
Normal file
BIN
doc/openocd_settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 88 KiB |
BIN
doc/toolchain_settings.png
Normal file
BIN
doc/toolchain_settings.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 123 KiB |
@ -326,23 +326,24 @@ int main(void) {
|
||||
|
||||
//Execute Calibrations if necessary
|
||||
if (a_caliblow) {
|
||||
tankLevel0.calibrateLow();
|
||||
controller.execute();
|
||||
HAL_Delay(2000);
|
||||
tankLevel0.calibrateLow();
|
||||
a_caliblow = false;
|
||||
} else if (a_calibhigh) {
|
||||
tankLevel0.calibrateHigh();
|
||||
controller.execute();
|
||||
HAL_Delay(2000);
|
||||
tankLevel0.calibrateHigh();
|
||||
a_calibhigh = false;
|
||||
}
|
||||
|
||||
//Store or restore if necessary
|
||||
if (f_store) {
|
||||
controller.execute();
|
||||
Config_Store::getInstance().saveToFlash();
|
||||
f_store = false;
|
||||
} else if (f_restore) {
|
||||
controller.execute();
|
||||
Config_Store::getInstance().loadFromFlash();
|
||||
HAL_Delay(300);
|
||||
f_restore = false;
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ namespace floatpump {
|
||||
|
||||
|
||||
void saveToFlash() {
|
||||
uint32_t data[11];
|
||||
uint32_t data[12];
|
||||
data[0] = TankCalibLow.getValue();
|
||||
data[1] = TankCalibHigh.getValue();
|
||||
data[2] = TankMinLevel.getValue();
|
||||
@ -72,28 +72,48 @@ namespace floatpump {
|
||||
data[8] = RefillBelow.getValue();
|
||||
data[9] = RefillHysteresis.getValue();
|
||||
data[10] = RefillCooldown.getValue();
|
||||
data[11] = 0xf0f0;
|
||||
|
||||
StoreInFlash(startAddr, data, 11);
|
||||
StoreInFlash(startAddr, data, 12);
|
||||
return;
|
||||
};
|
||||
|
||||
void resetDefaults();
|
||||
|
||||
void loadFromFlash() {
|
||||
uint32_t data[11];
|
||||
ReadFromFlash(startAddr, data, 11);
|
||||
TankCalibLow.setValue(data[0]);
|
||||
TankCalibHigh.setValue(data[1]);
|
||||
TankMinLevel.setValue(data[2]);
|
||||
TankHysteresis.setValue(data[3]);
|
||||
TankPumpInvert.setValue(data[4]);
|
||||
RefillEnable.setValue(data[5]);
|
||||
RefillBlockInvert.setValue(data[6]);
|
||||
RefillBlockEnable.setValue(data[7]);
|
||||
RefillBelow.setValue(data[8]);
|
||||
RefillHysteresis.setValue(data[9]);
|
||||
RefillCooldown.setValue(data[10]);
|
||||
return;
|
||||
uint32_t data[12];
|
||||
ReadFromFlash(startAddr, data, 12);
|
||||
|
||||
//Check if intial values must be loaded
|
||||
if(data[11] == 0xf0f0) {
|
||||
TankCalibLow.setValue(data[0]);
|
||||
TankCalibHigh.setValue(data[1]);
|
||||
TankMinLevel.setValue(data[2]);
|
||||
TankHysteresis.setValue(data[3]);
|
||||
TankPumpInvert.setValue(data[4]);
|
||||
RefillEnable.setValue(data[5]);
|
||||
RefillBlockInvert.setValue(data[6]);
|
||||
RefillBlockEnable.setValue(data[7]);
|
||||
RefillBelow.setValue(data[8]);
|
||||
RefillHysteresis.setValue(data[9]);
|
||||
RefillCooldown.setValue(data[10]);
|
||||
return;
|
||||
} else {
|
||||
//Set default values for fist initialization only
|
||||
//TODO: refactor this, maybe edit linker script to initially store values to correct flash location
|
||||
TankCalibLow.setValue(0);
|
||||
TankCalibHigh.setValue(10000);
|
||||
TankMinLevel.setValue(25);
|
||||
TankHysteresis.setValue(5);
|
||||
TankPumpInvert.setValue(1);
|
||||
RefillEnable.setValue(0);
|
||||
RefillBlockInvert.setValue(0);
|
||||
RefillBlockEnable.setValue(1);
|
||||
RefillBelow.setValue(35);
|
||||
RefillHysteresis.setValue(5);
|
||||
RefillCooldown.setValue(5);
|
||||
saveToFlash();
|
||||
}
|
||||
};
|
||||
|
||||
template<class T>
|
||||
|
@ -19,7 +19,7 @@ namespace floatpump::menu {
|
||||
}
|
||||
|
||||
auto MenuEntryExecute::toString() -> std::string {
|
||||
return buildString({(*m_storage) ? "[--]" : "[XX]"});
|
||||
return buildString({(*m_storage) ? "[-]" : "[X]"});
|
||||
}
|
||||
|
||||
auto MenuEntryNumeric::u_press() -> void {
|
||||
|
Loading…
Reference in New Issue
Block a user