From 60ac59ab7c37cff8d73ae3d3bdd9f288d9372ba3 Mon Sep 17 00:00:00 2001 From: maxgerhardt Date: Sun, 6 Aug 2023 16:03:34 +0200 Subject: [PATCH] Add first support for official OpenWCH Arduino core --- .github/workflows/examples.yml | 1 + boards/ch32v003f4p6_evt_r0.json | 6 ++++ builder/frameworks/arduino.py | 7 ++++ examples/blinky-arduino/.gitignore | 1 + examples/blinky-arduino/README.md | 24 ++++++++++++++ examples/blinky-arduino/include/README | 39 ++++++++++++++++++++++ examples/blinky-arduino/lib/README | 46 ++++++++++++++++++++++++++ examples/blinky-arduino/platformio.ini | 20 +++++++++++ examples/blinky-arduino/src/main.cpp | 14 ++++++++ examples/blinky-arduino/test/README | 11 ++++++ platform.json | 6 ++++ platform.py | 7 ++-- 12 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 examples/blinky-arduino/.gitignore create mode 100644 examples/blinky-arduino/README.md create mode 100644 examples/blinky-arduino/include/README create mode 100644 examples/blinky-arduino/lib/README create mode 100644 examples/blinky-arduino/platformio.ini create mode 100644 examples/blinky-arduino/src/main.cpp create mode 100644 examples/blinky-arduino/test/README diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index 37c99a2..666e3c0 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -10,6 +10,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] example: - "examples/adc-cpu-temp-none-os" + - "examples/blinky-arduino" - "examples/blinky-arduino-ch32v003" - "examples/blinky-arduino-ch32v307" - "examples/blinky-none-os" diff --git a/boards/ch32v003f4p6_evt_r0.json b/boards/ch32v003f4p6_evt_r0.json index f8a186a..a3e3d7b 100644 --- a/boards/ch32v003f4p6_evt_r0.json +++ b/boards/ch32v003f4p6_evt_r0.json @@ -1,5 +1,11 @@ { "build": { + "arduino": { + "openwch": { + "variant": "CH32V00x/CH32V003F4", + "variant_h": "variant_CH32V003F4.h" + } + }, "f_cpu": "48000000L", "extra_flags": "-DCH32V003F4 -DCH32V00X -DCH32V003", "hwids": [ diff --git a/builder/frameworks/arduino.py b/builder/frameworks/arduino.py index ddc5e8c..896c2fa 100644 --- a/builder/frameworks/arduino.py +++ b/builder/frameworks/arduino.py @@ -32,14 +32,21 @@ mcu = env.BoardConfig().get("build.mcu") core = env.BoardConfig().get("build.core", "") +# https://github.com/AlexanderMandera/arduino-wch32v003 if core == "ch32v003": build_script = join( env.PioPlatform().get_package_dir("framework-arduinoch32v003"), "tools", "platformio-build.py") +# https://github.com/Community-PIO-CH32V/ArduinoCore-CH32V elif core == "ch32v": build_script = join( env.PioPlatform().get_package_dir("framework-arduinoch32v"), "tools", "platformio-build.py") +# https://github.com/openwch/arduino_core_ch32 +elif core == "openwch": + build_script = join( + env.PioPlatform().get_package_dir("framework-arduino-openwch-ch32"), + "tools", "platformio-build.py") else: sys.stderr.write("Error: Don't know which Arduino core to use for %s!\n" % mcu) env.Exit(1) diff --git a/examples/blinky-arduino/.gitignore b/examples/blinky-arduino/.gitignore new file mode 100644 index 0000000..03f4a3c --- /dev/null +++ b/examples/blinky-arduino/.gitignore @@ -0,0 +1 @@ +.pio diff --git a/examples/blinky-arduino/README.md b/examples/blinky-arduino/README.md new file mode 100644 index 0000000..3c7fc7e --- /dev/null +++ b/examples/blinky-arduino/README.md @@ -0,0 +1,24 @@ +How to build PlatformIO based project +===================================== + +1. [Install PlatformIO Core](https://docs.platformio.org/page/core.html) +2. Download [development platform with examples](https://github.com/Community-PIO-CH32V/platform-ch32v/archive/develop.zip) +3. Extract ZIP archive +4. Run these commands: + +```shell +# Change directory to example +$ cd platform-ch32v/examples/blinky-arduino + +# Build project +$ pio run + +# Upload firmware +$ pio run --target upload + +# Upload firmware for the specific environment +$ pio run -e ch32v003f4p6_evt_r0 --target upload + +# Clean build files +$ pio run --target clean +``` diff --git a/examples/blinky-arduino/include/README b/examples/blinky-arduino/include/README new file mode 100644 index 0000000..194dcd4 --- /dev/null +++ b/examples/blinky-arduino/include/README @@ -0,0 +1,39 @@ + +This directory is intended for project header files. + +A header file is a file containing C declarations and macro definitions +to be shared between several project source files. You request the use of a +header file in your project source file (C, C++, etc) located in `src` folder +by including it, with the C preprocessing directive `#include'. + +```src/main.c + +#include "header.h" + +int main (void) +{ + ... +} +``` + +Including a header file produces the same results as copying the header file +into each source file that needs it. Such copying would be time-consuming +and error-prone. With a header file, the related declarations appear +in only one place. If they need to be changed, they can be changed in one +place, and programs that include the header file will automatically use the +new version when next recompiled. The header file eliminates the labor of +finding and changing all the copies as well as the risk that a failure to +find one copy will result in inconsistencies within a program. + +In C, the usual convention is to give header files names that end with `.h'. +It is most portable to use only letters, digits, dashes, and underscores in +header file names, and at most one dot. + +Read more about using header files in official GCC documentation: + +* Include Syntax +* Include Operation +* Once-Only Headers +* Computed Includes + +https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/examples/blinky-arduino/lib/README b/examples/blinky-arduino/lib/README new file mode 100644 index 0000000..6debab1 --- /dev/null +++ b/examples/blinky-arduino/lib/README @@ -0,0 +1,46 @@ + +This directory is intended for project specific (private) libraries. +PlatformIO will compile them to static libraries and link into executable file. + +The source code of each library should be placed in a an own separate directory +("lib/your_library_name/[here are source files]"). + +For example, see a structure of the following two libraries `Foo` and `Bar`: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- README --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/examples/blinky-arduino/platformio.ini b/examples/blinky-arduino/platformio.ini new file mode 100644 index 0000000..04bbc5c --- /dev/null +++ b/examples/blinky-arduino/platformio.ini @@ -0,0 +1,20 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter, extra scripting +; Upload options: custom port, speed and extra flags +; Library options: dependencies, extra library storages +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env] +platform = ch32v +framework = arduino +monitor_speed = 115200 +; use OpenWCH core impelmetnation +board_build.core = openwch +; uncomment this to use USB bootloader upload via WCHISP +;upload_protocol = isp + +[env:ch32v003f4p6_evt_r0] +board = ch32v003f4p6_evt_r0 diff --git a/examples/blinky-arduino/src/main.cpp b/examples/blinky-arduino/src/main.cpp new file mode 100644 index 0000000..6b77633 --- /dev/null +++ b/examples/blinky-arduino/src/main.cpp @@ -0,0 +1,14 @@ +#include + +/* PC1 as blinky LED, change here as needed */ +#define LED PC1 +void setup() { + pinMode(LED, OUTPUT); +} + +void loop() { + digitalWrite(LED, HIGH); + delay(1000); + digitalWrite(LED, LOW); + delay(1000); +} \ No newline at end of file diff --git a/examples/blinky-arduino/test/README b/examples/blinky-arduino/test/README new file mode 100644 index 0000000..df5066e --- /dev/null +++ b/examples/blinky-arduino/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PIO Unit Testing and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PIO Unit Testing: +- https://docs.platformio.org/page/plus/unit-testing.html diff --git a/platform.json b/platform.json index 1eef68d..b1e603a 100644 --- a/platform.json +++ b/platform.json @@ -104,6 +104,12 @@ "owner": "platformio", "version": "https://github.com/Community-PIO-CH32V/ArduinoCore-CH32V.git" }, + "framework-arduino-openwch-ch32": { + "type": "framework", + "optional": true, + "owner": "platformio", + "version": "https://github.com/Community-PIO-CH32V/arduino_core_ch32.git" + }, "toolchain-riscv": { "type": "toolchain", "owner": "platformio", diff --git a/platform.py b/platform.py index 5ab9101..203d87c 100644 --- a/platform.py +++ b/platform.py @@ -62,11 +62,14 @@ def configure_default_packages(self, variables, targets): elif IS_MAC: self.packages["tool-minichlink"]["version"] = "https://github.com/Community-PIO-CH32V/tool-minichlink.git#mac" frameworks = variables.get("pioframework", []) + build_core = variables.get("board_build.core", board_config.get("build.core", "arduino")) if "arduino" in frameworks: - if board_config.get("build.mcu", "").lower().startswith("ch32v003"): + if build_core == "ch32v003": self.frameworks["arduino"]["package"] = "framework-arduinoch32v003" - else: + elif build_core == "ch32v": self.frameworks["arduino"]["package"] = "framework-arduinoch32v" + elif build_core == "openwch": + self.frameworks["arduino"]["package"] = "framework-arduino-openwch-ch32" return super().configure_default_packages(variables, targets) def _add_default_debug_tools(self, board):