自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(367)
  • 资源 (8)
  • 收藏
  • 关注

原创 STM32之不使用MicroLIB

microlib 是缺省 C 库的备选库,功能上不具备某些 ISO C 特性。microlib 进行了高度优化以使代码变得很小,功能比缺省 C 库少,用于必须在极少量内存环境下运行的深层嵌入式应用程序。Semihosting是用于ARM目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。

2024-04-18 10:16:15 21

原创 TouchGFX之图表

法轻松将数据点添加到图表中。例如,如果精度等级设置为0.1,则添加到静态图表中的每个数据点将在内部乘以10,从而模拟一位数的精度。例如,如果精度等级设置为0.1,则添加到动态图表中的每个数据点将在内部乘以10,从而模拟一位数的精度。在内部,静态图表将所有数据点存储在一个32位整数中,因此,为了添加和显示数据点(通过一定数量的数字表示精度等级),可以定义一个精度等级。在内部,动态图表将所有数据点存储在一个32位整数中,因此,为了添加和显示数据点(通过一定数量的数字表示精度等级),可以定义一个精度等级。

2024-04-08 14:31:58 595

原创 TouchGFX之时钟

时间属性组用于通过更改不同的属性来调整时间在应用中的显示方式。在“时钟指针”属性组中,用户可以定义要使用的指针及各自的Z轴顺序。旋转位置决定已定义的指针图像应该围绕着进行自身旋转的点。TouchGFX中的数字时钟是一个控件,允许应用以数字文本的形式显示时间,而与此相对的。“时间”属性组允许用户设置时钟控件的初始时间,以及是否使用Am/Pm标准。模拟时钟是一个控件,能够显示一个传统的模拟时钟,而不是通过文本显示时间的。模拟时钟的大小是从关联图像的大小获取的,其大小无法更改(除非更改图像)。

2024-04-08 14:23:03 363

原创 TouchGFX之进度指示器

默认情况下,弧线的位置为(0,0),并且与仪表本身的大小相同。因此,可以将图像修剪为所需的尺寸并将弧线置于特定的位置,而不是采用一幅大型图像(尺寸与仪表相同,带许多透明的线条)。因此,可以将图像修剪为所需的尺寸并将弧线置于特定的位置,而不是采用一幅大型图像(尺寸与仪表相同,带许多透明的线条)。可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。上方作为进度指示器。

2024-04-08 14:10:00 590

原创 TouchGFX之Transition

BlockTransition:前一个屏幕不动,将下一个切成多个小块并在每帧绘制两个小块覆盖。CoverTransition:前一个屏幕不动,下一个屏幕缓慢移入并覆盖。SlideTransition:前一个屏幕缓慢移出,下一个屏幕缓慢移入。WipeTransition:前一个屏幕不动,下一个屏幕缓慢展开并覆盖。Transition用来实现两个screen的切换效果。NoTransition:无切换效果。

2024-04-08 11:53:52 162

原创 TouchGFX之容器

容器是TouchGFX中的一种组件,可以包含子节点(比如控件和其他容器)。在TouchGFX Designer中,可以在Widgets(控件)选项卡中的containers(容器)类别下找到容器,向容器中添加控件的方法将控件拖放到树视图中的容器中。子容器在Z轴上的顺序由向容器中添加子容器时的顺序决定 - 最后添加的子容器将显示在屏幕的最前面。由于TouchGFX中控件的位置是相对于其父容器而确定的,因此改变父容器的位置也会相应地移动子容器。

2024-04-08 11:51:28 259

原创 TouchGFX之文本区域

文本区域在屏幕上显示文本。文本区域的文本在大小、颜色、自定义字体、动态文本等方面是完全可以配置的。

2024-03-29 20:31:52 269

原创 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 123

原创 TouchGFX之Button

public:private:#endifpublic:protected:private:运行模拟器左边松开 -> 右边按下。

2024-03-28 21:06:09 248

原创 TouchGFX之事件

Touchgfx的事件类型有:点击事件、拖拽事件、手势事件和定时事件、外部按键事件、屏幕转换挂起事件当引擎检测到这些事件的时候,调用事件处理函数传递给应用。

