The target hardware is this here: https://www.tindie.com/products/onehors ... out-board/
The code is here: https://github.com/GrumpyOldPizza/arduino-STM32L4
Ok, what is special about it ?
The concept was to come up with an Arduino Zero compatible pinout and software layer. There is a 16MB NOR FLASH on the board which is acessable from a sketch as normal local file system, while at the same time it will show up on the host via USB/MSC. Nice for logging to say at least. Overall low-power was the main motivator.
Something that always bothered me about Arduino is the idea of blocking, synchronous io. Most of the things I deal with really shine with asynchronous io. So this port added consistently asynchronous io. For I2C/Wire it looks like this here:
Code: Select all
bool transfer(uint8_t address, const uint8_t *txBuffer, size_t txSize, uint8_t *rxBuffer, size_t rxSize, bool stopBit, void(*callback)(uint8_t));
So either you can get a callback, or periodically check whether the last transfer is done ... A good example for the use is this here: https://github.com/kriswiner/Dragonfly/ ... 0Optimized
A couple of more details (edited as I completely forgot in the original post):
- Full set of CDC, Uart, SPI & Wire classes supported
- Most communication peripherals use automatically DMA whenever possible
- Serial1 uses DMA on RX & TX, Serial2 uses DMA on RX
- SPI, SPI1 and SPI2 use DMA on RX & TX
- Wire uses DMA on RX
- All communication devices are non-blocking internally. Any Arduino API that waits for a device (say Wire.requestFrom()) puts the MCU into a sleep mode till the pending communication is completed
- All communication devices can be used from either within setup()/loop() or interrupt handlers or callbacks
- Peripherals are internally aggressively clock gated. If for example there is no active communication on an I2C bus, the corresponding peripheral is powered down
- analogWriteFrequency() and analogWriteRange() have been added to control the PWM freqeuncy and range of a timer block, so that high precision servo or motor/ESC control can be implemented
- delayMicroseconds() uses the internal CPU Cycle Counter, which is not affected by interrupts
- USB/MSC accesses and local file system accesses from a sketch can be done in parallel (no explicit locking required)
- There is a power failsafe FAT file system embedded
- The internal DAC is available on A0/A1
Ah well, again this is an early alpha, and some bits that are still pending to be added (Servo, RTC to be specific).