【STM32F091】+ Nucleo-Script——Nucleo系列开发平台的脚本编程(Script-Programming)生态系统构建
开源脚本已经蓬勃发展多年,围绕着各方面应用形成了大量开源库,从而产生相关的生态系统,比如Python、Java、.Net等。
开源硬件也出现了非常多, 比如大名鼎鼎的ARduino,形成了?uino生态系统,Nucleo等开发平台系列都支持Arduino硬件接口。以及各种Arduino有趣的硬件外围shiled和软件代码库library。
然而,目前的STM32-MCU代码库较少,大部分都是ST官方的库函数等类似的官方库。特别是在脚本编程方面,ST只提供了Java和.Net移植,并且不是开放,用户基数少,没有形成生态系统。
目前主流的MCU开发编程依然基于代码-编译-下载的方式开展。而大量软件、网络程序员对于硬件编程需要重新学习、理解硬件工作原理、寄存器定义、协议底层等一系列又长又弯的学习曲线。因此考虑实现基于广泛应用的脚本语言进行MCU开发。
经过网路搜索调研,目前有Python、Javascrip、Lua等脚本语言(Script)移植到了ARM-MCU上,并有很好的开源成功项目,包括硬件开发板和软件代码库。
并且最幸运的事,这些开源项目大部分都是用STM32芯片制作的开发板。
如果将这些MCU-Script脚本语言移植到Nucleo平台,将是一个很创新、很吸引人的,有如下优点:
(1)如果持续积累出在Nucleo平台的各种脚本代码库、外围硬件驱动封装好的脚本API、所码即所得的即时代码更新(WYCIWYG, What you coding is what you get),可以形成大量的开源库,并且提供开源共享社区,增加代码复用率和共享。
(2)能把硬件开发,特别是STM32系列MCU,推广到更广泛的软件、网络程序员群体。可以形成一个类似arduino、树莓派一样的“人人可开发硬件”的生态系统。
可尝试的开源的MCU Script-Programming项目
(1)Nucleo-Python
将流行的micropython或者PyMite(又称Python-on-a-chip)移植到Nucleo平台,
micropython它基于ANSI C,语法跟Pyton 3基本一致,拥有自家的解析器、编译器、虚拟机和类库等。目前他支持基于32-bit的ARM处理器,比如说STM32F405。
借助Micro Python,用户完全可以通过Python脚本语言实现硬件底层的访问和控制,比如说控制LED灯泡、LCD显示器、读取电压、控制电机、访问SD卡等。
PyMite介绍如下:
几乎所有片内外外设资源都有可能被要求提供库,比如定时器、SPI、I2C、ADC/DAC/PWM、比较器、音频I2S、在这些基本外设之上的还有SDCARD,FAT,TCP/IP,无线接口等。然而这些都需要C/C++接口和Python库重新进行设计规划。
PyMite已经在多个平台上运行,包括:Arduino MEGA/AT91SAM7/AVR/MC13224/LPC1368/PIC24/STM32等平台
(2)Nucleo-Lua
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
根据搜索,有网友移植Lua到STM32结果如下:
Lua全编译也只有48k字节左右,所以不裁剪都是可以的。本身的Ram需求则在26K字节左右,Stm32应该是可以承受的。
(3)Nucleo-Javascript
将流行的Espruino移植到Nucleo平台
Espruino是一种运行在微控制器上的软件,实现了Javascript解释器的功能,因此你只要会用Javascript,就可以对微控制器进行编程,释放自己的创意,DIY出自己的电子作品。
Espruino开发板是一个小电脑,任何人都可以利用它去控制身边的东西。它的JavaScript解释器给你实时的反馈,因此不管你是否拥有类似的编程经验,你都可以进行试验和开发。即使你之前从来没有编写过代码,你也能利用图形化的代码编辑器去构建自己的程序而不用键入一个字符。
根据上面的介绍,结合STM32F091芯片的CPU、Flash、RAM等芯片资源(以及其他Nucleo板子的资源)可知,STM32F091具备128K/256K的Flash、32KB的RAM,足够运行上述脚本解释器。并且具备丰富的GPIO、Timer/PWM,以及大量的串行通信接口USART、SPI、I2C,和模拟接口ADC/DAC/ACMP。可以利用这些片内资源构建很好的接口开源库。
因此,我觉得可以考虑构建一个MCU脚本编程的开源社区。共同组建一个Nucleo-Script生态系统。
|