* 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

@@ -4,9 +4,13 @@
#include <EEPROM.h>
#include "knx/bits.h"
#ifndef KNX_SERIAL
#define KNX_SERIAL Serial2
#endif
Stm32Platform::Stm32Platform()
#ifndef KNX_NO_DEFAULT_UART
: ArduinoPlatform(&Serial2)
: ArduinoPlatform(&KNX_SERIAL)
#endif
{
}
@@ -44,7 +48,7 @@ uint8_t * Stm32Platform::getEepromBuffer(uint16_t size)
_eepromPtr = new uint8_t[size];
eeprom_buffer_fill();
for (uint16_t i = 0; i < size; ++i)
_eepromPtr[i] = eeprom_buffered_read_byte(i);
_eepromPtr[i] = eeprom_buffered_read_byte(i);
}
return _eepromPtr;
@@ -56,6 +60,11 @@ void Stm32Platform::commitToEeprom()
return;
for (uint16_t i = 0; i < _eepromSize; ++i)
eeprom_buffered_write_byte(i, _eepromPtr[i]);
// For some GD32 chips, the flash needs to be unlocked twice
// and the first call will fail. If the first call is
// successful, the second one (inside eeprom_buffer_flush)
// does nothing.
HAL_FLASH_Unlock();
eeprom_buffer_flush();
}