当前位置: 首页 > java >正文

Stm32 烧录 Micropython

目录

前言

准备工作

开始操作

问题回顾

后记


前言

       去年曾经尝试Pico制作openmv固件,由于知识储备不够最后失败了,留了一个大坑,有了前几天的基础,慢慢补齐知识,最近这一周一直在学习如何编译Stm固件并烧录到单片机里,之前编译过lvgl for pico的固件,所以也算是熟门熟路了。

准备工作

  • 我有五块Stm32的单片机,头两个失败原因是,编译出来的固件超过FLASH了。

F103C8T6(失败)

F401RCT6(失败)

F411CEU6(成功)

F407VET6

(未试)

H743CEU6

(未试)

CPU72MHz84MHz100MHz168MHz480MHz
RAM20KB64KB128KB192KB1MB
FLASH64KB256KB512KB512KB2MB
  • Make的安装 =====> 用于管理整个编译和链接过程
  • Gcc的安装 =====> 编译mpy-cross
  • arm-none-eabi-gcc的安装 =====>用于将 C/C++ 源代码编译成适用于 ARM 嵌入式系统的机器代码
  • F411CEU6的 配置文件
  • dfu文件的 烧录工具
  • 其他,用DfuSe不能识别,用STM32CubeProgrammer可以烧录bin

开始操作

  • 获取Micropython的代码,这里我选择是1.24.0版本
git clone https://github.com/micropython/micropython.git
cd micropython
git checkout v1.24.0
git submodule update --init
  • 获取配置文件,并放置在micropython\ports\stm32\boards下,如果不需要修改配置文件,可直接编译
make BOARD=WEACT_F411CEU6
  • 可以看到在stm32文件夹下新生成了一个“build-WEACT_F411CEU6”,可以在这里边找到
firmware.dfu
firmware0.bin
firmware1.bin
  • 用单片机的typeC插到电脑上,使用Boot按钮和Reset按钮操作,直到电脑设备管理器中看到“Stm32 BootLoader”,如果没有看到,则需要安装驱动(可以用zadig安装)
  • 这时,使用dfu工具查看,会看到如下信息,可以看到 [0483:df11] 即为目标机
C:\Users\Administrator>dfu-util --list
dfu-util 0.11Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/Found DFU: [0483:df11] ver=2200, devnum=4, cfg=1, intf=0, path="1-1.3", alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="3362334E3034"
Found DFU: [0483:df11] ver=2200, devnum=4, cfg=1, intf=0, path="1-1.3", alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="3362334E3034"
Found DFU: [0483:df11] ver=2200, devnum=4, cfg=1, intf=0, path="1-1.3", alt=1, name="@Option Bytes  /0x1FFFC000/01*016 e", serial="3362334E3034"
Found DFU: [0483:df11] ver=2200, devnum=4, cfg=1, intf=0, path="1-1.3", alt=0, name="@Internal Flash  /0x08000000/04*016Kg,01*064Kg,03*128Kg", serial="3362334E3034"
  • 执行烧录
D:\A_GitCode\micropython\ports\stm32\build-WEACT_F411CEU6>dfu-util -a 0 -s :leave -D firmware.dfu
dfu-util 0.11Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2021 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/Match vendor ID from file: 0483
Match product ID from file: df11
Multiple alternate interfaces for DfuSe file
Opening DFU capable USB device...
Device ID 0483:df11
Device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Interface #0 ...
Determining device status...
DFU state(10) = dfuERROR, status(10) = Device's firmware is corrupt. It cannot return to run-time (non-DFU) operations
Clearing status
Determining device status...
DFU state(2) = dfuIDLE, status(0) = No error condition is present
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
File contains 1 DFU images
Parsing DFU image 1
Target name: ST...
Image for alternate setting 0, (2 elements, total size = 314432)
Setting Alternate Interface #0 ...
Parsing element 1, address = 0x08000000, size = 14704
Erase           [=========================] 100%        14704 bytes
Erase    done.
Download        [=========================] 100%        14704 bytes
Download done.
Parsing element 2, address = 0x08020000, size = 299712
Erase           [=========================] 100%       299712 bytes
Erase    done.
Download        [=========================] 100%       299712 bytes
Download done.
Done parsing DfuSe file
Submitting leave request...
Transitioning to dfuMANIFEST state
  • 结束烧录,可以看到设备管理器出现一个大容量存储设备,这时就可以打开Thonny,编写一段代码查看烧录的固件情况

