* Add defines for LED, button and serial port

To make supporting different board layouts easier, this introduces some new defines:

For all platforms:
- `KNX_LED` -  the programming LED, defaults to `LED_BUILTIN`
- `KNX_BUTTON` - the programming button, defaults to `0`

For Arduino platforms:
- `KNX_DEBUG_SERIAL` - the serial port that is used for debugging, defaults to `Serial`
- `KNX_SERIAL` - the serial port used for communication with the TPUART, default depends on platform

* GD32 flash workaround

Addressing #181

At least some GD32 devices seem to require unlocking the flash twice. As the unlock function exits with `HAL_OK` if the flash is already unlocked, STM32 devices can run the same code without issues.

* Add H8I8O and H8C09 configurations to knx-demo

Addressing #181

These configurations both serve as examples for the use of these boards and other custom boards that don't use the standard pinout.

* Add STM32 unlock target

This copies the brute force unlock approach by @pavkriz into a custom target. With this commit, it is possible to automatically unlock e.g. a H8I8O board without leaving the PlatformIO IDE.

See #181
This commit is contained in:
Matthias B
2022-06-08 21:13:34 +02:00
committed by GitHub
parent bd907c242d
commit 8b9ff4fce1
10 changed files with 135 additions and 19 deletions

View File

@@ -100,3 +100,50 @@ lib_deps =
build_flags =
-DMASK_VERSION=0x07B0
-Wno-unknown-pragmas
;--- STM32/GD32 ---
[env:h8i8o]
platform = ststm32
board = genericSTM32F103CB
framework = arduino
; We consider that the this projects is opened within its project directory
; while working with VS Code.
lib_extra_dirs = ../../../
lib_deps =
knx
build_flags =
-DENABLE_HWSERIAL1
-DPIN_SERIAL1_TX=PA9
-DPIN_SERIAL1_RX=PA10
-DKNX_SERIAL=Serial1
-DKNX_BUTTON=PA11
-DKNX_LED=PA12
-DMASK_VERSION=0x07B0
-Wno-unknown-pragmas
extra_scripts = ../scripts/stm32rdu.py
[env:h8c09]
platform = ststm32
board = genericSTM32F103CB
framework = arduino
; We consider that the this projects is opened within its project directory
; while working with VS Code.
lib_extra_dirs = ../../../
lib_deps =
knx
build_flags =
-DENABLE_HWSERIAL1
-DPIN_SERIAL1_TX=PA9
-DPIN_SERIAL1_RX=PA10
-DKNX_SERIAL=Serial1
-DKNX_BUTTON=PB0
-DKNX_LED=PB5
-DMASK_VERSION=0x07B0
-Wno-unknown-pragmas
extra_scripts = ../scripts/stm32rdu.py

34
examples/scripts/stm32rdu.py Executable file
View File

@@ -0,0 +1,34 @@
#!/usr/bin/env python
from subprocess import run
from datetime import datetime, timedelta
from os.path import expanduser
ocddir = expanduser("~/.platformio/packages/tool-openocd/")
chip = "stm32f1x"
def unlock(*args, **kwargs):
print("Please connect the board within the next two minutes.")
endtime = datetime.now() + timedelta(minutes = 1)
ret = 1
while ret != 0 and datetime.now() < endtime:
ret = run(["bin/openocd", "-f", "interface/stlink.cfg", "-f", "target/" + chip + ".cfg", "-c", "init", "-c", "reset halt", "-c", chip + " unlock 0", "-c", "reset halt", "-c", "exit"], cwd = ocddir).returncode
if ret != 0:
print("Timeout")
return ret
try:
Import("env")
except NameError:
import sys
if len(sys.argv) > 1:
chip = sys.argv[1]
if len(sys.argv) > 2:
ocddir = sys.argv[2]
unlock(None, None)
else:
ocddir = env.PioPlatform().get_package_dir("tool-openocd")
options = env.GetProjectOptions()
for option in options:
if "unlock_chip" == option[0]:
chip = option[1]
env.AddCustomTarget("unlock", None, unlock)