Stm32 烧录 Micropython

目录

前言

准备工作

开始操作

问题回顾

后记


前言

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

准备工作

  • 我有五块Stm32的单片机,头两个失败原因是,编译出来的固件超过FLASH了。
F103C8T6(失败) F401RCT6(失败) F411CEU6(成功) F407VET6 (未试) H743CEU6 (未试)
CPU 72MHz 84MHz 100MHz 168MHz 480MHz
RAM 20KB 64KB 128KB 192KB 1MB
FLASH 64KB 256KB 512KB 512KB 2MB
  • 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.11

    Copyright 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/01004 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,01016 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/04016Kg,01064Kg,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.11

    Copyright 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,做一些简单的边缘计算,还是可以玩玩的。

相关推荐
szxinmai主板定制专家1 小时前
基于 ZYNQ ARM+FPGA+AI YOLOV4 的电网悬垂绝缘子缺陷检测系统的研究
arm开发·人工智能·嵌入式硬件·yolo·fpga开发
光子物联单片机1 小时前
STM32G474单片机开发入门(八)内部FLASH详解及读写实战
stm32·单片机·嵌入式硬件·mcu
BreezeJuvenile1 小时前
通用定时器_输入捕获介绍及案例实操
stm32·单片机·嵌入式硬件·输入捕获·通用定时器
时空自由民.2 小时前
无人机系统耗电,低功耗管理问题解决方法(chatgpt)
单片机·嵌入式硬件·无人机
时空自由民.2 小时前
无人机系统耗电,低功耗管理问题解决方法(腾讯元宝)
单片机·嵌入式硬件·无人机
清风6666663 小时前
基于单片机的双档输出数字直流电压源设计
单片机·mongodb·毕业设计·nosql·课程设计
牛马大师兄4 小时前
STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·嵌入式·看门狗
夜月yeyue4 小时前
STM32 Flash 访问加速器详解(ART Accelerator)
linux·单片机·嵌入式硬件·uboot·bootloard
A9better4 小时前
嵌入式开发学习日志37——stm32之USART
stm32·嵌入式硬件·学习
国科安芯8 小时前
ASP4644芯片低功耗设计思路解析
网络·单片机·嵌入式硬件·安全