2024-03-28 16:27:55 224

原创 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 904

原创 TouchGFX之HAL

TouchGFX引擎通过具体的子类和类实现文件(.cpp)来访问TouchGFX AL,实现了TouchGFX 引擎中定义的类成员函数。职责要么在AL (HAL)的硬件部分实现,要么在与TouchGFX Engine同步的AL部分实现,典型的做法是通过RTOS (OSAL)来实现。在这种情况下,如果所显示图形的复杂度不会产生任何视觉失真,则只需一个帧缓冲。一个帧缓冲用于写入下一幅需要显示的图像,另一个帧缓冲用于将图像传输到显示屏。在TouchGFX中,不足一个的帧缓冲表示部分帧缓冲。

2024-03-27 13:41:01 682

原创 TouchGFX之LCD

LCD类用于在LCD上绘制位图、文本和矩形等。这是一个LCD基类接口,包含纯虚函数。需要根据具体LCD进行实现。下面是每像素16位的LCD子类,具体实现了各种绘图方法。

2024-03-26 23:03:33 169

原创 TouchGFX之Drawable

TouchGFX框架中的所有控件均为Drawable类的子类。该类别包含控制大小和位置的一般方法。

2024-03-26 17:28:09 217

原创 TouchGFX之位图

从RAM读取数据通常比从闪存读取要快(特别是在使用纹理映射器时,原因是它使用非线性存储器存取),因此,缓存到RAM可提升UI性能。如果缓存到RAM,由于将从RAM读取位图(在某些情况下,写入闪存要求是非存储器映射闪存),因此可以在显示UI的同时将闪存用于其他目的(如日志文件)。为了打破这一限制,位图缓存提供了一种在上电期间缓存RAM中的一些或全部位图数据的机制。如需缓存所有位图,则缓存大小必须足够大,才能包含所有位图数据。如果可分配用于位图缓存的RAM空间小于位图的总大小,则启动过程中不能缓存所有位图。

2024-03-25 20:45:09 617

原创 TouchGFX之文本

正常情况下,文本翻译文件会被编译到应用中。二进制翻译使应用程序不含文本翻译。二进制翻译在单独的二进制文件中生成,该文件可编程到闪存中或存储在SD卡等存储设备上。在处理大量翻译文件时,为应用开发者带来了更大灵活性。文本翻译,意思是屏幕上的同一个文本框,可以显示好几种语言的文本。文本格式数据库文件,typedTextDatabase.cpp。显示一段文本,需要几个关键数据:文本格式、文本内容、字体。每个文本资源通过typedTextId,从库中索引出数据。其他静态文本数据,在text.cpp中。

2024-03-25 18:40:12 420

原创 TouchGFX之字体

应用在运行时将这些文件加载并提供给TouchGFX,举例来说,应用可以从外部存储器(如SD卡)加载字体,也可以从互联网下载字体。7.FontContextualFormsTable:上下文形式的信息,像阿拉伯语,字符形状会根据它前后的字符而改变。从上面的例子中可以看出,此方法的缺点是需要将整个二进制字体加载到RAM(或存储器映射闪存),在字体较大时会面临困难。可以看出,使用二进制字体其实就是在二进制字体实例化之后,使用setFont函数将原先静态字体替换掉。使用二进制字体需要将整个字体加载到。

2024-03-20 21:06:20 267

原创 TouchGFX之性能测量

TouchGFX Core开放了几个信号,可用于测量性能。当这些信号在内部触发时,用户可在应用程序中同步触发单个GPIO,从而实现“渲染时间”和其他有用信号的可视化。使用示波器或逻辑分析仪测量配置信号。下图为显示了四个信号的逻辑分析仪图形。该应用程序在STM32F746G-DISCO上运行,带有动画图像UI示例。类上的函数,根据STM32CubeMX中的用户配置,来翻转引脚。文件中的GPIO类生成函数。将自动为端口、引脚生成匹配符号,例如。信号由LTDC每16ms生成一次。TouchGFX生成器为。

2024-03-20 13:25:40 326

原创 TouchGFX之DMA和BlitOp

