- 博客(374)
- 资源 (8)
- 收藏
- 关注
原创 28069之EPWM
EPWM介绍一个有效的 PWM 外设能够占用最少的 CPU 资源和中断,但可以产生灵活配置的脉冲波形,并且可以方便被理解与使用。
2025-04-16 11:08:32
770
转载 28069之外部中断
下面通过官方的一个外部中断例程讲解外部中断,所参考的文档为TMS320x2806x Piccolo Technical Reference Manual (Rev. H)GPIO1和GPIO2在GPAQSEL1,当为0设置0是,使其采样率为系统时钟,但是设为2时,设置采样率为六倍时钟。根据文档可得,外部中断有96个独立的中断,分为了8个组,每个组分为12中断线。可以得出GPIO0为XINT1的中断来源,GPIO1为XINT2的时钟来源。先将GPIO0设置为普通IO,且设置为输入模式,其次使其时钟。
2025-04-14 19:19:52
38
转载 28069之定时器中断
28335有三个定时器定时器0,定时器1,定时器2。其中定时器1,定时器2, 是为操作系统 DSP/BIOS 保留的,当未移植操作系统时,可用来做普通的 定时器。这三个定时器的中断信号分别为 TINT0, TINT1, TINT2,分别对应于中 断向量 INT1,INT13,INT14。定时器信号来源如图3所示,系统时钟SYSCLKOUT与计数器产生的时钟TIMclk,由此可得定时器定时来源。
2025-04-12 14:31:26
40
转载 28069之GPIO
因为GPIO的输入常常与按键相连接,由于按键在按下或弹回的过程中会抖动,会造成电平检测也随之抖动,为了消除这种影响,采样信号会在3个或者6个采样周期后在变化。GPxQSEL 寄存器为对输入引脚的滤波设置,其共有四个模式:同步模式、三次采样有效模式(自己翻译的)、六次采样有效模式(自己翻译的)、非同步模式。控制寄存器主要确定被配置为输入的引脚的采样周期,采样周期是每次采样的间隔时间,其是系统周期的整数倍。GPxDIR(方向寄存器),默认配置为输入,0为输入,1为输出。GPxMUX1 (功能复用寄存器)
2025-04-11 11:47:36
41
原创 28069之时钟
1)关闭看门狗,通过文档可以看出WDCR的bit6默认值为0,表示看门狗默认使能。因此,如果不想用看门狗,需要上电后编程关闭。3)选择内部时钟、设置PLL(主频设置为90MHz)、初始化外设时钟。仿真打断点,证实5秒打断一次。查看InitSysCtrl函数,并进行分析。里将文件拷贝到工程中。
2025-04-11 10:22:14
171
转载 DSP启动过程描述
根据cmd文件把程序烧到指定位置,然后执行。首先硬件配置GPIO84~87上拉为1,即处于Flash启动过程。当DSP复位后,会从复位向量0x3FFFC0处取得复位向量,并跳转到InitBoot处开始执行,InitBoot会读GPIO84~87的值发现全为1判断为Flash启动方式。然后会跳到0x33FFF6处执行。在CCS5.2工程的cmd文件中有如下代码:MEMORYPAGE 0 :...SECTIONS{......}
2025-04-10 15:41:17
40
原创 28069之创建工程
将28069_RAM_lnk.cmd(将程序放进RAM中)不参与编译,然后编译仿真。2.从软件包里将文件拷贝到工程中。1.打开CCS,新建CCS工程。
2025-04-09 14:58:15
121
原创 STM32之不使用MicroLIB
microlib 是缺省 C 库的备选库,功能上不具备某些 ISO C 特性。microlib 进行了高度优化以使代码变得很小,功能比缺省 C 库少,用于必须在极少量内存环境下运行的深层嵌入式应用程序。Semihosting是用于ARM目标的一种机制,可将来自应用程序代码的输入/输出请求传送至运行调试器的主机。例如,使用此机制可以启用 C 库中的函数,如 printf() 和 scanf(),来使用主机的屏幕和键盘,而不是在目标系统上配备屏幕和键盘。
2024-04-18 10:16:15
1087
原创 TouchGFX之图表
法轻松将数据点添加到图表中。例如,如果精度等级设置为0.1,则添加到静态图表中的每个数据点将在内部乘以10,从而模拟一位数的精度。例如,如果精度等级设置为0.1,则添加到动态图表中的每个数据点将在内部乘以10,从而模拟一位数的精度。在内部,静态图表将所有数据点存储在一个32位整数中,因此,为了添加和显示数据点(通过一定数量的数字表示精度等级),可以定义一个精度等级。在内部,动态图表将所有数据点存储在一个32位整数中,因此,为了添加和显示数据点(通过一定数量的数字表示精度等级),可以定义一个精度等级。
2024-04-08 14:31:58
931
原创 TouchGFX之时钟
时间属性组用于通过更改不同的属性来调整时间在应用中的显示方式。在“时钟指针”属性组中,用户可以定义要使用的指针及各自的Z轴顺序。旋转位置决定已定义的指针图像应该围绕着进行自身旋转的点。TouchGFX中的数字时钟是一个控件,允许应用以数字文本的形式显示时间,而与此相对的。“时间”属性组允许用户设置时钟控件的初始时间,以及是否使用Am/Pm标准。模拟时钟是一个控件,能够显示一个传统的模拟时钟,而不是通过文本显示时间的。模拟时钟的大小是从关联图像的大小获取的,其大小无法更改(除非更改图像)。
2024-04-08 14:23:03
623
原创 TouchGFX之进度指示器
默认情况下,弧线的位置为(0,0),并且与仪表本身的大小相同。因此,可以将图像修剪为所需的尺寸并将弧线置于特定的位置,而不是采用一幅大型图像(尺寸与仪表相同,带许多透明的线条)。因此,可以将图像修剪为所需的尺寸并将弧线置于特定的位置,而不是采用一幅大型图像(尺寸与仪表相同,带许多透明的线条)。可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。上方作为进度指示器。
2024-04-08 14:10:00
793
原创 TouchGFX之Transition
BlockTransition:前一个屏幕不动,将下一个切成多个小块并在每帧绘制两个小块覆盖。CoverTransition:前一个屏幕不动,下一个屏幕缓慢移入并覆盖。SlideTransition:前一个屏幕缓慢移出,下一个屏幕缓慢移入。WipeTransition:前一个屏幕不动,下一个屏幕缓慢展开并覆盖。Transition用来实现两个screen的切换效果。NoTransition:无切换效果。
2024-04-08 11:53:52
396
原创 TouchGFX之容器
容器是TouchGFX中的一种组件,可以包含子节点(比如控件和其他容器)。在TouchGFX Designer中,可以在Widgets(控件)选项卡中的containers(容器)类别下找到容器,向容器中添加控件的方法将控件拖放到树视图中的容器中。子容器在Z轴上的顺序由向容器中添加子容器时的顺序决定 - 最后添加的子容器将显示在屏幕的最前面。由于TouchGFX中控件的位置是相对于其父容器而确定的,因此改变父容器的位置也会相应地移动子容器。
2024-04-08 11:51:28
596
原创 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
341
原创 TouchGFX之Button
public:private:#endifpublic:protected:private:运行模拟器左边松开 -> 右边按下。
2024-03-28 21:06:09
496
原创 TouchGFX之事件
Touchgfx的事件类型有:点击事件、拖拽事件、手势事件和定时事件、外部按键事件、屏幕转换挂起事件当引擎检测到这些事件的时候,调用事件处理函数传递给应用。
2024-03-28 16:27:55
455
原创 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
1129
原创 TouchGFX之HAL
TouchGFX引擎通过具体的子类和类实现文件(.cpp)来访问TouchGFX AL,实现了TouchGFX 引擎中定义的类成员函数。职责要么在AL (HAL)的硬件部分实现,要么在与TouchGFX Engine同步的AL部分实现,典型的做法是通过RTOS (OSAL)来实现。在这种情况下,如果所显示图形的复杂度不会产生任何视觉失真,则只需一个帧缓冲。一个帧缓冲用于写入下一幅需要显示的图像,另一个帧缓冲用于将图像传输到显示屏。在TouchGFX中,不足一个的帧缓冲表示部分帧缓冲。
2024-03-27 13:41:01
879
原创 TouchGFX之LCD
LCD类用于在LCD上绘制位图、文本和矩形等。这是一个LCD基类接口,包含纯虚函数。需要根据具体LCD进行实现。下面是每像素16位的LCD子类,具体实现了各种绘图方法。
2024-03-26 23:03:33
350
原创 TouchGFX之位图
从RAM读取数据通常比从闪存读取要快(特别是在使用纹理映射器时,原因是它使用非线性存储器存取),因此,缓存到RAM可提升UI性能。如果缓存到RAM,由于将从RAM读取位图(在某些情况下,写入闪存要求是非存储器映射闪存),因此可以在显示UI的同时将闪存用于其他目的(如日志文件)。为了打破这一限制,位图缓存提供了一种在上电期间缓存RAM中的一些或全部位图数据的机制。如需缓存所有位图,则缓存大小必须足够大,才能包含所有位图数据。如果可分配用于位图缓存的RAM空间小于位图的总大小,则启动过程中不能缓存所有位图。
2024-03-25 20:45:09
809
原创 TouchGFX之文本
正常情况下,文本翻译文件会被编译到应用中。二进制翻译使应用程序不含文本翻译。二进制翻译在单独的二进制文件中生成,该文件可编程到闪存中或存储在SD卡等存储设备上。在处理大量翻译文件时,为应用开发者带来了更大灵活性。文本翻译,意思是屏幕上的同一个文本框,可以显示好几种语言的文本。文本格式数据库文件,typedTextDatabase.cpp。显示一段文本,需要几个关键数据:文本格式、文本内容、字体。每个文本资源通过typedTextId,从库中索引出数据。其他静态文本数据,在text.cpp中。
2024-03-25 18:40:12
622
原创 TouchGFX之字体
应用在运行时将这些文件加载并提供给TouchGFX,举例来说,应用可以从外部存储器(如SD卡)加载字体,也可以从互联网下载字体。7.FontContextualFormsTable:上下文形式的信息,像阿拉伯语,字符形状会根据它前后的字符而改变。从上面的例子中可以看出,此方法的缺点是需要将整个二进制字体加载到RAM(或存储器映射闪存),在字体较大时会面临困难。可以看出,使用二进制字体其实就是在二进制字体实例化之后,使用setFont函数将原先静态字体替换掉。使用二进制字体需要将整个字体加载到。
2024-03-20 21:06:20
543
原创 TouchGFX之性能测量
TouchGFX Core开放了几个信号,可用于测量性能。当这些信号在内部触发时,用户可在应用程序中同步触发单个GPIO,从而实现“渲染时间”和其他有用信号的可视化。使用示波器或逻辑分析仪测量配置信号。下图为显示了四个信号的逻辑分析仪图形。该应用程序在STM32F746G-DISCO上运行,带有动画图像UI示例。类上的函数,根据STM32CubeMX中的用户配置,来翻转引脚。文件中的GPIO类生成函数。将自动为端口、引脚生成匹配符号,例如。信号由LTDC每16ms生成一次。TouchGFX生成器为。
2024-03-20 13:25:40
437
原创 TouchGFX之DMA和BlitOp
Chrom-ART (DMA2D)图形加速器能够传输来自存储器的部分图像数据,并将其放入或先混合后再放入帧缓存。Chrom-ART可从内部或外部存储器读取数据,在绘制图形时可使用此功能,以显著提高显示性能,同时明显降低应用程序的MCU占用率。以上各操作方式,在DMA驱动中进行实现。DMA驱动代码提供一个BlitOp为元素的FIFO,在引擎和驱动之间进行交互。DMA通过HAL实例化注册到touchgfx中,并通过HAL类中封装部分程序函数供用户调用。
2024-03-17 14:24:30
253
原创 TouchGFX之MVP
每个用户端Presenter实例对象(基于ModelListener类)可以绑定Model实例对象指针,即用户端Presenter实例对象可以通过该指针查询到Model实例对象。Model实例对象可以绑定一个ModelListener(用户端Presenter的基类之一)实例对象指针,即Model实例对象可以通过该指针查询到Presenter实例对象。每个View实例对象可以绑定一个Presenter实例对象指针,即View实例对象可以通过该指针查询到Presenter实例对象。从MVP类的代码可以看出。
2024-03-16 18:08:04
1065
原创 TouchGFX之heap
touchgfx并不会为所有屏幕分配内存,而仅仅会分配一个最大屏幕所需的内存。这个内存由所有屏幕共用,当切换到哪个屏幕时就由哪个屏幕使用。从本节内容可以看出,touchgfx中只有一个Model的实例对象,但每一个屏幕都对应一个View和Presenter的实例对象。meta.hpp,这是一个模板元定义。乍一看没看懂,最后AI帮我解释了一下这个代码,我才想明白。下面看一下怎么使用这些模板,通过meta搜索整个工程,出现在如下代码中。touchgfx实现该需求的代码很优秀,下面看一下这个代码。
2024-03-15 17:36:54
230
原创 TouchGFX之platform
调用setMCUInstrumentation将实例对象注册到HAL层。LCD类用于在LCD上绘制位图、文本和矩形等。这是一个LCD基类接口,包含纯虚函数。HAL实例化的时候将触摸类的实例对象作为参数传递其中,即可完成注册。HAL实例化的时候将LCD类的实例对象作为参数传递其中,即可完成注册。将该类接口注册到抽象层HAL中,用于测量CPU负荷(%)下面是每像素16位的LCD子类,具体实现了各种绘图方法。用户需要自己实现纯虚函数接口。用户需要自己实现纯虚函数接口。用户需要自己实现纯虚函数接口。
2024-03-15 17:29:35
259
原创 TouchGFX之OSWrappers
在发送进行时,随意地将帧渲染到帧缓存是不可取的。因此,图形引擎会在发送开始后等待一小段时间,然后再开始渲染。对于应用而言,按固定速率渲染帧的好处是更容易创建持续特定时间的动画。例如,如果显示屏频率为60 Hz,则应将两秒钟的动画设定为在120帧内完成。接口来同步帧缓存访问,同时希望访问帧缓存的外设(如DMA2D) 也必须执行相同操作。图形引擎的等待时间通常被应用中其他优先级较低的进程利用。在这种情况下,时间不会被浪费,优先级较低的进程反正都应在某些时间点运行。多个执行体可能涉及对帧缓存区的访问。
2024-03-15 14:51:39
416
原创 TouchGFX之文本和字体
TouchGFX可将动态值作为文本的一部分来使用。这可以通过在文本中使用通配符来实现。按给定格式<*>指定通配符,其中的*表示不会包含在结果文本中的可选辅助文本。一个文本中可以有至多2个通配符。在TouchGFX 设计器中,只需单击“+”按钮为所选文本区域的属性添加通配符,即可将通配符添加到文本区域。点击相应的“-”按钮以删除通配符。为了设置特定的通配符,您可以点击相应的“通配符”按钮(本例中为通配符1),就可以编辑刚才添加的通配符。在这里,您可以选择如何更新通配符。
2023-10-04 22:44:50
1206
原创 TouchGFX之Mixins
Mixin类扩展控件的功能,例如使之能够将移动或透明度值变化制作成动画。在Move Animator和Fade Animator Mixin的基础上,TouchGFX Designer交互能够生成将移动或透明度值变化制作成动画的代码。这些Mixin可通过TouchGFX Designer或在用户代码中手动添加到控件。Move Animator Mixin:使控件能够将从当前位置到指定结束位置的移动制作成动画。
2023-10-04 15:05:08
1043
原创 TouchGFX之后端通信
所有TouchGFX应用都有Model类,Model类除了存储UI状态信息,还可用作面向周围系统的接口。这里周围系统我们指的是在你整个系统中用到的硬件外设以及需要进行通讯的其他任务。通常来讲,在各自的View类中直接访问其他软件模块或者硬件外设并不是个好的设计。在大多数应用中,UI需以某种方式连接到系统的其余部分,并发送和接收数据。以下示例为:通过button控件,触发数据发送给系统其他任务;首先程序需要touchgfx以外的一个任务,和两个用来收发数据的队列。编写向周围系统发送数据的程序。
2023-10-03 22:51:51
2523
原创 TouchGFX之二进制翻译
正常情况下,文本翻译文件会被编译到应用中。二进制翻译使应用程序不含文本翻译,该文件可编程到闪存中或存储在SD卡等存储设备上。在处理大量翻译文件时,为应用开发者带来了更大灵活性。
2023-09-30 10:28:34
179
原创 TouchGFX之字体缓存
字体缓存使应用能够从外部存储器只能加载显示字符串所需的字母。这意味着整个字体无需保存到在可寻址闪存或RAM上,而是只需保存在更大的文件系统上。使用二进制字体需要将整个字体加载到存储器。在某些情况下,如果字体很大,如大字号中文字体,则这样做可能不可取。
2023-09-29 22:52:25
991
原创 TouchGFX之二进制字体
为了缓解这个问题,TouchGFX允许应用使用二进制字体。这些字体不链接到应用,而是独立于应用保存为单独的文件。应用在运行时间将这些文件加载并提供给TouchGFX。举例来说,应用可以从外部存储器(如SD卡)加载字体,也可以从互联网下载字体。将字体链接到应用的基本原则的主要优势是应用始终会自动包含应用中使用的更新文本和字体排印。因此,使用起来十分容易和安全。其缺点在于字体会使应用的体积变大。配置字体转换器以生成二进制字体。创建TextArea。
2023-09-29 19:19:37
449
原创 TouchGFX之动态位图
标准位图会被编译到应用中,因此必须在编译时提供。在运行时间在RAM中创建位图,被称为动态位图。动态位图的使用与编译到应用中的静态位图相同。如需从文件加载图像,可以用loader代码替代对memset的调用。从文件系统读取图像信息。为了使用动态位图,我们需要一个控件来显示它。必须先配置位图缓存,然后才能创建动态位图。
2023-09-29 16:54:51
368
原创 TouchGFX之画布控件
举例:在10x10方块内部粗略实现一个菱形块public:#endifpublic:protected:private:add(box);运行模拟器,效果如下(意味着画布缓冲区大小可以调整到大于168字节即可)尽管TouchGFX提供一组预定义的画笔类,涵盖了大多数用例场景,但也可实现定制画笔public:return;
2023-09-22 13:41:28
619
原创 TouchGFX之Widget
在创建应用时,您可能需要TouchGFX中没有包含的控件。在创建应用时,您可能需要TouchGFX中没有包含的控件。但有时此法并不够用,当您需要全面控制帧缓冲时,您需要使用自定义控件法。TouchGFX Designer目前不支持自定义控件的创建。因此,您将需要手动写入自定义控件的代码,然后在视图的用户代码部分插入控件。示例为自定义一个二维码控件public:/* 获取该坐标值 *//* 获取宽度 *//* 获取高度 */#endifi < 100;
2023-09-20 19:24:25
445
2
原创 TouchGFX之缓存位图
为了打破这一限制,位图缓存提供了一种在上电期间缓存RAM中的一些或全部位图数据的机制。位图缓存是专用RAM缓冲区,应用可将位图保存(或缓存)在其中。从RAM读取数据通常比从闪存读取要快(特别是在使用纹理映射器时,原因是它使用非线性存储器存取),因此,缓存到RAM可提升UI性能。如需缓存所有位图,则缓存大小必须足够大,才能包含所有位图数据。如果可分配用于位图缓存的RAM空间小于位图的总大小,则启动过程中不能缓存所有位图。在屏幕之间切换时,您可以删除一些或全部已缓存位图,并缓存下一个屏幕所需的位图。
2023-09-13 09:59:40
1136
C语言ntp协议获取网络时间
2017-04-12
经纬度计算日出日落时间(C语言)
2017-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人