2021-12-01 18:38:41 +08:00
|
|
|
|
<p align="center">
|
2022-02-20 07:44:38 +08:00
|
|
|
|
<img alt="logo" src="document/image/144221063-a85b2cb0-0416-493f-9afb-56cff31e977d.jpg" width="300">
|
2021-12-01 18:38:41 +08:00
|
|
|
|
</p>
|
|
|
|
|
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">PikaScript</h1>
|
2022-01-08 10:19:49 +00:00
|
|
|
|
<h4 align="center">跨平台的超轻量级嵌入式 Python 引擎</h4>
|
2021-12-01 18:38:41 +08:00
|
|
|
|
<p align="center">
|
|
|
|
|
<a href="https://gitee.com/lyon1998/pikascript/stargazers"><img src="https://gitee.com/lyon1998/pikascript/badge/star.svg?theme=gvp"></a>
|
|
|
|
|
<a href="https://gitee.com/lyon1998/pikascript/members"><img src="https://gitee.com/lyon1998/pikascript/badge/fork.svg?theme=gvp"></a>
|
|
|
|
|
<a href="https://github.com/pikastech/pikascript/stargazers"><img src="https://img.shields.io/github/stars/pikastech/pikascript?style=flat-square&logo=GitHub"></a>
|
|
|
|
|
<a href="https://github.com/pikastech/pikascript/network/members"><img src="https://img.shields.io/github/forks/pikastech/pikascript?style=flat-square&logo=GitHub"></a>
|
|
|
|
|
<a href="https://github.com/pikastech/pikascript/blob/master/LICENSE"><img src="https://img.shields.io/github/license/pikastech/pikascript.svg?style=flat-square"></a>
|
2021-12-12 10:30:01 +00:00
|
|
|
|
<a href="https://github.com/pikasTech/pikascript/actions/workflows/CI.yml"><img src="https://github.com/pikasTech/pikascript/actions/workflows/CI.yml/badge.svg"> </a>
|
2021-12-01 18:38:41 +08:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
2021-12-03 09:02:00 +08:00
|
|
|
|
<a href="https://whycan.com/f_55.html" >论坛</a> |
|
2022-03-06 01:40:19 +08:00
|
|
|
|
<a href="https://pikadoc.readthedocs.io/zh/latest/index.html" >文档中心</a> |
|
2022-01-06 10:00:25 +00:00
|
|
|
|
<a href="https://space.bilibili.com/5365336/channel/seriesdetail?sid=1034902">视频</a> |
|
2022-02-01 11:59:19 +00:00
|
|
|
|
<a href="https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.52de3d0dt7rqAx&ft=t&id=654947372034">开发板</a> |
|
2022-03-06 01:40:19 +08:00
|
|
|
|
<a href="https://pikadoc.readthedocs.io/zh/latest/%E4%BD%BF%E7%94%A8%20BSP%20%E5%B7%A5%E7%A8%8B.html">BSP</a> |
|
|
|
|
|
<a href="https://pikadoc.readthedocs.io/zh/latest/%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%8E%E6%A8%A1%E5%9D%97%E7%AE%A1%E7%90%86.html">包管理器</a> |
|
|
|
|
|
<a href="https://pikadoc.readthedocs.io/zh/latest/%E4%BB%8E%20RT-Thread%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%BC%80%E5%A7%8B.html" >RT-Thread 软件包</a> |
|
|
|
|
|
<a href="https://pikadoc.readthedocs.io/zh/latest/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E%E7%A4%BE%E5%8C%BA%E8%B4%A1%E7%8C%AE.html" >参与贡献</a> |
|
|
|
|
|
<a href="https://pikadoc.readthedocs.io/zh/latest/%E5%95%86%E4%B8%9A%E5%90%88%E4%BD%9C%E6%96%B9%E5%BC%8F.html">商业合作</a>
|
2021-12-01 18:38:41 +08:00
|
|
|
|
</p>
|
2021-09-23 00:16:49 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
[![image](document/image/147997370-ff37b6e7-25b2-4174-aa64-c1fb92cede04.png)](https://pikastech.github.io/pikascript/dev/bench/)
|
2022-01-04 08:55:17 +00:00
|
|
|
|
|
2022-03-15 10:16:07 +08:00
|
|
|
|
|
2021-10-24 00:05:52 +08:00
|
|
|
|
# 1.简介
|
|
|
|
|
|
2022-02-18 04:02:52 +00:00
|
|
|
|
PikaScript 是一个完全重写的超轻量级 python 引擎,零依赖,零配置,可以在 **Flash ≤ 32KB,RAM≤ 4KB** 的平台下运行(如 stm32g030c8 和 stm32f103c8),极易部署和扩展,具有大量的中文文档和视频资料。
|
2021-11-13 15:51:26 +08:00
|
|
|
|
|
2022-02-19 15:47:24 +00:00
|
|
|
|
PikaScript 具有框架式 C 模块开发工具,只要用 Python 写好调用 API ,就能够自动连接到 C 模块,非常方便快捷。不用手动处理任何全局表、宏定义、等等。
|
2021-12-27 08:19:00 +00:00
|
|
|
|
|
2022-02-14 17:04:30 +00:00
|
|
|
|
PikaScript 也支持 MDK、iar、RT-studio 等常见 ide 开发,能够轻松地调试 C 模块。
|
2021-12-27 08:19:00 +00:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![output_Kgj52R](document/image/132940452-d07d766c-5aa7-4187-96f2-66b02984e82c.gif)
|
2021-10-24 00:05:52 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
<img src="document/image/147799764-5db2cb30-ee74-4cde-a2bd-b91c358ae3d9.png" width="500"/>
|
2021-10-24 00:05:52 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/138021445-13643518-b0a3-4872-a290-5dec27697837.png)
|
2021-10-24 00:05:52 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
# 获取 PikaScript:
|
2021-11-09 13:32:55 +08:00
|
|
|
|
|
2022-02-05 07:17:14 +00:00
|
|
|
|
## 使用在线图形化工程生成器
|
|
|
|
|
生成器地址:
|
2022-02-05 07:14:52 +00:00
|
|
|
|
http://pikascript.com
|
2022-02-20 07:44:38 +08:00
|
|
|
|
<img src="document/image/152632673-019a7f92-7b7f-4fb5-92b7-4ae4c26ec865.png" width="500"/>
|
2022-02-05 07:14:52 +00:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
## 使用 Pika 包管理器[PikaPackage.exe](https://gitee.com/Lyon1998/pikascript/attach_files/907478/download)
|
2021-11-09 13:32:55 +08:00
|
|
|
|
|
2021-12-23 03:41:32 +00:00
|
|
|
|
1. 直接运行[PikaPackage.exe](https://gitee.com/Lyon1998/pikascript/attach_files/907478/download), 自动下载并更新pikaScript主仓库(文件在当前磁盘的/tmp/pikaScript文件夹)
|
2021-11-09 13:32:55 +08:00
|
|
|
|
|
|
|
|
|
2. 将[requestment.txt](/bsp/stm32g030c8/pikascript/requestment.txt)放在[PikaPackage.exe](../../raw/master/tools/pikaPackageManager/pikaPackage.exe)同一文件夹下, 运行[pikaPackage.exe](../../raw/master/tools/pikaPackageManager/pikaPackage.exe), 自动在当前目录下安装[内核](../../tree/master/src)、[预编译器](../../tree/master/tools/pikaCompiler)与[模块](../../tree/master/package)。
|
|
|
|
|
|
|
|
|
|
3. 已发布的模块列表:[packages.toml](/packages.toml)
|
|
|
|
|
|
2021-11-11 15:02:32 +08:00
|
|
|
|
# 快速上手
|
2021-11-11 14:42:59 +08:00
|
|
|
|
|
2022-01-01 15:49:44 +00:00
|
|
|
|
可使用[仿真工程](document/1.三分钟快速上手.md)快速上手,无需硬件,也可以使用官方支持的开发板[Pika派—Zero](https://item.taobao.com/item.htm?spm=a2126o.success.result.1.76224831Y0X1gO&id=654947372034),上手即玩。
|
2021-11-11 14:42:59 +08:00
|
|
|
|
|
2022-03-06 01:40:19 +08:00
|
|
|
|
[Pika派python编程游玩指南](https://pikadoc.readthedocs.io/zh/latest/Pika%20%E6%B4%BE%E5%BC%80%E5%8F%91%E6%9D%BF%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B.html)
|
2022-01-02 02:42:29 +00:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
[![PikaPi-Zero](document/image/147940229-a6b8ebf5-41db-4614-a525-448f47de0a67.png)](https://item.taobao.com/item.htm?spm=a2126o.success.result.1.76224831Y0X1gO&id=654947372034)
|
2021-11-11 14:42:59 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
开发板基于 STM32G030C8T6 小资源 MCU,仅 64kB Flash,8kB RAM 即可运行完整解释器,和完整的外设驱动(GPIO、TIME、IIC、UART、ADC、PWM、RGB、KEY、LCD)。板载 CH340 USB 转串口芯片,Type-C 接口,支持串口下载 python 脚本,板载4颗 RGB 灯,可选配[LCD屏幕](https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-23991764791.12.16f97c58fsLjVk&id=660745643102)。
|
2021-11-11 14:42:59 +08:00
|
|
|
|
|
2021-12-04 10:22:35 +08:00
|
|
|
|
# 开发手册
|
|
|
|
|
|
2022-03-06 01:40:19 +08:00
|
|
|
|
### [点此进入文档中心](https://pikadoc.readthedocs.io/zh/latest/index.html)
|
2021-12-04 10:22:35 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/144693400-99f9c038-76fd-4d95-b3d2-137bd972d580.png)
|
2021-12-04 10:22:35 +08:00
|
|
|
|
|
2021-10-23 23:48:33 +08:00
|
|
|
|
# 视频教程
|
|
|
|
|
|
2021-12-29 10:15:14 +00:00
|
|
|
|
### [点此进入视频中心](https://space.bilibili.com/5365336/channel/seriesdetail?sid=1034902)
|
2021-12-04 10:17:15 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/142173892-35e33f36-413c-4422-8470-b873b7c3bd71.png)
|
2021-11-17 17:28:28 +08:00
|
|
|
|
|
2021-12-04 10:22:35 +08:00
|
|
|
|
# 交流论坛
|
2021-10-03 19:20:02 +08:00
|
|
|
|
|
2021-12-04 10:22:35 +08:00
|
|
|
|
### [点此进入论坛](https://whycan.com/f_55.html)
|
2021-11-25 22:03:00 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/144693543-4aee46c8-b6c8-4282-99c4-e07271a4ba5f.png)
|
2021-11-25 22:10:27 +08:00
|
|
|
|
|
2021-10-01 09:13:31 +08:00
|
|
|
|
## 文件目录
|
2021-10-04 01:21:48 +08:00
|
|
|
|
[src](../../tree/master/src) - 内核源码
|
2021-10-04 01:13:45 +08:00
|
|
|
|
|
2021-10-04 01:21:48 +08:00
|
|
|
|
[bsp](../../tree/master/bsp) - 裸机芯片/板卡支持
|
2021-10-04 01:13:45 +08:00
|
|
|
|
|
2021-10-04 01:21:48 +08:00
|
|
|
|
[port](../../tree/master/port) - 操作系统支持
|
2021-10-01 09:13:43 +08:00
|
|
|
|
|
2021-10-04 01:21:48 +08:00
|
|
|
|
[document](../../tree/master/document) - 开发文档
|
2021-10-01 09:13:43 +08:00
|
|
|
|
|
2021-10-04 01:21:48 +08:00
|
|
|
|
[examples](../../tree/master/examples) - 示例脚本
|
2021-10-01 09:13:43 +08:00
|
|
|
|
|
2021-10-04 01:21:48 +08:00
|
|
|
|
[package](../../tree/master/package) - 模块目录
|
2021-10-04 01:14:52 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
[pikaCompiler](../../tree/master/tools/pikaCompiler) - 使用 rust 编写的预编译器
|
2021-10-01 09:13:43 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
[pikaPackageManager](../../tree/master/tools/pikaPackageManager) - 使用 go 编写的模块管理器
|
2021-09-23 00:17:12 +08:00
|
|
|
|
|
2021-12-14 11:08:00 +00:00
|
|
|
|
# 2.平台支持列表
|
|
|
|
|
|
|
|
|
|
## MCU support
|
|
|
|
|
|MCU|bsp|gpio|uart|pwm|adc|i2c|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
|
|
|
|
|stm32g030c8|√|√|√|√|√|√|
|
|
|
|
|
|stm32g070cB|√|√|√|√|√|√|
|
|
|
|
|
|stm32f103c8|√|√|√|√|√|√|
|
|
|
|
|
|stm32f103rb|√|√|√|√|√|√|
|
2022-02-22 15:45:52 +08:00
|
|
|
|
|stm32f103ze|√|√|√|√|√|√|
|
2021-12-14 11:08:00 +00:00
|
|
|
|
|stm32f103rc|√|√|√|√|√|√|
|
2022-02-27 23:43:41 +08:00
|
|
|
|
|stm32f401cc|√|√|√|√|√|√|
|
2022-02-27 19:56:24 +08:00
|
|
|
|
|stm32f411ce|√|√|√|√|√|√|
|
2022-01-18 15:57:24 +08:00
|
|
|
|
|stm32f407ze|√| | | | | |
|
2022-02-22 17:01:59 +08:00
|
|
|
|
|stm32f407zg|√| | | | | |
|
2022-03-26 21:29:37 +08:00
|
|
|
|
|stm32h750vb|√| | | | | |
|
2022-01-25 13:35:23 +08:00
|
|
|
|
|stm32f051r8|√| | | | | |
|
2022-03-26 21:14:39 +08:00
|
|
|
|
|ch582|√|√|√| |√|√|
|
2021-12-14 11:08:00 +00:00
|
|
|
|
|ch32v103r8t6|√|√| | | | |
|
|
|
|
|
|cm32m101a|√| | | | | |
|
2022-03-28 17:29:34 +08:00
|
|
|
|
|w801|√| | | | | |
|
2022-02-18 03:35:21 +00:00
|
|
|
|
|w806|√|√|√|√|√|√|
|
2021-12-14 11:08:00 +00:00
|
|
|
|
|apm32f030r8|√| | | | | |
|
|
|
|
|
|apm32e103vb|√| | | | | |
|
|
|
|
|
|bl-706|√| | | | | |
|
2021-12-27 19:09:51 +08:00
|
|
|
|
|Raspberry Pico|√| | | | | |
|
|
|
|
|
|ESP32C3|√| | | | | |
|
2022-01-18 07:15:16 +00:00
|
|
|
|
|TC264D|√| | | | | |
|
|
|
|
|
|devc|√| | | | | |
|
2021-12-27 16:07:36 +08:00
|
|
|
|
|
2021-12-14 11:08:00 +00:00
|
|
|
|
## Board support
|
|
|
|
|
|Board|bsp|gpio|uart|pwm|adc|i2c|rgb|lcd|arm-2d|
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|[Pika-Pi-Zero](https://item.taobao.com/item.htm?spm=a230r.1.14.1.4f2e27a8R0qWJn&id=654947372034&ns=1&abbucket=15#detail)|√|√|√|√|√|√|√|√|√|
|
2021-12-21 12:32:55 +00:00
|
|
|
|
|
|
|
|
|
|Board|bsp|arm-2d|
|
|
|
|
|
|---|---|---|
|
|
|
|
|
|QEMU-arm2d|√|√|
|
2021-12-02 16:02:02 +08:00
|
|
|
|
|
2021-12-21 12:15:06 +00:00
|
|
|
|
|Board|bsp|LED|KEY|
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|SmartLoong|√|√|√|√|
|
|
|
|
|
|
2021-12-21 16:18:26 +00:00
|
|
|
|
## OS support
|
|
|
|
|
|
2022-02-28 20:49:22 +08:00
|
|
|
|
|OS|port|GPIO|TIME|PWM|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|RT-Thread|√|√|√|√|
|
|
|
|
|
|vsf|√|√| | |
|
2021-12-21 16:18:26 +00:00
|
|
|
|
|
2021-12-23 02:49:38 +00:00
|
|
|
|
|OS|port|Google Test|Benchmark|
|
2021-12-21 16:18:26 +00:00
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|linux|√|√|√|
|
|
|
|
|
|
2022-04-09 22:04:15 +08:00
|
|
|
|
## 相关开源项目
|
|
|
|
|
### PikaScript Bluepill Demo In PlatformIO — Python-like REPL 🐍🔌
|
|
|
|
|
https://github.com/maxgerhardt/pikascript-pio-bluepill
|
|
|
|
|
|
2021-09-18 22:14:17 +08:00
|
|
|
|
# 3.特性
|
2021-09-07 08:55:06 +08:00
|
|
|
|
### (1)运行环境
|
2021-09-07 08:54:06 +08:00
|
|
|
|
|
2021-09-07 19:03:58 +08:00
|
|
|
|
支持裸机运行,可运行于 **RAM ≥ 4kB** ,**FLASH ≥ 32kB** 的mcu中,如stm32g030, stm32f103c8t6,esp8266。
|
2021-08-26 16:28:09 +08:00
|
|
|
|
|
2021-09-07 08:55:06 +08:00
|
|
|
|
### (2)开发环境
|
2022-01-08 10:19:49 +00:00
|
|
|
|
支持串口下载 Python 脚本。
|
2021-09-27 11:27:11 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
<img src="document/image/134841230-85de6734-8467-4245-93a5-d452b5022b42.gif" width="400" alt="微信交流群"/><br/>
|
2021-09-07 08:54:06 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
支持 Keil、IAR、rt-thread studio、segger embedded studio 等IDE开发。
|
2021-09-06 22:48:51 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
支持 CMake、makeFile、Scons 等构建工具
|
2021-09-06 20:22:17 +08:00
|
|
|
|
|
2021-09-06 20:29:42 +08:00
|
|
|
|
零依赖,零配置,开箱即用,极易集成进已有的C工程。
|
2021-09-06 20:26:35 +08:00
|
|
|
|
|
2021-09-06 20:25:49 +08:00
|
|
|
|
极易拓展自定义的C原生函数。
|
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
支持跨平台,可在 linux 环境开发内核。
|
2021-09-07 08:54:06 +08:00
|
|
|
|
|
2021-09-07 08:55:06 +08:00
|
|
|
|
### (3)语法特性
|
2021-09-07 08:54:06 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
使用 python3 标准语法的子集。
|
2021-08-27 10:15:35 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
在编译时支持 python 类和方法定义,完整支持封装、继承、多态、模块功能 - 基于 [Pika 预编译器](../../tree/master/tools/pikaCompiler)。
|
2021-08-27 10:11:19 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
在运行时支持 python 方法调用、变量定义、对象构造、对象释放、控制流(if\while) - 基于 [Pika 运行时内核](../../tree/master/src/package/pikascript/pikascript-core)。
|
2021-08-09 09:45:59 +08:00
|
|
|
|
|
2022-04-09 08:52:01 +08:00
|
|
|
|
|语法|编译时|运行时|Shell|
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|模块定义 |√|-|-|
|
|
|
|
|
|模块导入 |√|-|-|
|
2022-04-11 22:58:12 +08:00
|
|
|
|
|类定义 |√|√|√|
|
|
|
|
|
|类继承 |√|√|√|
|
|
|
|
|
|方法定义 |√|√|√|
|
|
|
|
|
|方法重载 |√|√|√|
|
2022-04-09 08:52:01 +08:00
|
|
|
|
|方法调用 |√|√|√|
|
|
|
|
|
|参数定义 |√|√|√|
|
|
|
|
|
|参数赋值 |√|√|√|
|
|
|
|
|
|对象新建 |√|√|√|
|
|
|
|
|
|对象销毁 |√|√|√|
|
|
|
|
|
|对象嵌套 |√|√|√|
|
|
|
|
|
|控制流 |√|√|√|
|
2021-10-25 16:18:23 +08:00
|
|
|
|
|
2021-10-25 16:19:35 +08:00
|
|
|
|
#### 操作符
|
2021-10-25 16:18:23 +08:00
|
|
|
|
|
2021-11-28 17:45:51 +08:00
|
|
|
|
| + | - | * | / | == | > | < | >= | <= | % | ** | // | != | & | >> | << | and | or | not | += | -= | *= | /= |
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
2022-03-31 15:40:09 +08:00
|
|
|
|
|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|√|
|
2021-10-25 16:18:23 +08:00
|
|
|
|
|
2021-10-25 16:19:35 +08:00
|
|
|
|
#### 控制流
|
2021-10-25 16:18:23 +08:00
|
|
|
|
|
2021-12-02 11:17:25 +08:00
|
|
|
|
| if | while | for | else | elif | break | continue |
|
|
|
|
|
| --- | --- | --- | --- | --- | --- | --- |
|
2021-12-29 22:53:27 +08:00
|
|
|
|
|√|√|√|√|√|√|√|
|
2021-10-25 16:18:23 +08:00
|
|
|
|
|
2022-01-07 10:05:04 +08:00
|
|
|
|
#### 数据结构
|
|
|
|
|
|
|
|
|
|
| string | list | dict |
|
|
|
|
|
| --- | --- | --- |
|
|
|
|
|
|√|√|√|
|
|
|
|
|
|
2021-09-07 08:55:06 +08:00
|
|
|
|
### (4)源码规范
|
2021-08-02 14:03:52 +08:00
|
|
|
|
|
2021-09-06 20:32:46 +08:00
|
|
|
|
注重源码可读性,命名规范,标准统一,完全不使用宏,几乎不使用全局变量。
|
2021-08-05 13:54:12 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
完整的 googletest 单元测试。
|
2021-08-05 13:54:12 +08:00
|
|
|
|
|
2021-10-06 08:07:12 +08:00
|
|
|
|
# 4.交流与技术支持:
|
2021-08-05 14:20:07 +08:00
|
|
|
|
|
2022-04-19 17:04:40 +00:00
|
|
|
|
## Tencent QQ Group:
|
|
|
|
|
|
|
|
|
|
<img src="document/image/136304186-e49610e4-ce01-4524-99b6-b56842d56411.png" width="300" alt="微信交流群"/><br/>
|
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
## Tencent QQ:
|
|
|
|
|
645275593
|
2021-08-30 10:36:07 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
## E-mail:
|
|
|
|
|
645275593@qq.com
|
2021-08-30 10:36:07 +08:00
|
|
|
|
|
2021-09-13 15:07:12 +08:00
|
|
|
|
|
|
|
|
|
|
2021-10-01 09:09:43 +08:00
|
|
|
|
|
|
|
|
|
|
2022-04-19 17:04:40 +00:00
|
|
|
|
# 5.Demo展示
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
## Demo 01 GPIO
|
|
|
|
|
|
|
|
|
|
``` python
|
|
|
|
|
import PikaStdLib
|
|
|
|
|
import STM32G0
|
|
|
|
|
|
|
|
|
|
mem = PikaStdLib.MemChecker()
|
|
|
|
|
io1 = STM32G0.GPIO()
|
|
|
|
|
time = STM32G0.Time()
|
|
|
|
|
|
|
|
|
|
io1.init()
|
|
|
|
|
io1.setPin('PA8')
|
|
|
|
|
io1.setMode('out')
|
|
|
|
|
io1.enable()
|
|
|
|
|
io1.low()
|
|
|
|
|
|
|
|
|
|
print('hello pikascript')
|
|
|
|
|
print('mem.max :')
|
|
|
|
|
mem.max()
|
|
|
|
|
print('mem.now :')
|
|
|
|
|
mem.now()
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
io1.low()
|
|
|
|
|
time.sleep_ms(500)
|
|
|
|
|
io1.high()
|
|
|
|
|
time.sleep_ms(500)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
```
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![Hnet-image (2)](document/image/132943428-f2b365ca-140e-42f4-936c-db6a7d9f8dee.gif)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
## Demo 02 USART
|
|
|
|
|
|
|
|
|
|
``` python
|
|
|
|
|
import PikaStdLib
|
|
|
|
|
import STM32G0
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
time = STM32G0.Time()
|
|
|
|
|
uart = STM32G0.UART()
|
|
|
|
|
uart.init()
|
|
|
|
|
uart.setId(1)
|
|
|
|
|
uart.setBaudRate(115200)
|
|
|
|
|
uart.enable()
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
while True:
|
|
|
|
|
time.sleep_ms(500)
|
|
|
|
|
readBuff = uart.read(2)
|
|
|
|
|
print('read 2 char:')
|
|
|
|
|
print(readBuff)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
```
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![Hnet-image (3)](document/image/132943365-0f7059b3-4f9d-4989-a5ec-2cce72b0cc96.gif)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
## Demo 03 ADC
|
|
|
|
|
|
|
|
|
|
``` python
|
|
|
|
|
import PikaStdLib
|
|
|
|
|
import STM32G0
|
|
|
|
|
|
|
|
|
|
time = STM32G0.Time()
|
|
|
|
|
adc1 = STM32G0.ADC()
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
adc1.init()
|
|
|
|
|
adc1.setPin('PA1')
|
|
|
|
|
adc1.enable()
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
while True:
|
|
|
|
|
val = adc1.read()
|
|
|
|
|
print('adc1 value:')
|
|
|
|
|
print(val)
|
|
|
|
|
time.sleep_ms(500)
|
|
|
|
|
|
|
|
|
|
```
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![mmexport1631351523907](document/image/132944185-0a01b1ba-8cf7-4f9f-9d73-fe9cbcd52f0b.png)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
## Demo 04 PWM output
|
|
|
|
|
|
2022-01-10 23:07:28 +08:00
|
|
|
|
``` python
|
2022-01-10 08:47:13 +00:00
|
|
|
|
import PikaStdLib
|
|
|
|
|
import STM32G0
|
|
|
|
|
|
|
|
|
|
time = STM32G0.Time()
|
|
|
|
|
pwm = STM32G0.PWM()
|
|
|
|
|
pwm.setPin('PA8')
|
|
|
|
|
pwm.setFrequency(2000)
|
|
|
|
|
pwm.setDuty(0.5)
|
|
|
|
|
pwm.enable()
|
|
|
|
|
|
|
|
|
|
while True:
|
|
|
|
|
time.sleep_ms(500)
|
|
|
|
|
pwm.setDuty(0.5)
|
|
|
|
|
time.sleep_ms(500)
|
|
|
|
|
pwm.setDuty(0.001)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Demo 05 RGB
|
|
|
|
|
|
|
|
|
|
``` python
|
|
|
|
|
import STM32G0
|
|
|
|
|
import PikaPiZero
|
|
|
|
|
import PikaStdLib
|
|
|
|
|
|
|
|
|
|
rgb = PikaPiZero.RGB()
|
|
|
|
|
mem = PikaStdLib.MemChecker()
|
|
|
|
|
|
|
|
|
|
rgb.init()
|
|
|
|
|
rgb.enable()
|
|
|
|
|
|
|
|
|
|
print('hello 2')
|
|
|
|
|
print('mem used max:')
|
|
|
|
|
mem.max()
|
2021-09-23 14:14:14 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
while True:
|
|
|
|
|
print('flowing')
|
|
|
|
|
rgb.flow()
|
2021-09-23 14:14:14 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Demo 06 Snake(Need LCD)
|
|
|
|
|
|
|
|
|
|
``` python
|
|
|
|
|
from PikaObj import *
|
|
|
|
|
import PikaStdLib
|
|
|
|
|
import PikaPiZero
|
|
|
|
|
import STM32G0
|
2022-01-10 16:51:11 +08:00
|
|
|
|
|
|
|
|
|
# hardware init
|
|
|
|
|
lcd = PikaPiZero.LCD()
|
|
|
|
|
lcd.init()
|
|
|
|
|
lcd.clear('white')
|
|
|
|
|
key = PikaPiZero.KEY()
|
|
|
|
|
key.init()
|
|
|
|
|
time = STM32G0.Time()
|
|
|
|
|
x_max = 120
|
|
|
|
|
y_max = 150
|
|
|
|
|
|
|
|
|
|
# snake init
|
|
|
|
|
s = PikaPiZero.Point()
|
|
|
|
|
w = 9
|
|
|
|
|
h = 9
|
|
|
|
|
s.x = 50
|
|
|
|
|
s.y = 10
|
|
|
|
|
len = 0
|
|
|
|
|
while len < 3:
|
|
|
|
|
b = s
|
2022-01-10 08:47:13 +00:00
|
|
|
|
i = 0
|
2022-01-10 16:51:11 +08:00
|
|
|
|
while i < len:
|
|
|
|
|
b = b.next
|
2022-01-10 08:47:13 +00:00
|
|
|
|
i = i + 1
|
2022-01-10 16:51:11 +08:00
|
|
|
|
b.next = PikaPiZero.Point()
|
|
|
|
|
b.next.x = b.x - 10
|
|
|
|
|
b.next.y = b.y
|
|
|
|
|
b.next.prev = b
|
|
|
|
|
len = len + 1
|
|
|
|
|
# ring link
|
|
|
|
|
b.next = s
|
|
|
|
|
s.prev = b
|
|
|
|
|
|
|
|
|
|
i = 0
|
|
|
|
|
b = s
|
|
|
|
|
while i < len:
|
|
|
|
|
lcd.fill(b.x, b.y, w, h, 'blue')
|
|
|
|
|
b = b.next
|
|
|
|
|
i = i + 1
|
|
|
|
|
|
|
|
|
|
print('snake lengh')
|
|
|
|
|
print(len)
|
|
|
|
|
|
|
|
|
|
# fruit init
|
|
|
|
|
f = PikaPiZero.Point()
|
|
|
|
|
f.x = 30
|
|
|
|
|
f.y = 20
|
|
|
|
|
lcd.fill(f.x, f.y, w, h, 'green')
|
|
|
|
|
|
|
|
|
|
# memory check
|
2022-01-10 08:47:13 +00:00
|
|
|
|
mem = PikaStdLib.MemChecker()
|
|
|
|
|
print('mem used max:')
|
|
|
|
|
mem.max()
|
2022-01-10 16:51:11 +08:00
|
|
|
|
|
|
|
|
|
# main loop
|
|
|
|
|
d = 0
|
2022-01-10 08:47:13 +00:00
|
|
|
|
isUpdate = 1
|
2022-01-10 16:51:11 +08:00
|
|
|
|
isEat = 0
|
2022-01-10 08:47:13 +00:00
|
|
|
|
while True:
|
|
|
|
|
if isUpdate:
|
2022-01-10 16:51:11 +08:00
|
|
|
|
# isUpdate = 0
|
|
|
|
|
# check eat fruit
|
|
|
|
|
if f.x == s.x and f.y == s.y:
|
|
|
|
|
# have eat fruit
|
|
|
|
|
isEat = 1
|
|
|
|
|
f.x = f.x + 30
|
|
|
|
|
if f.x > x_max:
|
|
|
|
|
f.x = f.x - x_max
|
|
|
|
|
f.y = f.y + 30
|
|
|
|
|
if f.y > y_max:
|
|
|
|
|
f.y = f.y - y_max
|
|
|
|
|
lcd.fill(f.x, f.y, w, h, 'green')
|
|
|
|
|
# move snake by the direction
|
|
|
|
|
if d == 0:
|
|
|
|
|
x_new = s.x + 10
|
|
|
|
|
y_new = s.y
|
|
|
|
|
if x_new > x_max:
|
|
|
|
|
x_new = 0
|
|
|
|
|
elif d == 1:
|
|
|
|
|
x_new = s.x
|
|
|
|
|
y_new = s.y - 10
|
|
|
|
|
if y_new < 0:
|
|
|
|
|
y_new = y_max
|
|
|
|
|
elif d == 2:
|
|
|
|
|
x_new = s.x
|
|
|
|
|
y_new = s.y + 10
|
|
|
|
|
if y_new > y_max:
|
|
|
|
|
y_new = 0
|
|
|
|
|
elif d == 3:
|
|
|
|
|
x_new = s.x - 10
|
|
|
|
|
y_new = s.y
|
|
|
|
|
if x_new < 0:
|
|
|
|
|
x_new = x_max
|
|
|
|
|
if isEat:
|
|
|
|
|
isEat = 0
|
|
|
|
|
b_new = PikaPiZero.Point()
|
|
|
|
|
b_new.x = x_new
|
|
|
|
|
b_new.y = y_new
|
|
|
|
|
b_new.prev = s.prev
|
|
|
|
|
b_new.next = s
|
|
|
|
|
s.prev.next = b_new
|
|
|
|
|
s.prev = b_new
|
|
|
|
|
s = b_new
|
|
|
|
|
len = len + 1
|
|
|
|
|
print('snake lengh')
|
|
|
|
|
print(len)
|
|
|
|
|
print('mem used max:')
|
|
|
|
|
mem.max()
|
|
|
|
|
# drow the snake and fruit
|
|
|
|
|
# clear last body
|
|
|
|
|
lcd.fill(s.prev.x, s.prev.y, w, h, 'white')
|
|
|
|
|
# new body
|
|
|
|
|
s.prev.x = x_new
|
|
|
|
|
s.prev.y = y_new
|
|
|
|
|
# head is last body
|
|
|
|
|
s = s.prev
|
|
|
|
|
lcd.fill(s.x, s.y, w, h, 'blue')
|
|
|
|
|
b = s
|
2022-01-10 08:47:13 +00:00
|
|
|
|
i = 0
|
2022-01-10 16:51:11 +08:00
|
|
|
|
# scan key
|
|
|
|
|
key_val = key.get()
|
|
|
|
|
if key_val == 0:
|
|
|
|
|
d = 0
|
2022-01-10 08:47:13 +00:00
|
|
|
|
isUpdate = 1
|
2022-01-10 16:51:11 +08:00
|
|
|
|
elif key_val == 1:
|
|
|
|
|
d = 1
|
2022-01-10 08:47:13 +00:00
|
|
|
|
isUpdate = 1
|
2022-01-10 16:51:11 +08:00
|
|
|
|
elif key_val == 2:
|
|
|
|
|
d = 2
|
2022-01-10 08:47:13 +00:00
|
|
|
|
isUpdate = 1
|
2022-01-10 16:51:11 +08:00
|
|
|
|
elif key_val == 3:
|
|
|
|
|
d = 3
|
2022-01-10 08:47:13 +00:00
|
|
|
|
isUpdate = 1
|
|
|
|
|
|
|
|
|
|
```
|
2021-09-23 14:14:14 +08:00
|
|
|
|
|
2022-01-10 08:47:13 +00:00
|
|
|
|
![输入图片说明](document/image/imagefwef.png)
|
2021-09-23 14:16:08 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
这几个 Demo 占用的 RAM 最大值只有3.56K,把1K的堆栈也算上就是4.56K,Flash 最大占用是30.4K,以 STM32F103C8T6 的 20K RAM 和 64K Flash 为标准,RAM 才用掉不到25%,Flash 才用掉不到50%。
|
2021-09-23 14:14:14 +08:00
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
我们可以简单对比一下 micropython 的常用芯片 STM32F405RG 和这次跑 PikaScript 的芯片STM32G070CB
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
## RAM资源对比
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/132944731-a55ece1d-061f-4b91-ba87-bd6547be96a7.png)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
## Flash资源对比
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/132944745-e9cf598d-e75f-40bb-873e-911819d535b7.png)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
## 参考价对比(以2021年9月11日立创商城10片售价为参考)
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![image](document/image/132944757-2b5cfda8-f93f-4456-8d7f-4e4767954056.png)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
## 拓展能力如何呢?
|
|
|
|
|
|
2022-01-08 10:19:49 +00:00
|
|
|
|
除了设备驱动之外,为 mcu 开发自定义的 python 脚本绑定在 pikascript 的开发框架下非常轻松,下面两个 Demo 就是自定义的C模块拓展,这个 Demo 基于 ARM-2D 图像驱动库开发了一些 python 脚本接口。
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
## 几个小方块~
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![Hnet-image (7)](document/image/132945282-bfd310df-8063-456d-b90c-6b798a2c8ed5.gif)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
|
|
|
|
## 几个旋转太阳~
|
2022-02-20 07:44:38 +08:00
|
|
|
|
![Hnet-image (6)](document/image/132945107-e473a2cc-9fbc-47f9-aaed-a28d3ad1048c.gif)
|
2021-09-13 09:47:39 +08:00
|
|
|
|
|
2022-04-19 17:04:40 +00:00
|
|
|
|
# 6.内核测试与开发
|
|
|
|
|
|
2022-04-21 14:37:36 +08:00
|
|
|
|
## Test core in docker (recommend)
|
|
|
|
|
step1: Clone the repo
|
|
|
|
|
``` shell
|
|
|
|
|
git clone https://github.com/pikastech/pikascript
|
|
|
|
|
cd pikascript/docker
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
step2: build and run the docker contianer
|
|
|
|
|
```
|
|
|
|
|
sh build.sh
|
|
|
|
|
sh run.sh
|
|
|
|
|
# now you are in the port/linux
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
step3: init the port/linux
|
|
|
|
|
``` shell
|
|
|
|
|
sh pull-core.sh
|
|
|
|
|
sh init.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
step4: test the core
|
|
|
|
|
``` shell
|
|
|
|
|
sh gtest.sh
|
|
|
|
|
sh ci_benchmark.sh
|
|
|
|
|
```
|
2022-04-19 17:04:40 +00:00
|
|
|
|
|
2022-04-21 14:37:36 +08:00
|
|
|
|
step5: Run the REPL
|
|
|
|
|
``` shell
|
|
|
|
|
sh run.sh
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Test core in linux (ubuntu20.04 is recommend)
|
|
|
|
|
|
|
|
|
|
step1: Clone the repo
|
2022-04-19 17:04:40 +00:00
|
|
|
|
``` shell
|
|
|
|
|
git clone https://github.com/pikastech/pikascript
|
|
|
|
|
cd pikascript/port/linux
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-21 14:37:36 +08:00
|
|
|
|
step2: install dependency
|
2022-04-19 17:04:40 +00:00
|
|
|
|
```
|
2022-04-21 14:37:36 +08:00
|
|
|
|
sh install_dependency.sh # install dependency
|
2022-04-19 17:04:40 +00:00
|
|
|
|
```
|
|
|
|
|
|
2022-04-21 14:37:36 +08:00
|
|
|
|
step3: init the port/linux
|
2022-04-19 17:04:40 +00:00
|
|
|
|
``` shell
|
2022-04-21 14:37:36 +08:00
|
|
|
|
sh pull-core.sh
|
|
|
|
|
sh init.sh
|
2022-04-19 17:04:40 +00:00
|
|
|
|
```
|
|
|
|
|
|
2022-04-21 14:37:36 +08:00
|
|
|
|
step4: test the core
|
2022-04-19 17:04:40 +00:00
|
|
|
|
``` shell
|
2022-04-21 14:37:36 +08:00
|
|
|
|
sh gtest.sh
|
2022-04-19 17:04:40 +00:00
|
|
|
|
sh ci_benchmark.sh
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-21 14:37:36 +08:00
|
|
|
|
step5: Run the REPL
|
|
|
|
|
``` shell
|
|
|
|
|
sh run.sh
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-19 17:04:40 +00:00
|
|
|
|
# 7.贡献者
|
|
|
|
|
| 内容 | 贡献者 |
|
|
|
|
|
| --- | --- |
|
2022-04-22 06:26:56 +00:00
|
|
|
|
| 定向赞助:500¥ (ctypes 相关) | 蒋太平 |
|
2022-04-19 17:04:40 +00:00
|
|
|
|
| fix linux install script | [Maximilian Gerhardt](https://github.com/maxgerhardt) |
|
|
|
|
|
| ch582 package | [梦程MI](https://gitee.com/dreamcmi) |
|
|
|
|
|
| ch582 BSP | [梦程MI](https://gitee.com/dreamcmi) |
|
|
|
|
|
| 捐赠:EC600X QuecPython 开发板 | 移远模块 武加玉 |
|
|
|
|
|
| Performance Point: 900->1400 | [GorgonMeducer](https://github.com/GorgonMeducer) |
|
|
|
|
|
| stm32f051r8 BSP |[unsigned](https://gitee.com/unsigned0)|
|
|
|
|
|
| stm32f407ze BSP |[unsigned](https://gitee.com/unsigned0)|
|
|
|
|
|
| devc BSP |[unsigned](https://gitee.com/unsigned0)|
|
|
|
|
|
| TC264D BSP |[unsigned](https://gitee.com/unsigned0)|
|
|
|
|
|
| PikaVM 优化 | [GorgonMeducer](https://github.com/GorgonMeducer) |
|
|
|
|
|
| W801Device package | 刘延(微信名) |
|
|
|
|
|
| W806 bsp | 刘延(微信名) |
|
|
|
|
|
| 捐赠:ESP32C3 5pic,调试器 |启明云端 沧御|
|
|
|
|
|
| 捐赠:LS1C101芯片10pic, LS1c101开发板,调试器|龙芯俱乐部 石南|
|
|
|
|
|
| PikaVSF OS package | [versaloon](https://github.com/versaloon) |
|
|
|
|
|
| ESP32C3 BSP |沧御|
|
|
|
|
|
| 捐赠:ESP32开发板、墨水屏*4 | name(微信名) |
|
|
|
|
|
| 捐赠:智龙开发板 | 龙芯俱乐部 石南 |
|
|
|
|
|
| package/STM32F1 | [sjy](https://gitee.com/shanjiayang) |
|
|
|
|
|
| package/STM32F103RBBooter | [sjy](https://gitee.com/shanjiayang) |
|
|
|
|
|
| bsp/stm32f103rb | [sjy](https://gitee.com/shanjiayang) |
|
|
|
|
|
| 基于 QEMU 的 ARM-2D 仿真工程 | [liuduanfei](https://github.com/liuduanfei) |
|
|
|
|
|
| 捐赠:GD32E103TB 芯片2片 | 信息牛(微信名) |
|
|
|
|
|
| Rt-thread 支持包、适配层、模块| [Meco Jianting Man](https://github.com/mysterywolf) |
|
|
|
|
|
| 捐赠:移远 EC600S-CN 4G模块 | 移远模块 |
|
|
|
|
|
| 捐赠:博流 BL706 开发板|博流智能 [bouffalolab](https://github.com/bouffalolab)|
|
|
|
|
|
| 捐赠:中国移动 CM32M101A 开发板| 孟巍(微信名) |
|
|
|
|
|
| 捐赠:APM32F030R8 开发板 | 极海半导体 陈成 |
|
|
|
|
|
| 捐赠:APM32E103VB 开发板 | 极海半导体 陈成 |
|
|
|
|
|
| 捐赠:APEX-Link 仿真器 | 极海半导体 陈成 |
|
|
|
|
|
| 源码格式化,增加 git 属性文件 | [Meco Jianting Man](https://github.com/mysterywolf) |
|
|
|
|
|
| demo/simulation-keil | 千帆(微信名) |
|
|
|
|
|
| demo/stm32f103zet6/demo01-led-stm32f103zet6 | [甜航](https://github.com/easyzoom) |
|
|
|
|
|
| demo/stm32f103zet6/demo02-led-stm32f103zet6_tworoot | [甜航](https://github.com/easyzoom) |
|
|
|
|
|
| demo/stm32f407zgt/demo01-led-stm32f407vgt | [甜航](https://github.com/easyzoom) |
|