Chrom-ART (DMA2D)图形加速器能够传输来自存储器的部分图像数据,并将其放入或先混合后再放入帧缓存。Chrom-ART可从内部或外部存储器读取数据,在绘制图形时可使用此功能,以显著提高显示性能,同时明显降低应用程序的MCU占用率。以上各操作方式,在DMA驱动中进行实现。DMA驱动代码提供一个BlitOp为元素的FIFO,在引擎和驱动之间进行交互。DMA通过HAL实例化注册到touchgfx中,并通过HAL类中封装部分程序函数供用户调用。

2024-03-17 14:24:30 122

原创 TouchGFX之MVP

每个用户端Presenter实例对象(基于ModelListener类)可以绑定Model实例对象指针,即用户端Presenter实例对象可以通过该指针查询到Model实例对象。Model实例对象可以绑定一个ModelListener(用户端Presenter的基类之一)实例对象指针,即Model实例对象可以通过该指针查询到Presenter实例对象。每个View实例对象可以绑定一个Presenter实例对象指针,即View实例对象可以通过该指针查询到Presenter实例对象。从MVP类的代码可以看出。

2024-03-16 18:08:04 797

原创 TouchGFX之heap

touchgfx并不会为所有屏幕分配内存,而仅仅会分配一个最大屏幕所需的内存。这个内存由所有屏幕共用,当切换到哪个屏幕时就由哪个屏幕使用。从本节内容可以看出,touchgfx中只有一个Model的实例对象,但每一个屏幕都对应一个View和Presenter的实例对象。meta.hpp,这是一个模板元定义。乍一看没看懂,最后AI帮我解释了一下这个代码,我才想明白。下面看一下怎么使用这些模板,通过meta搜索整个工程,出现在如下代码中。touchgfx实现该需求的代码很优秀,下面看一下这个代码。

2024-03-15 17:36:54 87

原创 TouchGFX之platform

调用setMCUInstrumentation将实例对象注册到HAL层。LCD类用于在LCD上绘制位图、文本和矩形等。这是一个LCD基类接口,包含纯虚函数。HAL实例化的时候将触摸类的实例对象作为参数传递其中,即可完成注册。HAL实例化的时候将LCD类的实例对象作为参数传递其中,即可完成注册。将该类接口注册到抽象层HAL中,用于测量CPU负荷(%)下面是每像素16位的LCD子类,具体实现了各种绘图方法。用户需要自己实现纯虚函数接口。用户需要自己实现纯虚函数接口。用户需要自己实现纯虚函数接口。

2024-03-15 17:29:35 128

原创 TouchGFX之OSWrappers

在发送进行时,随意地将帧渲染到帧缓存是不可取的。因此,图形引擎会在发送开始后等待一小段时间,然后再开始渲染。对于应用而言,按固定速率渲染帧的好处是更容易创建持续特定时间的动画。例如,如果显示屏频率为60 Hz,则应将两秒钟的动画设定为在120帧内完成。接口来同步帧缓存访问,同时希望访问帧缓存的外设(如DMA2D) 也必须执行相同操作。图形引擎的等待时间通常被应用中其他优先级较低的进程利用。在这种情况下,时间不会被浪费,优先级较低的进程反正都应在某些时间点运行。多个执行体可能涉及对帧缓存区的访问。

2024-03-15 14:51:39 311

原创 TouchGFX之文本和字体

TouchGFX可将动态值作为文本的一部分来使用。这可以通过在文本中使用通配符来实现。按给定格式<*>指定通配符,其中的*表示不会包含在结果文本中的可选辅助文本。一个文本中可以有至多2个通配符。在TouchGFX 设计器中,只需单击“+”按钮为所选文本区域的属性添加通配符,即可将通配符添加到文本区域。点击相应的“-”按钮以删除通配符。为了设置特定的通配符,您可以点击相应的“通配符”按钮(本例中为通配符1),就可以编辑刚才添加的通配符。在这里,您可以选择如何更新通配符。

2023-10-04 22:44:50 605

原创 TouchGFX之Mixins

Mixin类扩展控件的功能,例如使之能够将移动或透明度值变化制作成动画。在Move Animator和Fade Animator Mixin的基础上,TouchGFX Designer交互能够生成将移动或透明度值变化制作成动画的代码。这些Mixin可通过TouchGFX Designer或在用户代码中手动添加到控件。Move Animator Mixin:使控件能够将从当前位置到指定结束位置的移动制作成动画。

