基于STM32 的 Astra UI 的学习与探索

news/2025/2/6 0:13:27/文章来源:https://www.cnblogs.com/FBsharl/p/18700325

项目地址:https://github.com/AstraThreshold/oled-ui-astra.git 

项目  README 文件

## powered by astra UI.# [Releases](https://github.com/dcfsswindy/oled-ui-astra/releases)# [Wiki](https://github.com/dcfsswindy/oled-ui-astra/wiki)# [Video](https://www.bilibili.com/video/BV16x421S7qc)

国内访问 github 速度比较慢,建议访问加速镜像网址(dgithub.xyz):dgithub.xyz/dcfsswindy/oled-ui-astra/wiki 学习其使用文档,

或者访问地址:https://gitcode.com/gh_mirrors/ol/oled-ui-astra 进行克隆

 

首先,想象自己是一个采访 "Astra UI"这个明星的记者,思考准备问它几个问题吧:

疑问1:其适配的硬件条件是什么?

疑问2:Astra UI是否简单易用?如何写一个最简单的二级页面?

疑问3:如何设置页面中元素的动作(相当于QT中的 SIGNAL 和 SLOT)

疑问4:Astra UI 是基于 C++的吗?光用C语言可以运行吗?

疑问5:Astra UI有哪些有趣的特效和功能?能够解决哪些方面的难题?

疑问6:Astra UI支持哪些屏幕,是否适配其他平台?移植是否容易?

疑问7:Astra UI 相较于其他GUI库,比如U8g2,比如Lvgl,比如TFT_LCD等等,有哪些优势或者特点?

 

带着这些问题,进行我们的探索之旅吧:

疑问1:其适配的硬件条件是什么?

处理器/开发板

astra UI 可以支持目前主流的硬件平台,包括 STM32 、Arduino 、ESP32 等。 若您的硬件平台默认情况下不支持 C++ 编程(如 STM32 ),可在网络上搜索对应的支持方式。只要硬件平台可以支持 C++ 编程,astra UI 都可以成功部署并运行。 但仍有一些推荐的硬件平台配置,若您的硬件平台满足以下配置,可能会获得比较优秀的使用体验:

  • 主频率大于等于 40 MHz
  • 显示数据传输总线速率(如 SPI )大于 1 Mbps 
    • 在 astra UI v0.0.2-alpha 中,数据传输速率会影响各种动画的速度
    • 后续的版本更新会解决这一问题(详见“更新计划”)
    • 下个版本后,普通的软件模拟低速 I2C 协议即可得到正常的使用体验
    • 若您的传输速率达不到此要求,动画速度会变慢,但不会影响使用
  • FLASH 大于等于 128 KB (著名的STM32F103C8T6 不满足要求,因为它是 64KB 的) 
    • 后续的版本更新会优化、裁剪程序结构
    • 经测试,在 astra UI v0.0.2-alpha 中:
      • 不添加任何菜单,单纯部署 astra UI 到硬件平台,约占用 80 KB
      • 添加两级菜单,其中包括一页图标页和一页列表页,约占用 90 KB
      • 添加两级具有七个元素的菜单,包括一页图标和一页列表,约占用 100 KB
  • 至少一个 ADC 端口(可选的,用于生成真随机数,您也可以用其他方式生成)
    • 每次开机动画背景星星生成的位置使用了真随机数
    • 以下情况需要您特别配置 HAL,详见“移植(部署)教程”
      • 若您想更改随机数生成方式
      • 若您不想星星的位置随机生成
      • 若您使用的硬件平台没有 ADC 端口
      • 若您不想使用 ADC
    • 若您不想在开机时显示 astra UI 开机动画,请与作者取得联系获得 Pro 版
  • 两个按键,分别用于 选择上一项/返回上一级 和 选择下一项/确认
    • 当然您也可以在 派生HAL 中自定义按键处理的方式
    • 关于 HAL ,在下文中会有提及

在 astra UI 测试阶段,笔者使用的硬件平台是 STM32F103CBT6 。 其具有 128 KB 的 FLASH;72 MHz 的主频率。 如果您的硬件平台与笔者相同,可以直接刷入仓库中的源码,无需另外移植。 笔者的具体接线方式,可参考下文“例程”内容。

附:STM32芯片型号规则——第二位数字代表 FLASH 容量:

‌STM32的命名规则主要包括以下几个部分‌:‌‌1 家族名称‌:STM32表示这是一个基于ARM Cortex-M内核的32位微控制器(MCU)。
‌2 芯片类型‌:例如“F”表示通用型芯片,“L”表示低功耗型,“H”表示高性能型。
‌3 子系列‌:例如“103”表示基础型子系列,“407”表示增强型子系列。
‌4 引脚数目‌:例如“Z”表示144个引脚,其他常见的有“C”表示48引脚,“R”表示64引脚,“V”表示100引脚,“I”表示176引脚,“B”表示208引脚,“N”表示216引脚。
‌5 内部Flash容量‌:例如“E”表示512KB,其他常见的有“4”表示16KB,“6”表示32KB,“8”表示64KB,“B”表示128KB,“C”表示256KB,“F”表示768KB,“G”表示1024KB。
‌6 封装类型‌:例如“T”表示LQFP封装,其他常见的有“H”表示BGA封装,“U”表示VFQFPN封装。
‌7 温度范围‌:例如“6”表示工作温度范围为-40°C到85°C,其他常见的有“7”表示工作温度范围为-40°C到105°C。实际应用中的例子
以STM32F103C8T6为例:‌1 STM32‌:表示这是一个基于ARM Cortex-M内核的32位微控制器。
‌2 F103‌:表示这是一个基础型子系列的增强型芯片。
‌3 C8‌:表示该芯片有48个引脚,内部Flash容量为64KB。
‌4 T6‌:表示该芯片的封装类型为LQFP,工作温度范围为-40°C到85°C。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879326.html

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

