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.mzph.cn/diannao/81283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盐化行业数字化转型规划详细方案(124页PPT)(文末有下载方式)

资料解读:《盐化行业数字化转型规划详细解决方案》 详细资料请看本解读文章的最后内容。 该文档聚焦盐化行业数字化转型,全面阐述了盐化企业信息化建设的规划方案,涵盖战略、架构、实施计划、风险及效益等多个方面,旨在通过数字化…

2025年人工智能火爆技术总结

2025年人工智能火爆技术总结: 生成式人工智能 生成式人工智能可生成高质量的图像、视频、音频和文本等多种内容。如昆仑万维的SkyReels-V2能生成无限时长电影,其基于扩散强迫框架,结合多模态大语言模型和强化学习等技术,在运动动…

边缘计算革命:大模型轻量化部署全栈实战指南

当ResNet-152模型能在树莓派4B上实现每秒27帧实时推理时,边缘智能时代真正到来。本文解析从模型压缩到硬件加速的完整技术栈,实测Transformer类模型在移动端的部署时延可压缩至16ms,揭示ARM芯片实现INT4量化的工程秘诀与十种典型场景优化方案…

边缘计算:数字世界的”末梢神经系统”解析-优雅草卓伊凡

边缘计算:数字世界的”末梢神经系统”解析-优雅草卓伊凡 一、边缘计算深度解析 1.1 边缘计算的定义与架构 边缘计算(Edge Computing)是一种分布式计算范式,它将数据处理能力从传统的集中式云数据中心推向网络边缘,更…

面试手撕——迭代法中序遍历二叉树

思路 访问顺序和处理顺序不一致导致迭代法难写,体现在总要先遍历根节点,才能访问左右孩子,用null标记,null标记的节点表示已经访问过了,下一次可以处理,所以在当前栈顶节点不是null的时候,都要…

AD系列:Windows Server 2025 安装AD CS角色和颁发证书

什么是 Active Directory 证书服务? Active Directory 证书服务 (AD CS) 是一个 Windows Server 角色,负责颁发和管理在安全通信和身份验证协议中使用的公钥基础结构 (PKI) 证书。 颁发和管理证书 数字证书可用于对电子文档和消息进行加密和数字签名&…

kubernetes》》k8s》》Service 、Ingress 区别

K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源,它提供了七层(应用层)的负载均衡功能。Ingress可以根据主机名、…

【java WEB】恢复补充说明

Server 出现javax.servlet.http.HttpServlet", according to the project’s Dynamic Web Module facet version (3.0), was not found on the Java Build Path. 右键项目 > Properties > Project Facets。Dynamic Web Module facet version选4.0即可 还需要在serv…

VMware 创建虚拟机+简易安装Ubuntu的详细操作步骤

VMware 创建虚拟机安装Ubuntu的详细操作步骤 一、创建虚拟机1.1 点击创建新的虚拟机1.2 选择自定义创建虚拟机1.3 选择虚拟机的硬件兼容性1.4 安装客户机操作系统1.5 简易安装信息1.6 命名虚拟机名称1.7 处理器配置1.8 虚拟机内核选择1.9 网络类型1.9 选择I/O 控制器类型1.10 选…

GCC-C语言“自定义段”

一、起因 事情的起因是这样的,在看别人代码时,发现了一种很有意思的写法,因为本人主要是以应用层开发为主,所以对这种写法还是比较少见的,所以研究了一下,就牵扯出了一些知识点,这里先卖个关子,继续往下看。 二、经过 发现了一串这样的代码 static void do_mac(mcmd_…

【信息系统项目管理师-论文真题】2021上半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:论信息系统项目的合同管理1、写作要点2、解题思路项目合同管理的过程项目合同主要的条款内容试题2:论信息系统项目的范围管理1、写作要点2、解题思路项目范围管理的过程核心范围对应的需求跟踪矩阵项目…

python2反编译部分

文章目录 1、所需环境2、确认打包工具(没成功)3、 解包.exe文件(以PyInstaller为例) - useful【***总的来说这一步对我有用】4、定位关键文件 - useful5、 修复.pyc文件头(关键步骤!)- maybe-ig…

基于STM32的中点圆算法,画空心圆的函数

中点圆算法(Midpoint Circle Algorithm)是一种高效绘制圆的算法,它利用圆的对称性和整数运算来避免浮点计算,非常适合嵌入式系统使用。 空心圆绘制函数实现 /*** brief 使用中点圆算法绘制空心圆* param x0: 圆心x坐标* param y0: 圆心y坐标* param…

Android Kotlin 项目完整集成 Bugly 异常监控指南

Android Kotlin 项目集成 Bugly 异常监控完整指南 一、Bugly 简介 Bugly 是腾讯提供的专业移动应用异常监控平台,支持: 崩溃报告(Java/Native)错误分析性能监控热更新功能(需额外配置) 二、集成步骤 1…

【电脑维修】MERCURY水星无线网卡导致 Windows 网络适配器无法连接的一种情况

故障现象 Powershell 无法启动, Terminal 无法启动, CMD 无法启动。 操作1 重新拔插 MERCURY 无线USB网卡,上述各种终端恢复相应。 分析 应该是MERCURY驱动故障导致卡死 操作2 磁盘出现 MERCURY 盘。里面是一个 MERCURY.exe 驱动安装程…

Docker 打上 Tag 和 Push 的意思

在 Docker 中,打 Tag(Tagging) 和 Push(Pushing) 是两个关键操作,用于管理镜像的版本并上传到镜像仓库(如 Docker Hub、阿里云 ACR、Harbor 等)。 1. 打 Tag(Tagging&…

简化excel校验提高开发效率

业务背景:上传excel文件进行基础数据校验,然而东西太多写着写着就...自然成了测试的KPI了 解决思路:使用现有的注解处理,原理使用validate注解原理 直接上干货,一行代码搞定校验: ValidateUtils.validat…

基于Koa实现的服务端渲染 ✅

前段时间刚写完毕业论文,现在一上来就是“基于”,哈哈。🤯 这篇文章持续更新,涉及到的技术栈是Koa、Vue和Vite (用React手搓服务端渲染好麻烦)。但是现在能上生产的服务端渲染估计是Next(配合Re…

Linux运维——Vim基础

Vim基础 一、移动光标1.1、基础移动1.2、屏幕滚动 二、编辑操作2.1、插入模式2.2、删除与修改2.3、复制粘贴 三、搜索与替换3.1、搜索3.2、替换 4、分屏与窗口管理4.1、分屏操作4.2、窗口调整 五、宏与批量操作六、效率技巧七、操作符7.1、内置操作符7.2、操作符 文本对象&…

git操作合集

更新文件 在 Git 中更新已经上传到仓库的文件 1、检查当前状态 首先,打开终端或命令行工具,进入你的 Git 仓库目录(即包含 .git 文件夹的目录)。运行以下命令来查看当前仓库的状态: git status 此命令会显示哪些文…