2023-10-04 15:05:08 933

原创 TouchGFX之后端通信

所有TouchGFX应用都有Model类,Model类除了存储UI状态信息,还可用作面向周围系统的接口。这里周围系统我们指的是在你整个系统中用到的硬件外设以及需要进行通讯的其他任务。通常来讲,在各自的View类中直接访问其他软件模块或者硬件外设并不是个好的设计。在大多数应用中,UI需以某种方式连接到系统的其余部分,并发送和接收数据。以下示例为:通过button控件,触发数据发送给系统其他任务;首先程序需要touchgfx以外的一个任务,和两个用来收发数据的队列。编写向周围系统发送数据的程序。

2023-10-03 22:51:51 2401

原创 TouchGFX之二进制翻译

正常情况下,文本翻译文件会被编译到应用中。二进制翻译使应用程序不含文本翻译,该文件可编程到闪存中或存储在SD卡等存储设备上。在处理大量翻译文件时,为应用开发者带来了更大灵活性。

2023-09-30 10:28:34 113

原创 TouchGFX之字体缓存

字体缓存使应用能够从外部存储器只能加载显示字符串所需的字母。这意味着整个字体无需保存到在可寻址闪存或RAM上,而是只需保存在更大的文件系统上。使用二进制字体需要将整个字体加载到存储器。在某些情况下,如果字体很大,如大字号中文字体,则这样做可能不可取。

2023-09-29 22:52:25 861

原创 TouchGFX之二进制字体

为了缓解这个问题,TouchGFX允许应用使用二进制字体。这些字体不链接到应用,而是独立于应用保存为单独的文件。应用在运行时间将这些文件加载并提供给TouchGFX。举例来说,应用可以从外部存储器(如SD卡)加载字体,也可以从互联网下载字体。将字体链接到应用的基本原则的主要优势是应用始终会自动包含应用中使用的更新文本和字体排印。因此,使用起来十分容易和安全。其缺点在于字体会使应用的体积变大。配置字体转换器以生成二进制字体。创建TextArea。

2023-09-29 19:19:37 323

原创 TouchGFX之动态位图

标准位图会被编译到应用中,因此必须在编译时提供。在运行时间在RAM中创建位图,被称为动态位图。动态位图的使用与编译到应用中的静态位图相同。如需从文件加载图像,可以用loader代码替代对memset的调用。从文件系统读取图像信息。为了使用动态位图,我们需要一个控件来显示它。必须先配置位图缓存,然后才能创建动态位图。

2023-09-29 16:54:51 168

原创 TouchGFX之画布控件

举例:在10x10方块内部粗略实现一个菱形块public:#endifpublic:protected:private:add(box);运行模拟器,效果如下(意味着画布缓冲区大小可以调整到大于168字节即可)尽管TouchGFX提供一组预定义的画笔类,涵盖了大多数用例场景,但也可实现定制画笔public:return;

2023-09-22 13:41:28 405

原创 TouchGFX之Widget

在创建应用时,您可能需要TouchGFX中没有包含的控件。在创建应用时,您可能需要TouchGFX中没有包含的控件。但有时此法并不够用,当您需要全面控制帧缓冲时,您需要使用自定义控件法。TouchGFX Designer目前不支持自定义控件的创建。因此,您将需要手动写入自定义控件的代码,然后在视图的用户代码部分插入控件。示例为自定义一个二维码控件public:/* 获取该坐标值 *//* 获取宽度 *//* 获取高度 */#endifi < 100;

2023-09-20 19:24:25 210 2

原创 TouchGFX之缓存位图

为了打破这一限制,位图缓存提供了一种在上电期间缓存RAM中的一些或全部位图数据的机制。位图缓存是专用RAM缓冲区,应用可将位图保存(或缓存)在其中。从RAM读取数据通常比从闪存读取要快(特别是在使用纹理映射器时,原因是它使用非线性存储器存取),因此,缓存到RAM可提升UI性能。如需缓存所有位图,则缓存大小必须足够大,才能包含所有位图数据。如果可分配用于位图缓存的RAM空间小于位图的总大小,则启动过程中不能缓存所有位图。在屏幕之间切换时,您可以删除一些或全部已缓存位图,并缓存下一个屏幕所需的位图。