相关文章

Servlet基础

什么是Servlet、Servlet的架构、Servlet任务、Servlet的基本使用、Servlet的生命周期、Servlet API中主要接口及实现类、Servlet的部署(注册与映射)、缺省Servlet与启动时加载配置、ServletConfig与ServletContext、request和response什么是Servlet基础 Java Servlet 是运行在…

GNURadio模块学习——Source and Sink类

介绍GNU Radio中常见的 Source 与 Sink 模块,包括流程图端口、音频输入输出、虚拟连接、文件读写、ZMQ跨流程图通信,以及随机信号源、固定信号源、噪声源等常见信号源和时域、频域、星座图等信号展示工具。Source and Sink Pad(流程图端口) 当该流程图是hierarchical block…

【C++】gflag使用指南

一、什么是gflags? gflags 是一个用于定义命令行参数的 C++ 库,它由 Google 开发并开源。通过 gflags,你可以轻松地在你的程序中添加各种类型的命令行选项,包括整数、布尔值、字符串等,并且可以为这些选项设置默认值。此外,gflags 还提供了强大的帮助信息生成功能,使得用…

【C++】Google benchmark理解与应用

一、介绍 Google Benchmark 是一个用于 C++ 的微基准测试库。它旨在帮助开发者编写出更高效、更具表现力的基准测试代码。通过使用 Google Benchmark,可以方便地测量函数或代码片段的性能,并且能够生成详细的报告。 二、安装与配置 2.1 安装 在Ubuntu环境中安装Google Benchm…

LRU浅析

LRU算法LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使…

20250205 省选模拟赛 T3

20250205 省选模拟赛 T3 Description 设计一个 \(n\times n\) 的 01 矩阵,使得从 \((1,1)\) 走到 \((n,n)\) 且只能向右或下走且只经过为 \(1\) 的格子的方案数为 \(X\)。 \(n \leq 24\) 时得满分。\(X \leq 10^9\)。 Solution 基于 \(2\) 进制的构造方法我们称从左上到右下的…

Automa:自动化浏览器工作流

🏷️仓库名称:AutomaApp/automa 🌟截止发稿星数: 14340 (今日新增:33) 🇨🇳仓库语言: Vue 🤝仓库开源协议:Other 🔗仓库地址:https://github.com/AutomaApp/automa引言 Automa是一个浏览器扩展,允许用户通过连接模块来自动化浏览器任务。它消除了重复性任务的需…

本地部署DeepSeek教程

本地部署DeepSeek教程 步骤 本地部署DeepSeek教程步骤 1 安装Ollama 2 下载DeepSeek模型 3 可视化图文交互界面Chatbox(可选)1 安装Ollama 访问Ollama官网下载Ollama,默认安装即可。安装完成后打开终端(我这里是windows系统),输入: ollama help即可查看ollama选项,且可…

OpenLDAP篇-安装OpenLDAP服务01

1、OpenLDAP统⼀⽤户认证系统 1.1 为什么需要OpenLDAP 在没有OpenLDAP统⼀⽤户认证系统的环境中,往往会⾯临如下问题:1、当⽤户需要访问多台服务器时,管理员需要在每台服务器上⼿动创建账户。如果员⼯离职,还需逐台删除账户,整体操作繁琐且容易出现遗漏的情况,因此存在较…

集训3 20240127

集训3 20240127 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A: 题目大意:给定 \(n\) ,两个人轮流可以使 \(n\) 减去一个任意小于它且与它互质的数,求最后甲能否取胜 #include<bits/stdc++.h>using namespace std;int main() {long long n;cin&g…

RocketMQ实战—4.消息零丢失的方案

大纲 1.全链路分析为什么用户支付完成后却没有收到红包 2.RocketMQ的事务消息机制实现发送消息零丢失 3.RocketMQ事务消息机制的底层实现原理 4.是否可以通过同步重试方案来代替事务消息方案来实现发送消息零丢失 5.使用RocketMQ事务消息的代码案例细节 6.同步刷盘+Raft协议同步…

qoj7301 AGC036D 题解

qoj7301 orz yxx 有一个很牛的状态设计 \(f_{i,j,0/1}\),\(0\) 为 \(a_{i-1}>a_i\),\(j\) 记录 \(a_{i-1}\) 的值,\(a_i\) 的值未定;\(1\) 为 \(a_{i-1}<a_i\),\(j\) 记录 \(a_i\) 的值 这样可以完美解决 \(a_{i-1}>a_i<a_{i+1}\) 的问题 转移和优化都是简单的…