Micropython移植到STM32H750

tb上买了块stm32h750vbt6的核心板,想折腾一下,正好最近在学python,于是尝试在这块板子上移植一下micropython。然而官方貌似还没支持H750系列,那就自己整。话不多说,开始干活。

首先板子长这样
其实用什么板子无所谓,重要的是移植的过程。

开发环境:win10+Ubuntu20虚拟机,当然其他版本也ok,同时会用到STM32CubeMX工具,请准备好。

第一步 下载源码

从GitHub上下载源码

git clone https://github.com/micropython/micropython

这个过程可能需要几分钟时间
下载完成后看一下micropython目录下的内容

ls micropython/


先不要急着编译,还要把库文件下载下来。

cd micropython
git submodule update --init lib

简要介绍一下三个重要的目录,其他的请自行查看

mpy-cross/
相当于一个交叉编译器,把.py文件编译成.mpy文件,是个官方的工具
,编译整个项目前请先编译mpy-cross

lib/
该目录下存放各种库文件,比如后面要用到的STM32HAL库

ports/
硬件接口,与平台相关,支持stm32,esp系列等,移植时重点关注该目录

第二步 编译

先尝试编译一下,进入mpy-cross目录,直接make

cd mpy-cross/
make

如果中间缺少工具,那缺什么就装什么,后面也是一样。

这一步完了后,进入micropython/ports/stm32目录
直接make
make -j8多线程编译加快速度

cd /ports/stm32
make -j8

如果没安装交叉编译器会报这个错

/bin/sh: 1: arm-none-eabi-gcc: not found

安装就好了

sudo apt install gcc-arm-none-eabi

make完成以后会多出一个build-PYBV10目录,里边有编译出的固件,适用的板卡为官方PYB系列,但是这不是我们想要的。

然后清除

make clean

第三步 移植

先查看一下支持的stm32板卡有哪些

注意到有NUCLEO_H743ZI板卡支持,接下来以这个目录为模板进行移植。
将NUCLEO_H743ZI目录复制一份,命名随意,比如MYH750
先进入micropython/ports/stm32/board目录再复制

cp NUCLEO_H743ZI/ MYH750 -r

然后要修改mpconfigboard.h 以及 mpconfigboard.mk这两个文件
修改后的内容如下
mpconfigboard.h

#define MICROPY_HW_BOARD_NAME       "MYH750"
#define MICROPY_HW_MCU_NAME         "STM32H750"#define MICROPY_HW_ENABLE_RNG       (1)
#define MICROPY_HW_ENABLE_RTC       (1)
#define MICROPY_HW_ENABLE_USB       (1)
#define MICROPY_HW_ENABLE_SDCARD    (1)
#define MICROPY_HW_ENABLE_ADC       (1)
#define FORCE_RESRT_MODE_1          (1)
#define MICROPY_HW_ENABLE_DCMI      (1)
#define MICROPY_HW_RTC_USE_LSE      (1)
#define MICROPY_PY_THREAD           (1)#define MICROPY_HW_CLK_PLLM (5)
#define MICROPY_HW_CLK_PLLN (192)
#define MICROPY_HW_CLK_PLLP (2)
#define MICROPY_HW_CLK_PLLQ (5)
#define MICROPY_HW_CLK_PLLR (2)#define MICROPY_HW_CLK_PLL3M (25)
#define MICROPY_HW_CLK_PLL3N (192)
#define MICROPY_HW_CLK_PLL3P (2)
#define MICROPY_HW_CLK_PLL3Q (4)
#define MICROPY_HW_CLK_PLL3R (2)// UART config
#define MICROPY_HW_UART1_TX         (pin_A9)
#define MICROPY_HW_UART1_RX         (pin_A10)
#define MICROPY_HW_UART_REPL        PYB_UART_1
#define MICROPY_HW_UART_REPL_BAUD   115200// USB config
#define MICROPY_HW_USB_FS              (1)

mpconfigboard.mk

# MCU settings
MCU_SERIES = h7
CMSIS_MCU = STM32H750xx
MICROPY_FLOAT_IMPL = double
AF_FILE = boards/stm32h743_af.csv# When not using Mboot the ISR text goes first, then the rest after the filesystem
LD_FILES = boards/stm32h750.ld boards/common_ifs.ld
TEXT0_ADDR = 0x00000000
TEXT1_ADDR = 0x90000000

直接make的话会报如下错误:
arm-none-eabi-ld: cannot open linker script file boards/stm32h750.ld: 没有那个文件或目录
是因为缺少stm32h750.ld这个链接脚本
于是在board目录下创建一个stm32h750.ld,并写入以下内容

