【项目笔记】STM32 BootLoader(一) 文件系统

首先放上 项目主页

简单的介绍一下这个 BootLoader:利用 STM32 提供的 USB FS 接口,并设置为 大容量存储设备(MSC, Mass Storage device Class),并在内存中虚拟出一个 FAT16 的文件系统,以此达到让烧录和读取 Flash 像用 U 盘拷贝文件一样便捷。

系统结构如下图所示,这篇文章先介绍一下最主要的 文件系统 部分:

image-20210216134129762

TinyUSB 的移植

TinyUSB 是一个开源的的跨平台 USB 主机/设备协议栈,用于嵌入式系统,它是内存安全的,没有动态内存分配,同时也是线程安全的,所有的中断事件都会被推迟,然后在非中断服务函数中处理。目前已经支持许多主流嵌入式平台。

这篇文章就介绍一下如何将 TinyUSB 添加至项目中,这里以 STM32 平台为例。

image-20210207132819334

STM32 CMake 模板

一篇久违的文章。

上个学期因为各种 B 事太多了,一直抽不出时间来更新博客。

相比起 MakefileCMake 就要简洁许多,这就分享一个 STM32 的 CMakeLists 模板:

LVGL 的移植

最近了解了一下开源图形库 LVGL,现在记录一下移植的过程。其实 LVGL 移植挺方便的,仅需实现两个函数。

将 LVGL 添加至项目

首先,在 GitHub Release 中下载最新版本的源代码。下载完成后,将解压出的文件夹复制到工程目录的一个文件夹中(这里以Middlewares/lvgl/为例)。

在 Docker 中运行 GUI 程序

最近在调试 MCU 的过程中需要用到 ST 新推出的软件STM32CubeMonitor,虽然有 Linux 版本,但官方只提供了deb安装包,这让 Arch 用户咋办?用debtap,也不是不行,但我更新仓库就从没成功过,之前在 Windows 中用过 SSH 的X11 Forwarding透传功能,可以远程运行 GUI 程序,寻思着在 Docker 中是不是也可以,尝试了一下,遇到了一点问题,最终还是成功了,接下来就介绍一下方法和遇到的问题。

STM32中Flash的读写(HAL库)

在以前的电路中,常常会用到EEPROM (Electrically Erasable Programmable read only memory, 带电可擦可编程只读存储器),EEPROM在掉电后储存的信息不会丢失,一般用于存储设备的设置。

但现在更常用的是Flash(闪存),Flash的特点是结构简单,同样工艺和同样晶元面积下可以得到更高容量且大数据量下的操作速度更快,但Flash每次擦除只能以扇区(Page)为单位操作,而EEPROM可以以字节(Byte)为单位操作。相比EEPROM,FLASH操作过程麻烦,特别是在小数据量反复重写时,所以在MCU中Flash结构适于不需频繁改写的程序存储器

如何在Linux下开发STM32

前言

目前,用于开发STM32的主流IDE以及他们的缺点如下:

  1. MDK(界面太丑,代码补全功能较弱,缺少如大纲、小地图等功能,对于被VSCode惯坏的人简直是折磨😂
  2. IAR(没深度使用过,不好评价)
  3. STM32CubeIDE(基于Eclipse,使用时卡顿明显,代码补全需手动触发)
  4. VisualGDB(功能强大没得说,但有过于专业,有太多我用不上的功能)

于是我决定自己从编译器到调试器,搭建一套适合自己的STM32开发环境。