STM32使用C语言编写代码较为复杂,对新手并不友好(当然这不是不深入学习STM32的理由)。

而microPython是一种嵌入式Python环境,可以非常简便地操作各种资源,同时支持编写代码和交互式两种操作方式。

以下是廖雪峰的官方网站上的介绍:

MicroPython是Python的一个精简版本,它是为了运行在单片机这样的性能有限的微控制器上,最小体积仅256K,运行时仅需16K内存。
MicroPython是基于Python 3.4的语法标准。因为要适应嵌入式微控制器,所以裁剪了大部分标准库,仅保留部分模块如math、sys的部分函数和类。此外,很多标准模块如json、re等在MicroPython中变成了以u开头的ujson、ure,表示针对MicroPython开发的标准库。
目前,MicroPython除了可以运行在最初开发的pyboard微控制器上外,还可以运行在大量基于ARM的嵌入式系统,如Arduino,这样我们就可以通过Python来非常方便地开发自动控制、机器人这样的应用。

对STM32平台,mPy支持这几种MCU:

  • stm32f0xx
  • stm32f4xx
  • stm32f7xx
  • stm32h7xx
  • stm32l0xx
  • stm32l4xx
  • stm32wbxx

而官方对于我手头的STM32F103似乎没有提供支持。在摸索了一段时间后,通过第三方编写的mPy代码,我成功构建并烧录了mPy的运行环境到STM32F103.


推荐使用Linux环境构建,会简单得多。

安装环境

首先安装构建环境。

apt-get install git
apt-get install gcc
apt-get install gcc-arm-none-eabi

克隆项目

克隆第三方项目。

git clone https://github.com/morris13579/micropython-stm32f1.git

编译

编译得到hex文件。

cd ./micropython-stm32f1/ports/stm32
make BOARD=F103

编译完成后,得到的hex文件位于micropython-stm32f1/ports/stm32/build-F103/firmware.hex,将其烧录至STM32F103即可。

验证

程序运行后在电脑资源管理器中会多一个USB 串行设备串口,如下图中的COM24。
file

如果你的电脑中没有出现USB串行设备,而是多了STM32_BOOTloader设备,这可能是能的电脑上的打开了开发板上的USB_232串口导致,这时需在PC上先关闭该串口(找到对应的串口工具,关闭串口),然后按下开发板上的复位键即可。

程序正常跑起来后,资源管理器中可以看到多了个pybFLASH盘:
file
将代码保存到其中的main.py即可运行。(如果容量不够也可以用SD卡存储)

也可以使用交互模式连接。安装并打开PUTTY工具,选中设置管理器中看到的USB串行设备,打开串口,连接开发板。
file
效果:
file
基本运算:
file
引脚操作:
file
随机数:
file

问题

  1. 某些外围设备在使用 DMA 时会出现问题
  2. 使用 DMA 时 I2C 将重新启动
  3. CAN 总线似乎存在问题

参考:
使用MicroPython - 廖雪峰的官方网站
STM32 进阶教程 1 - micropython 移植