/*GNU linker script for STM32H750
*//* Specify the memory areas */
MEMORY
{FLASH (rx)      : ORIGIN = 0x08000000, LENGTH = 128KFLASH_ISR (rx)  : ORIGIN = 0x00000000, LENGTH = 64K    /* ITCMRAM 64K */FLASH_TEXT (rx) : ORIGIN = 0x90000000, LENGTH = 8M  DTCMRAM (xrw)     : ORIGIN = 0x20000000, LENGTH = 128KRAM (xrw)      : ORIGIN = 0x24000000, LENGTH = 512KRAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288KRAM_D3 (xrw)      : ORIGIN = 0x38000000, LENGTH = 64KITCMRAM (xrw)     : ORIGIN = 0x00000000, LENGTH = 64KQSPIFLASH (rx)    : ORIGIN = 0x90000000, LENGTH = 8M
}/* produce a link error if there is not this amount of RAM for these sections */
_minimum_stack_size = 2K;
_minimum_heap_size = 16K;/* Define the stack.  The stack is full descending so begins just above last byteof RAM.  Note that EABI requires the stack to be 8-byte aligned for a call. */
_estack = ORIGIN(RAM) + LENGTH(RAM) - _estack_reserve;
_sstack = _estack - 16K; /* tunable *//* RAM extents for the garbage collector */
_ram_start = ORIGIN(RAM);
_ram_end = ORIGIN(RAM) + LENGTH(RAM);
_heap_start = _ebss; /* heap starts just after statically allocated memory */
_heap_end = _sstack;

这部分参考了STM32CubeMX提供的例程以及stm32h743.ld

接下来还有几处小改动
首先把micropython/ports/stm32/boards/MYH750/目录下的
stm32h7xx_hal_conf.h里面的HSE值改一下,比如这块板子的晶振是25MHz的,HSE_VALUE=25000000

// Oscillator values in Hz
#define HSE_VALUE (25000000)
#define LSE_VALUE (32768)
#define EXTERNAL_CLOCK_VALUE (12288000)

然后是micropython/ports/stm32目录下的Makefile
第401行

将        ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),STM32H743xx))
改成  ifeq ($(CMSIS_MCU),$(filter $(CMSIS_MCU),STM32H743xx STM32H750xx))

再就是micropython/ports/stm32/adc.c
第145行

将        #elif defined(STM32H743xx)
改成  #elif defined(STM32H743xx)|| defined(STM32H750xx)

最后是micropython/ports/stm32/flashbdev.c
第105行

将        #elif defined(STM32H743xx)
改成  #elif defined(STM32H743xx)||defined(STM32H750xx)

到这里就可以试着编译一下。切换到micropython/ports/stm32目录

 make BOARD=MYH750 -j8

编译完成

查看一下产生的bin文件

