Setting Up Arduino Development for PicoCalc keyboard - clockworkpi/PicoCalc GitHub Wiki
Setting Up Arduino Development for PicoCalc keyboard
This guide walks you through setting up your Arduino environment to develop for the PicoCalc keyboard (STM32F103R8T6) microcontroller using the STM32duino Arduino Core. It also includes instructions to manually install the XPowersLib library.
1. Install Arduino IDE
Download and install the latest version of Arduino IDE for your operating system.
2. Install STM32duino Core via Board Manager
To use STM32 microcontrollers with Arduino, you need to install the STM32duino core.
Steps:
- Open Arduino IDE.
- Go to File → Preferences.
- In the Additional Board Manager URLs field, add the following URL:
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
- Click OK.
- Open Tools → Board → Boards Manager.
- Search for STM32 and install STM32 MCU based boards by STMicroelectronics.
3. Select the Correct Board and Settings
Once the STM32 core is installed, configure the board settings:
- Go to Tools → Board → STM32 Boards → Generic STM32F1 series.
- In Tools menu, configure the following settings:
- Board part number:
Generic F103R8Tx
- Upload method:
STM32CubeProgrammer(Serial)
- Board part number:
4. Install XPowersLib Manually
Instead of installing XPowersLib via the Arduino Library Manager, we will manually clone it into the correct location.
Steps:
- Open a terminal.
- Navigate to your Arduino libraries folder:
cd ~/Arduino/libraries
- Clone the XPowersLib repository from the correct branch:
git clone -b stm32f103r8t6 https://github.com/cuu/XPowersLib.git
This ensures the library is correctly placed for the Arduino IDE to detect it.
5. Get Code
git clone https://github.com/clockworkpi/PicoCalc.git
the keyboard code is in Code/picocalc_keyboard
open Code/picocalc_keyboard/picocalc_keyboard.ino in Arduino IDE
6. Upload Code to PicoCalc Keyboard
To upload your code:
- Connect the picocalc board to your PC using a usb type-c cable.
- Set the DIP 1 to ON
- Long-Press the Power On button to power on.
- Click the Upload button in Arduino IDE.
- After upload, set DIP 1 to OFF
Here is a screenshot of working arduino ide:
DIP switches are on the back of picocalc mainboard
Libraries version info
- STM32 MCU based boards 2.10.0
- XPowersLib 0.2.3 (cuu mod)
Flash pre-compiled firmware
- Put DIP 1 ON
- Connect PicoCalc with USB Type-C cable
- sudo stm32flash -w Bin/PicoCalc_BIOS_v1.2.bin -v -S 0x08000000 /dev/ttyUSB0
- Put DIP 1 OFF
assume we got /dev/ttyUSB0 as port of PicoCalc
here is the sample correct writing firmware logs from linux:
$ sudo stm32flash -w PicoCalc_BIOS_v1.2.bin -v -S 0x08000000 /dev/ttyUSB0
stm32flash 0.7
http://stm32flash.sourceforge.net/
Using Parser : Raw BINARY
Location : 0x8000000
Size : 65536
Interface serial_posix: 57600 8E1
Version : 0x22
Option 1 : 0x00
Option 2 : 0x00
Device ID : 0x0410 (STM32F10xxx Medium-density)
- RAM : Up to 20KiB (512b reserved by bootloader)
- Flash : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08010000 (100.00%) Done.
STM32CubeProgrammer
On other platform,like windows or Mac
we can use the official tool STM32CubeProgrammer to do the flashing job
- Put DIP 1 ON
- Connect PicoCalc with USB Type-C cable
- Open STM32CubeProgrammer with right permissions,on linux maybe need sudo,on windows maybe need the Administrator rights
- Press Connect
- Open file ,load PicoCalc_BIOS_v1.2.bin
- Press Download
- Press Disconnect
- Put DIP 1 OFF
- Power On PicoCalc
here is the sample screenshot:
Extracting firmware
Also if We want extract firmware from keyboard,here is the steps:
- Put DIP 1 ON
- Connect PicoCalc with USB Type-C cable
- sudo stm32flash -r PicoCalc_BIOS_v1.2.bin -S 0x08000000:65536 /dev/ttyUSB0
- Put DIP 1 OFF
here is sample correct extracting logs from linux :
$ sudo stm32flash -r PicoCalc_BIOS_v1.2.bin -S 0x08000000:65536 /dev/ttyUSB0
stm32flash 0.7
http://stm32flash.sourceforge.net/
Interface serial_posix: 57600 8E1
Version : 0x22
Option 1 : 0x00
Option 2 : 0x00
Device ID : 0x0410 (STM32F10xxx Medium-density)
- RAM : Up to 20KiB (512b reserved by bootloader)
- Flash : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Memory read
Read address 0x08010000 (100.00%) Done.
Write firmware bin file back to the keyboard
sudo stm32flash -w PicoCalc_BIOS_v1.2.bin -v -S 0x08000000 /dev/ttyUSB0
sample writing back log:
stm32flash 0.7
http://stm32flash.sourceforge.net/
Using Parser : Raw BINARY
Location : 0x8000000
Size : 65536
Interface serial_posix: 57600 8E1
Version : 0x22
Option 1 : 0x00
Option 2 : 0x00
Device ID : 0x0410 (STM32F10xxx Medium-density)
- RAM : Up to 20KiB (512b reserved by bootloader)
- Flash : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x08010000 (100.00%) Done.
Convert firmware bin to intel hex format
srec_cat PicoCalc_BIOS_v1.2.bin -Binary -offset 0x08000000 -output PicoCalc_BIOS_factory_v1.2.hex -Intel