问题回顾

  • 这次遇到的问题,比前几篇遇到的都多,前前后后大概一周时间,包括等F411到货的时间
  • F103和F401的问题是固件过大,套路摸的差不多,mpconfigboard.h定义组件信息,决定哪些硬件组件和功能在当前开发板上启用、mpconfigboard.mk定义链接信息,指定固件构建过程中的源文件、库文件、链接器脚本等、stm32f4xx_hal_conf.h定义库信息,配置 STM32 HAL 库的使用情况,决定哪些外设和功能被启用、pins.csv定义引脚信息,指定开发板上各个引脚的名称、类型、功能等,这些引脚不是那么重要,只是为了方便起个别名,最重的还有一个就是HSE,F411这个外置了一个25MHz的晶振
  • 除了固件过大的问题,再就是生成的bin固件是两个,一个0.bin,一个1.bin,走了很多弯路,最后得到结论,这两个都要烧录到单片机中(上文我选用的dfu,所以就不用管bin了),根据你mpconfigboard.mk中的地址来设置,如果没设置,可以在make的时候设置V=1查看

后记

       还是吃了基础薄弱的亏,弄了一下午,期间还走了用Daplink测串口、晶振计算错误等弯路,最后找到了这个标准的配置文件后,才算排除了一些因素,最后锁定在bin烧录问题上,最后换dfu才成功。好啦,接下来可以踏实的尝试画PCB了,回过头来再继续补坑Micropython+Pico2+Lvgl(官方的停止更新了)、Micropython+Pico1/Pico2+Openmv(官方不支持)。考虑到Lvgl的C版本还一直活跃,可以继续尝试C+Stm32+Lvgl。另外单片机支持TensorFlow Lite,做一些简单的边缘计算,还是可以玩玩的。

http://www.xdnf.cn/news/3365.html

相关文章:

  • 基于机器学习的舆情分析算法研究
  • 连接linux虚拟机并运行C++【从0开始】
  • 机器学习实战,天猫双十一销量与中国人寿保费预测,使用多项式回归,梯度下降,EDA数据探索,弹性网络等技术
  • vue中$set原理
  • Meta公司于2025年4月29日正式推出了全新Meta AI应用程序的首个版本
  • 正则表达式:精准匹配,高效处理文本
  • 《软件设计师》复习笔记(11.1)——生命周期、CMM、开发模型
  • 结构模式识别理论与方法
  • JWT Access Token 被窃取的风险与解决方案
  • spring-boot-maven-plugin 将spring打包成单个jar的工作原理
  • 企业经营系统分类及功能详解
  • 华为eNSP:IS-IS认证
  • 机器人--主机--控制系统
  • Python 常用内置函数详解(九):type()函数——获取对象类型或获取一个新的类型对象
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(上)
  • 2025华东杯数学建模B题完整分析论文(共36页)(含模型、代码、数据)
  • 分享5款开源、美观的 WinForm UI 控件库
  • 【Linux网络】I/O多路转接技术 - poll
  • DAY01:Vue零基础入门:环境搭建与核心语法深度解析
  • 数据库Mysql_约束
  • 第二章 日志分析-apache日志分析(玄机系列)
  • 【论文阅读26】贝叶斯-滑坡预测-不确定性
  • 图解 Git 工作流:理解 Rebase、Merge 与 Pull Request 的区别
  • 基于Redis实现-用户签到
  • C++——入门基础(2)
  • podman/docker国内可用的docker镜像源(2025-05)
  • 前端八股 3
  • Linux-04-搜索查找类命令
  • WPF实现数据库操作与日志记录
  • 工行手机银行安全吗?在应用商店下载工商银行安全吗?