ls build-MYH750/*.bin -sh

可以看到产生了两个固件

16K build-MYH750/firmware0.bin  340K build-MYH750/firmware1.bin

其中firmware1.bin达到了340K,这部分需要放在外部flash,那么我们就需要一个boot程序,micropython自带的mboot我还不太会用,于是自己写一个,这里就直接给出来了。
链接: https://download.csdn.net/download/Slade99X/12451712
百度云:
链接: https://pan.baidu.com/s/1hJWNpB75sROkg_008-JKSA
提取码:835c
这个boot程序是个MDK工程,编译之后烧录到板子上,可以用st-link或者dfu方式。然后用读卡器把前面生成的两个bin文件拷到SD卡根目录,这时先别急着插入SD卡,先把板子的串口1接到电脑上,给板子上电,再插入SD卡,用串口终端软件查看。应该会显示如下内容:

到这里移植算是完成了,但是还存在一些问题,就是上电后不会自动运行main.py,这是因为我们用了自己的boot程序,而不是官方的mboot,要解决这个问题也不难,这里就不展开了。

总结

整个移植过程步骤挺繁琐的,但跟着走一遍的确可以加深对mpy工程结构的理解,如果真要拿mpy来做点东西的话,建议还是选择移植到官方支持的板卡,或者比较相近的板子也行,这样会方便很多

MicroPython移植到STM32H750相关推荐

  1. [长文干货]MicroPython移植到野火STM32F429开发板

    最近通过参考网上的文章,成功将MicroPython移植到野火STM32F429开发板上,给大家分享一下自己的移植过程,可以作为STM32系列移植MicroPY的参考. 1.移植前准备工作 实验环境: ...

  2. 在mm32f3270为micropython移植utime模块

    在mm32f3270为micropython移植utime模块 苏勇,2021年8月 Introduction utime模块的主要函数在"extmod"目录下的utime_mph ...

  3. MindMotion MM32 单片机上的MicroPython移植-PWM

    简 介: 对于MindMotion在11月22日发送过来的移植有PWM功能的MicroPython的软件进行了测试.首先,在两个PWM的通道(PA6,PA7)上可以测试到输出的波形,但信号参数与设置之 ...

  4. MM32F3277 MicroPython移植过程中对应的接口文件

    简 介: 给出了在MM32移植MicroPython过程中基础语法中Pin相关的内容. 关键词: MM32F3277,machine,Pin §01 MacinePin /* machine_pin. ...

  5. STM32 进阶教程 1 - micropython 移植

    前言 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.具有如下特点: 1.易于学习:Python有相 ...

  6. micropython移植教程_【教程】智能编程T-Watch手表初试micropython之电子秤教程

    原标题:[教程]智能编程T-Watch手表初试micropython之电子秤教程 [项目的故事] 在极客玩具中,我一直喜欢穿戴类和小车类.前后做过两只运动心率表,并且参与过麦步手表的测试.TTGO最新 ...

  7. micropython移植教程_移植MicroPython到NUCLEO_L476RG开发板

    在最新的 MicroPython 源码中,已经加入了STM32L476DISC开发板,但是还没有NUCLEO-L476RG开发板.而我只有NUCLEO-L476RG开发板,要在NUCLEO-L476R ...

  8. micropython 移植k210_嘉楠勘智K210支持最大国产开源RTOS及MicroPython

    日前,嘉楠科技AI芯片勘智K210积极响应市场需求,即将开放对RTT-RTOS及基于RTOS应用MicroPython的支持.RTT(RealTime-Thread)是国内最大的开源实时操作系统.基于 ...

  9. micropython移植stm32f746_STM32L476和STM32F746的外部Flash复制文件速度对比

    1.STM32L476使用的是GPIO模拟的SPI,自然速度要慢.STM32F746使用硬件QSPI,会快很多. 2.但也不能简单从你测的这个时间上得出M7性能比M4强的结论(当然M7确实比M4强). ...

最新文章

  1. 前端学习(1743):前端调试值之调试元素的hover样式
  2. 初次使用uwsgi:no python application found, check your startup logs for errors
  3. 完美仿MSN右下角弹出广告代码并可自动消失,附带关闭按钮
  4. 诊断(UDS)协议栈设计-系列讲解
  5. HTML5录制音频文件
  6. android 转 ios 开发,如何快速从android开发转向ios开发--oc语法篇
  7. 基于Java+SpringBoot+Thymeleaf+Mysql校园运动场地预约系统设计与实现
  8. htmlUnit的读取js渲染的页面
  9. 怎么给Mongodb设置账号密码(跳坑版)
  10. 专业的个人记帐软件 爱上记帐 1.0.1
  11. js中数组的冒泡排序(升序,降序),逆序输出。
  12. soloV2保姆级教程(含环境配置,训练自己的数据集,代码逻辑分析等。能踩得坑都踩了....)更新ing
  13. 经典白话算法之桶排序
  14. Android Fragment 真正的完全解析(上)
  15. 使用邻接表输出所有拓扑序列(新手必看!通俗易懂!绝对详细!!)
  16. 怎么修改坚果云文件同步路径?
  17. 从零开始搭建智能Ai外呼系统?
  18. 【串并联LC谐振电路及其应用】
  19. OTT/IPTV互联网电视运营平台
  20. JavaScript 正则表达式 通俗解释 快速记忆

热门文章

  1. SVN的学习(SVN的简单说明、SVN的安装与配置、SVN与GIT的区别)
  2. 机器人磨内孔_半导体阀块内孔机器人打磨,效果超乎想象!
  3. 使用expect ftp免交互上传文件
  4. IT痴汉的工作现状33-HTML5的春天是原生App的冬天?
  5. Android 沉浸状态栏
  6. PAT 1026 Table Tennis (30分)
  7. CocosCreater的俄罗斯方块游戏实现
  8. linux中mut目录,Linux 下常见文件目录及作用
  9. 国际自愿减排标准介绍:CDM、GS、VCS 、ACR、CCER等国内外自愿减排类型介绍
  10. Codeforces Round #561 (Div. 2)-E. The LCMs Must be Large