2023-09-13 09:59:40 804

原创 TouchGFX之自定义触发条件和操作

使用交互系统发送自定义触发条件: 通过自定义容器的“交互”选项卡,创建新的交互并选择“自定义触发条件”自定义容器操作添加行为: 自定义容器的“交互”选项卡,创建新的交互并选择“自定义操作”作为触发条件。自定义触发条件用作界面上交互系统的触发条件:通过界面选择自定义触发条件作为交互的“触发条件”通过TouchGFX Designer,您可以自己定义具有触发条件和操作的交互组件。自定义容器创建自定义触发条件:通过自定义容器的属性选项卡添加自定义触发条件。自定义容器创建操作:通过自定义容器的属性选项卡执行操作。

2023-09-10 00:51:22 194

原创 TouchGFX之调试

其实不必在应用程序中多次调用DebugPrinter::setString。只需要更改缓存区的内容,但是请调用invalidateDebugRegion,这将使DebugPrinter绘制新内容。在使用DebugPrinter之前,需要分配一个实例并将其传递给Application类,且DebugPrinter实例必须兼容所使用的LCD类。此时,我们已经将DebugPrinter配置为左上角240 x 40像素写入。DebugPrinter类是一种在显示屏上打印调试消息的简单方法,无需向屏幕添加控件。

2023-08-27 22:27:55 202

原创 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 262

原创 TouchGFX之触摸控制器

必须能够从触摸控制器读取触摸坐标,以便用户与应用程序进行交互。此处开发的代码将被用于以后开发TouchGFX抽象层。由于开发板触摸芯片没有连接在I2C接口上,因此本节采用普通IO口模拟I2C接口。7.烧录程序,运行检查触摸坐标。5.GT9147驱动。6.循环采集触摸坐标。

2023-08-23 15:52:51 355 1

原创 TouchGFX之DMA2D

Chrom-ART (DMA2D)图形加速器能够传输来自存储器的部分图像数据,并将其放入或先混合后再放入帧缓存。Chrom-ART可从内部或外部存储器读取数据。同样,它可以写入内部或外部存储器。在绘制图形时可使用此功能,以显著提高显示性能,同时明显降低应用程序的MCU占用率。在目标存储器中将特定颜色填充到屏幕(寄存器到存储器模式)4.烧录程序,显示屏显示相应颜色。

2023-08-23 15:02:50 135

原创 TouchGFX之存储器映射闪存

对于大多数项目,建议使用外部闪存,因为这允许应用程序使用多个大型图像。即便最普通的应用程序,内部闪存也可能会很快被占用完。4.添加下载算法(嵌入式基础知识,此处不做分析)2.编写W25Q256配置代码(copy。基础知识,此处不做分析)5.创建变量,仿真运行。3.修改分散加载文件。

2023-08-23 11:07:40 179

原创 TouchGFX之外部SDRAM

1.配置外部SDRAM(嵌入式基础知识,此处不做分析)2.编写SDRAM配置代码(copy正点原子例程)3.将帧缓存放在外部RAM(修改上一篇文章的工程)

2023-08-21 22:52:31 197

fastboot驱动和工具

windows平台下的fastboot驱动和工具,用于在uboot下烧录各种镜像到存储器中。

2018-12-25

dnw_for_linux

dnw是linux环境下使用usb启动三星arm处理器时的配套工具。

2018-07-17

modbus源码

modbus文档、freemodbus移植模板、linux插件freemodbus、freemodbus源码注释

2018-06-28

CANOpen资料

CANOpen源代码注释、协议资料和ppt、主站移植模板、从站移植模板。

2018-03-25

C语言ntp协议

c语言udp实现

2017-04-19

经纬度计算日出日落时间

C语言,根据经纬度计算日出、日落、天黑、天亮时间

2017-04-17

C语言ntp协议获取网络时间

2017-04-12

经纬度计算日出日落时间(C语言)

2017-04-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除