MicroPython移植到STM32H750

本文详细记录了将Micropython移植到STM32H750VBT6核心板的过程,包括开发环境搭建、源码下载、编译配置及移植步骤。作者针对不支持的H750系列进行了自定义移植,分享了关键配置文件修改技巧,最终实现了固件编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 = 128K
    FLASH_ISR (rx)  : ORIGIN = 0x00000000, LENGTH = 64K    /* ITCMRAM 64K */
    FLASH_TEXT (rx) : ORIGIN = 0x90000000, LENGTH = 8M  

    DTCMRAM (xrw)     : ORIGIN = 0x20000000, LENGTH = 128K
    RAM (xrw)      : ORIGIN = 0x24000000, LENGTH = 512K
    RAM_D2 (xrw)      : ORIGIN = 0x30000000, LENGTH = 288K
    RAM_D3 (xrw)      : ORIGIN = 0x38000000, LENGTH = 64K
    ITCMRAM (xrw)     : ORIGIN = 0x00000000, LENGTH = 64K
    QSPIFLASH (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 byte
   of 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来做点东西的话,建议还是选择移植到官方支持的板卡,或者比较相近的板子也行,这样会方便很多😁

后边可能会写一些关于IAP的东西,或者是自己制作mpy模块之类的。。。或许吧🕊🕊🕊

感谢您的阅读,下次再见

<think>好的,用户需要写一个立项申报书,主题是用OpenMV4进行危险情况识别并报警。首先,我需要理解用户的具体需求。他们可能是在申请科研项目、创新创业计划或者企业内部的研发项目。立项申报书通常需要包含项目背景、技术方案、实施计划、预期成果等部分。 用户之前已经询问过OpenMV4的硬件架构,所以可能对技术细节有一定了解。现在需要的是如何将这些技术应用到实际场景中,并形成结构化的申报书。需要确保技术方案可行,同时突出创新点和应用价值。 用户可能希望示例能具体展示如何组织内容,特别是技术实现部分和项目规划。需要注意申报书的常见结构,比如立项依据、研究内容、技术路线、创新点、进度安排、经费预算等。此外,可能需要强调项目的实际应用场景,比如工业安全、公共安全等,以体现社会效益和经济效益。 需要检查是否覆盖了关键技术点,比如图像识别算法、报警机制、系统集成等。同时,考虑用户可能的深层需求,比如如何证明项目的可行性,是否需要对比现有方案,突出OpenMV4的优势。可能还需要涉及团队组成、现有基础、风险评估等内容。 另外,用户可能需要示例作为模板,所以结构要清晰,内容要具体但不过于复杂。需要避免使用过多专业术语,保持通俗易懂,同时展示技术深度。可能需要提供模块化的代码示例,比如使用MicroPython进行图像处理的部分,以增强说服力。 最后,确保回答符合之前的系统级指令,正确使用LaTeX格式,结构清晰,分步骤说明,并且真实可靠。需要提醒用户根据实际情况调整内容,并检查是否符合申报的具体要求。</think>以下是一个基于 **OpenMV4** 的危险情况识别与报警系统的立项申报书示例,涵盖技术路线、创新点、实施方案等核心模块,可根据实际需求调整内容: --- # **基于OpenMV4的危险场景智能识别与实时报警系统** # **立项申报书** --- ## **一、立项依据** ### 1. 背景与意义 随着工业自动化与公共安全需求的提升,传统人工监控存在**效率低、成本高、响应慢**等问题。 本项目基于 **OpenMV4** 嵌入式视觉平台,通过实时图像分析技术,实现以下目标: - **危险场景识别**:火灾烟雾、机械异常运转、人员违规操作等 - **分级报警机制**:声光报警→网络推送→联动控制 - **低功耗部署**:适应无市电供能的野外/工业环境 ### 2. 技术可行性分析 | 技术基础 | OpenMV4实现能力验证 | |--------------------------|----------------------------| | **图像采集与处理** | 已验证OV7725支持VGA@30fps稳定输出 | | **算法移植** | MicroPython成功运行YOLO Tiny模型(FPS>15) | | **硬件联动** | 已测试通过GPIO控制蜂鸣器/继电器 | --- ## **二、研究内容与技术路线** ### 1. 系统架构设计 ```mermaid graph TD A[OpenMV4摄像头] --> B[图像预处理] B --> C{危险特征识别} C -->|火灾/机械异常| D[本地声光报警] C -->|人员违规| E[4G网络上报云端] E --> F[管理平台可视化] ``` ### 2. 关键技术实现 #### **(1) 危险特征识别算法** - **火灾检测**: 采用**双通道融合模型**: $$ \text{火灾概率} = \alpha \cdot \text{颜色特征}(R_{\text{avg}}>200) + \beta \cdot \text{动态纹理}(S_{\text{smoke}}>0.7) $$ 其中 $\alpha+\beta=1$,通过SVM分类器优化权重 - **机械异常检测**: 基于**帧间差分法**与**FFT频谱分析**: ```python # OpenMV代码片段 fft = np.fft.fft2(grayscale_img) if np.max(fft[10:100]) > threshold: # 高频分量突增判定异常 alarm.trigger() ``` #### **(2) 低功耗优化方案** - **动态帧率调节**: ``` 正常模式:30fps → 识别到风险 → 切换至60fps追踪 待机模式:1fps 检测运动唤醒 ``` - **硬件休眠策略**:STM32H750休眠时功耗 < 3mA --- ## **三、创新点** 1. **异构计算加速**: - 利用STM32H750的**硬件JPEG解码器**压缩图像数据(压缩率>80%) - **Cortex-M7浮点单元**加速卷积运算 2. **边缘-云端协同**: - 本地完成90%图像处理,仅上传关键事件数据(节省带宽>70%) --- ## **四、实施计划与预算** ### 1. 进度安排 | 阶段 | 时间 | 交付物 | |--------------|--------|--------------------------| | 算法开发 | 1-2月 | 火灾/异常检测模型 | | 硬件联调 | 3-4月 | 原型机(含报警模块) | | 场景验证 | 5-6月 | 工厂/仓库实测报告 | ### 2. 经费预算(示例) | 项目 | 金额(万元) | |--------------------|-------------| | OpenMV4开发套件 | 1.2 | | 4G通信模块 | 0.8 | | 测试场地租赁 | 2.5 | | **合计** | **4.5** | --- ## **五、预期成果** 1. **技术指标** - 识别准确率 ≥92% (测试数据集) - 报警响应延迟 <200ms - 待机续航时间 >72小时 2. **应用场景** - 化工车间火灾预警 - 物流仓储机械故障监测 - 建筑工地安全着装识别 --- ## **六、申报单位基础** - 已具备**OpenMV4开发经验**(完成3个图像识别项目) - 拥有**STM32H750硬件设计能力**(PCB打样设备、J-Link调试工具) --- **注**:需根据具体申报要求补充**风险评估**、**团队组成**、**知识产权规划**等模块。如需算法伪代码或硬件原理图深化内容,可进一步沟通!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值