
STM32
文章平均质量分 65
学习STM32开发
优惠券已抵扣
余额抵扣
还需支付
¥299.90
¥399.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
Stone_lu。
这个作者很懒,什么都没留下…
展开
-
STM32之不使用MicroLIB
microlib 是缺省 C 库的备选库,功能上不具备某些 ISO C 特性。microlib 进行了高度优化以使代码变得很小,功能比缺省 C 库少,用于必须在极少量内存环境下运行的深层嵌入式应用程序。Semihosting是用于ARM目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。原创 2024-04-18 10:16:15 · 986 阅读 · 0 评论 -
TouchGFX之后端通信
所有TouchGFX应用都有Model类,Model类除了存储UI状态信息,还可用作面向周围系统的接口。这里周围系统我们指的是在你整个系统中用到的硬件外设以及需要进行通讯的其他任务。通常来讲,在各自的View类中直接访问其他软件模块或者硬件外设并不是个好的设计。在大多数应用中,UI需以某种方式连接到系统的其余部分,并发送和接收数据。以下示例为:通过button控件,触发数据发送给系统其他任务;首先程序需要touchgfx以外的一个任务,和两个用来收发数据的队列。编写向周围系统发送数据的程序。原创 2023-10-03 22:51:51 · 2502 阅读 · 0 评论 -
TouchGFX之自定义触发条件和操作
使用交互系统发送自定义触发条件: 通过自定义容器的“交互”选项卡,创建新的交互并选择“自定义触发条件”自定义容器操作添加行为: 自定义容器的“交互”选项卡,创建新的交互并选择“自定义操作”作为触发条件。自定义触发条件用作界面上交互系统的触发条件:通过界面选择自定义触发条件作为交互的“触发条件”通过TouchGFX Designer,您可以自己定义具有触发条件和操作的交互组件。自定义容器创建自定义触发条件:通过自定义容器的属性选项卡添加自定义触发条件。自定义容器创建操作:通过自定义容器的属性选项卡执行操作。原创 2023-09-10 00:51:22 · 354 阅读 · 0 评论 -
TouchGFX之MVP
每个用户端Presenter实例对象(基于ModelListener类)可以绑定Model实例对象指针,即用户端Presenter实例对象可以通过该指针查询到Model实例对象。Model实例对象可以绑定一个ModelListener(用户端Presenter的基类之一)实例对象指针,即Model实例对象可以通过该指针查询到Presenter实例对象。每个View实例对象可以绑定一个Presenter实例对象指针,即View实例对象可以通过该指针查询到Presenter实例对象。从MVP类的代码可以看出。原创 2024-03-16 18:08:04 · 1015 阅读 · 0 评论 -
TouchGFX之Transition
BlockTransition:前一个屏幕不动,将下一个切成多个小块并在每帧绘制两个小块覆盖。CoverTransition:前一个屏幕不动,下一个屏幕缓慢移入并覆盖。SlideTransition:前一个屏幕缓慢移出,下一个屏幕缓慢移入。WipeTransition:前一个屏幕不动,下一个屏幕缓慢展开并覆盖。Transition用来实现两个screen的切换效果。NoTransition:无切换效果。原创 2024-04-08 11:53:52 · 339 阅读 · 0 评论 -
TouchGFX之heap
touchgfx并不会为所有屏幕分配内存,而仅仅会分配一个最大屏幕所需的内存。这个内存由所有屏幕共用,当切换到哪个屏幕时就由哪个屏幕使用。从本节内容可以看出,touchgfx中只有一个Model的实例对象,但每一个屏幕都对应一个View和Presenter的实例对象。meta.hpp,这是一个模板元定义。乍一看没看懂,最后AI帮我解释了一下这个代码,我才想明白。下面看一下怎么使用这些模板,通过meta搜索整个工程,出现在如下代码中。touchgfx实现该需求的代码很优秀,下面看一下这个代码。原创 2024-03-15 17:36:54 · 196 阅读 · 0 评论 -
TouchGFX之Mixins
Mixin类扩展控件的功能,例如使之能够将移动或透明度值变化制作成动画。在Move Animator和Fade Animator Mixin的基础上,TouchGFX Designer交互能够生成将移动或透明度值变化制作成动画的代码。这些Mixin可通过TouchGFX Designer或在用户代码中手动添加到控件。Move Animator Mixin:使控件能够将从当前位置到指定结束位置的移动制作成动画。原创 2023-10-04 15:05:08 · 1029 阅读 · 0 评论 -
TouchGFX之图表
法轻松将数据点添加到图表中。例如,如果精度等级设置为0.1,则添加到静态图表中的每个数据点将在内部乘以10,从而模拟一位数的精度。例如,如果精度等级设置为0.1,则添加到动态图表中的每个数据点将在内部乘以10,从而模拟一位数的精度。在内部,静态图表将所有数据点存储在一个32位整数中,因此,为了添加和显示数据点(通过一定数量的数字表示精度等级),可以定义一个精度等级。在内部,动态图表将所有数据点存储在一个32位整数中,因此,为了添加和显示数据点(通过一定数量的数字表示精度等级),可以定义一个精度等级。原创 2024-04-08 14:31:58 · 887 阅读 · 0 评论 -
TouchGFX之时钟
时间属性组用于通过更改不同的属性来调整时间在应用中的显示方式。在“时钟指针”属性组中,用户可以定义要使用的指针及各自的Z轴顺序。旋转位置决定已定义的指针图像应该围绕着进行自身旋转的点。TouchGFX中的数字时钟是一个控件,允许应用以数字文本的形式显示时间,而与此相对的。“时间”属性组允许用户设置时钟控件的初始时间,以及是否使用Am/Pm标准。模拟时钟是一个控件,能够显示一个传统的模拟时钟,而不是通过文本显示时间的。模拟时钟的大小是从关联图像的大小获取的,其大小无法更改(除非更改图像)。原创 2024-04-08 14:23:03 · 602 阅读 · 0 评论 -
TouchGFX之进度指示器
默认情况下,弧线的位置为(0,0),并且与仪表本身的大小相同。因此,可以将图像修剪为所需的尺寸并将弧线置于特定的位置,而不是采用一幅大型图像(尺寸与仪表相同,带许多透明的线条)。因此,可以将图像修剪为所需的尺寸并将弧线置于特定的位置,而不是采用一幅大型图像(尺寸与仪表相同,带许多透明的线条)。可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。上方作为进度指示器。原创 2024-04-08 14:10:00 · 752 阅读 · 0 评论 -
TouchGFX之容器
容器是TouchGFX中的一种组件,可以包含子节点(比如控件和其他容器)。在TouchGFX Designer中,可以在Widgets(控件)选项卡中的containers(容器)类别下找到容器,向容器中添加控件的方法将控件拖放到树视图中的容器中。子容器在Z轴上的顺序由向容器中添加子容器时的顺序决定 - 最后添加的子容器将显示在屏幕的最前面。由于TouchGFX中控件的位置是相对于其父容器而确定的,因此改变父容器的位置也会相应地移动子容器。原创 2024-04-08 11:51:28 · 525 阅读 · 0 评论 -
TouchGFX之文本区域
文本区域在屏幕上显示文本。文本区域的文本在大小、颜色、自定义字体、动态文本等方面是完全可以配置的。原创 2024-03-29 20:31:52 · 597 阅读 · 0 评论 -
TouchGFX之图像
所用图像必须使用标识符,例如img_01.png、img_02.png、img_03.png、img_04.png、img_05.png、img_06.png、img_07.png等。可缩放图像是能够绘制缩放版位图的控件。如果需要将图像显示为不同大小,需要调整关联的导入图像的大小。纹理映射器是一种控件,能够绘制转换后的图像,可以自由缩放并围绕可调原点旋转。可缩放图像位于 TouchGFX Designer 中的图像控件组中。模拟图像的大小是从关联图像的大小获取的,其大小无法更改(除非更改图像)。原创 2024-03-29 19:19:58 · 290 阅读 · 0 评论 -
TouchGFX之Button
public:private:#endifpublic:protected:private:运行模拟器左边松开 -> 右边按下。原创 2024-03-28 21:06:09 · 458 阅读 · 0 评论 -
TouchGFX之画布控件
举例:在10x10方块内部粗略实现一个菱形块public:#endifpublic:protected:private:add(box);运行模拟器,效果如下(意味着画布缓冲区大小可以调整到大于168字节即可)尽管TouchGFX提供一组预定义的画笔类,涵盖了大多数用例场景,但也可实现定制画笔public:return;原创 2023-09-22 13:41:28 · 594 阅读 · 0 评论 -
TouchGFX之画布
类似地,如果圆应嵌入一个6x6像素的方块,则中心必须位于 (3, 3),半径必须是2.5,因此半径需为小数。画布控件渲染器(Canvas Widget Renderer,以下简称CWR)是强大的多功能TouchGFX插件,在使用相对较小的存储空间的同时保持高性能,可提供平滑、抗锯齿效果良好的几何图形绘制。因此,包含屏幕左上角像素的方块的轮廓如下:(0,0) -> (1,0) -> (1,1) -> (0,1) -> (0,0)。为此,CWR必须具有专门分配的存储缓冲区,以便在渲染过程中使用。原创 2024-03-28 12:49:56 · 1079 阅读 · 0 评论 -
TouchGFX之Widget
在创建应用时,您可能需要TouchGFX中没有包含的控件。在创建应用时,您可能需要TouchGFX中没有包含的控件。但有时此法并不够用,当您需要全面控制帧缓冲时,您需要使用自定义控件法。TouchGFX Designer目前不支持自定义控件的创建。因此,您将需要手动写入自定义控件的代码,然后在视图的用户代码部分插入控件。示例为自定义一个二维码控件public:/* 获取该坐标值 *//* 获取宽度 *//* 获取高度 */#endifi < 100;原创 2023-09-20 19:24:25 · 406 阅读 · 2 评论 -
TouchGFX之Drawable
TouchGFX框架中的所有控件均为Drawable类的子类。该类别包含控制大小和位置的一般方法。原创 2024-03-26 17:28:09 · 299 阅读 · 0 评论 -
TouchGFX之事件
Touchgfx的事件类型有:点击事件、拖拽事件、手势事件和定时事件、外部按键事件、屏幕转换挂起事件当引擎检测到这些事件的时候,调用事件处理函数传递给应用。原创 2024-03-28 16:27:55 · 419 阅读 · 0 评论 -
TouchGFX之位图
从RAM读取数据通常比从闪存读取要快(特别是在使用纹理映射器时,原因是它使用非线性存储器存取),因此,缓存到RAM可提升UI性能。如果缓存到RAM,由于将从RAM读取位图(在某些情况下,写入闪存要求是非存储器映射闪存),因此可以在显示UI的同时将闪存用于其他目的(如日志文件)。为了打破这一限制,位图缓存提供了一种在上电期间缓存RAM中的一些或全部位图数据的机制。如需缓存所有位图,则缓存大小必须足够大,才能包含所有位图数据。如果可分配用于位图缓存的RAM空间小于位图的总大小,则启动过程中不能缓存所有位图。原创 2024-03-25 20:45:09 · 777 阅读 · 0 评论 -
TouchGFX之字体
应用在运行时将这些文件加载并提供给TouchGFX,举例来说,应用可以从外部存储器(如SD卡)加载字体,也可以从互联网下载字体。7.FontContextualFormsTable:上下文形式的信息,像阿拉伯语,字符形状会根据它前后的字符而改变。从上面的例子中可以看出,此方法的缺点是需要将整个二进制字体加载到RAM(或存储器映射闪存),在字体较大时会面临困难。可以看出,使用二进制字体其实就是在二进制字体实例化之后,使用setFont函数将原先静态字体替换掉。使用二进制字体需要将整个字体加载到。原创 2024-03-20 21:06:20 · 497 阅读 · 0 评论 -
TouchGFX之文本
正常情况下,文本翻译文件会被编译到应用中。二进制翻译使应用程序不含文本翻译。二进制翻译在单独的二进制文件中生成,该文件可编程到闪存中或存储在SD卡等存储设备上。在处理大量翻译文件时,为应用开发者带来了更大灵活性。文本翻译,意思是屏幕上的同一个文本框,可以显示好几种语言的文本。文本格式数据库文件,typedTextDatabase.cpp。显示一段文本,需要几个关键数据:文本格式、文本内容、字体。每个文本资源通过typedTextId,从库中索引出数据。其他静态文本数据,在text.cpp中。原创 2024-03-25 18:40:12 · 598 阅读 · 0 评论 -
TouchGFX之调试
其实不必在应用程序中多次调用DebugPrinter::setString。只需要更改缓存区的内容,但是请调用invalidateDebugRegion,这将使DebugPrinter绘制新内容。在使用DebugPrinter之前,需要分配一个实例并将其传递给Application类,且DebugPrinter实例必须兼容所使用的LCD类。此时,我们已经将DebugPrinter配置为左上角240 x 40像素写入。DebugPrinter类是一种在显示屏上打印调试消息的简单方法,无需向屏幕添加控件。原创 2023-08-27 22:27:55 · 295 阅读 · 0 评论 -
TouchGFX之HAL
TouchGFX引擎通过具体的子类和类实现文件(.cpp)来访问TouchGFX AL,实现了TouchGFX 引擎中定义的类成员函数。职责要么在AL (HAL)的硬件部分实现,要么在与TouchGFX Engine同步的AL部分实现,典型的做法是通过RTOS (OSAL)来实现。在这种情况下,如果所显示图形的复杂度不会产生任何视觉失真,则只需一个帧缓冲。一个帧缓冲用于写入下一幅需要显示的图像,另一个帧缓冲用于将图像传输到显示屏。在TouchGFX中,不足一个的帧缓冲表示部分帧缓冲。原创 2024-03-27 13:41:01 · 832 阅读 · 0 评论 -
TouchGFX之DMA和BlitOp
Chrom-ART (DMA2D)图形加速器能够传输来自存储器的部分图像数据,并将其放入或先混合后再放入帧缓存。Chrom-ART可从内部或外部存储器读取数据,在绘制图形时可使用此功能,以显著提高显示性能,同时明显降低应用程序的MCU占用率。以上各操作方式,在DMA驱动中进行实现。DMA驱动代码提供一个BlitOp为元素的FIFO,在引擎和驱动之间进行交互。DMA通过HAL实例化注册到touchgfx中,并通过HAL类中封装部分程序函数供用户调用。原创 2024-03-17 14:24:30 · 228 阅读 · 0 评论 -
TouchGFX之性能测量
TouchGFX Core开放了几个信号,可用于测量性能。当这些信号在内部触发时,用户可在应用程序中同步触发单个GPIO,从而实现“渲染时间”和其他有用信号的可视化。使用示波器或逻辑分析仪测量配置信号。下图为显示了四个信号的逻辑分析仪图形。该应用程序在STM32F746G-DISCO上运行,带有动画图像UI示例。类上的函数,根据STM32CubeMX中的用户配置,来翻转引脚。文件中的GPIO类生成函数。将自动为端口、引脚生成匹配符号,例如。信号由LTDC每16ms生成一次。TouchGFX生成器为。原创 2024-03-20 13:25:40 · 418 阅读 · 0 评论 -
TouchGFX之platform
调用setMCUInstrumentation将实例对象注册到HAL层。LCD类用于在LCD上绘制位图、文本和矩形等。这是一个LCD基类接口,包含纯虚函数。HAL实例化的时候将触摸类的实例对象作为参数传递其中,即可完成注册。HAL实例化的时候将LCD类的实例对象作为参数传递其中,即可完成注册。将该类接口注册到抽象层HAL中,用于测量CPU负荷(%)下面是每像素16位的LCD子类,具体实现了各种绘图方法。用户需要自己实现纯虚函数接口。用户需要自己实现纯虚函数接口。用户需要自己实现纯虚函数接口。原创 2024-03-15 17:29:35 · 226 阅读 · 0 评论 -
TouchGFX之OSWrappers
在发送进行时,随意地将帧渲染到帧缓存是不可取的。因此,图形引擎会在发送开始后等待一小段时间,然后再开始渲染。对于应用而言,按固定速率渲染帧的好处是更容易创建持续特定时间的动画。例如,如果显示屏频率为60 Hz,则应将两秒钟的动画设定为在120帧内完成。接口来同步帧缓存访问,同时希望访问帧缓存的外设(如DMA2D) 也必须执行相同操作。图形引擎的等待时间通常被应用中其他优先级较低的进程利用。在这种情况下,时间不会被浪费,优先级较低的进程反正都应在某些时间点运行。多个执行体可能涉及对帧缓存区的访问。原创 2024-03-15 14:51:39 · 403 阅读 · 0 评论 -
TouchGFX之移植
结果和TouchGFX Designer模拟器运行结果一致。4.生成代码,工程目录下多了TouchGFX文件夹。5.打开TouchGFX Designer工程。在前面篇幅的基础上移植TouchGFX。2.使用touchgfx需要打开CRC。8.打开keil工程,修改分散加载文件。6.放置box控件,将颜色设置为红色。1.配置FreeRTOS。3.配置TouchGFX。7.运行模拟器,生成代码。9.编译工程,并烧录运行。原创 2023-08-25 20:09:52 · 611 阅读 · 0 评论 -
TouchGFX之触摸控制器
必须能够从触摸控制器读取触摸坐标,以便用户与应用程序进行交互。此处开发的代码将被用于以后开发TouchGFX抽象层。由于开发板触摸芯片没有连接在I2C接口上,因此本节采用普通IO口模拟I2C接口。7.烧录程序,运行检查触摸坐标。5.GT9147驱动。6.循环采集触摸坐标。原创 2023-08-23 15:52:51 · 507 阅读 · 1 评论 -
TouchGFX之DMA2D
Chrom-ART (DMA2D)图形加速器能够传输来自存储器的部分图像数据,并将其放入或先混合后再放入帧缓存。Chrom-ART可从内部或外部存储器读取数据。同样,它可以写入内部或外部存储器。在绘制图形时可使用此功能,以显著提高显示性能,同时明显降低应用程序的MCU占用率。在目标存储器中将特定颜色填充到屏幕(寄存器到存储器模式)4.烧录程序,显示屏显示相应颜色。原创 2023-08-23 15:02:50 · 268 阅读 · 0 评论 -
TouchGFX之存储器映射闪存
对于大多数项目,建议使用外部闪存,因为这允许应用程序使用多个大型图像。即便最普通的应用程序,内部闪存也可能会很快被占用完。4.添加下载算法(嵌入式基础知识,此处不做分析)2.编写W25Q256配置代码(copy。基础知识,此处不做分析)5.创建变量,仿真运行。3.修改分散加载文件。原创 2023-08-23 11:07:40 · 308 阅读 · 0 评论 -
TouchGFX之外部SDRAM
1.配置外部SDRAM(嵌入式基础知识,此处不做分析)2.编写SDRAM配置代码(copy正点原子例程)3.将帧缓存放在外部RAM(修改上一篇文章的工程)原创 2023-08-21 22:52:31 · 290 阅读 · 0 评论 -
TouchGFX之LTDC显示屏
1.根据原理图配置LTDC的GPIO(接线方式为RGB565)原创 2023-08-20 17:10:41 · 323 阅读 · 0 评论 -
TouchGFX之创建项目
我手里的开发板为正点原子阿波罗开发板,STM32H753IIT(Y版本)1.打开STM32CubeMX,选择STM32H753IITx。3.配置时钟(外部晶振25MHz,Y版本最大主频400MHz)2.配置调试口,SWD。6.在线调试,运行正常。原创 2023-08-20 16:48:03 · 155 阅读 · 0 评论 -
TouchGFX之安装
在X-CUBE-TOUCHGFX安装路径下,我的路径为C:\Users\stone\STM32Cube\Repository\Packs\STMicroelectronics\X-CUBE-TOUCHGFX\4.22.0找到下面文件。转到“STMicroelectronics”选项卡。滚动直至找到“X-CUBE-TOUCHGFX”,然后展开节点。点击“TouchGFX Generator”复选框,然后点击“立即安装”。找到TouchGFX Generator软件包进行安装.按照说明完成安装过程。原创 2023-08-20 16:10:49 · 429 阅读 · 0 评论 -
FatFs源码分析
#include "ff.h"#include "diskio.h"/* 扩展字符范围 */#define _DF1S 0x81#define _DF1E 0xFE#define _DS1S 0x40#define _DS1E 0x7E#define _DS2S 0x80#define _DS2E 0xFE/* 字符类型相关宏定义 */#define IsUpper(c) (((c)>='A')&&((c)<='Z'))#define IsLower(.原创 2021-03-11 18:20:22 · 1269 阅读 · 0 评论 -
FatFs简介
分区可以对一个存储设备进行分区也可以不分区,并且可以在每个分区上构建一个文件系统。不分区的时候,整个存储空间中只有一个分区分区的时候,存储设备中需要有主引导记录(Master Boot Record,缩写:MBR)对存储空间进行分区管理,MBR放在存储空间的第一个扇区中(1) 第1-446字节:引导代码。(2) 第447-510字节:分区表(Partition table)。(3) 第511-512字节:主引导记录签名(0x55和0xAA)。分区表上有四项,每..原创 2021-03-11 12:03:01 · 2809 阅读 · 0 评论 -
USB枚举
USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串描述符和配去置设备这么几个过程。原创 2021-03-30 09:35:41 · 622 阅读 · 2 评论 -
USB描述符
2 USB CDC类基础理论知识介绍2.1 USB CDC类、USB2.0标准与PSTN之间的关系CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示:图 1 USB2.0标准、CDC、PSTN之间的关系如上图,USB2.0标准下定义了很多子类,有音频类,CDC类,HID,打印,大容量存储类,HUB,智能卡等等,这些在urb.org官网上有具体的定义,这里我们主要讲的是通信类原创 2021-03-29 17:16:33 · 1158 阅读 · 1 评论