This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM33C321A:LVGL 入门

Guru**** 2968670 points

Other Parts Discussed in Thread: MSPM33C321A, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1657484/mspm33c321a-getting-started-with-lvgl

器件型号: MSPM33C321A
主题: SysConfig 中讨论的其他器件

MSPM33 SDK(当前为 1.03.00.01 - 2026年3月18日)包含在 MSPM33C321 上使用 LVGL 的演示。

www.ti.com/.../sdaa158.pdf

TI 提供了一个 LVGL CCS 演示工程、您可在 SDK 中的以下位置找到:

C:\ti\mspm33_sdk_1_03_00_01\examples\nortos\LP_MSPM33C321A\demos

(我想您也可以在 Resource Explorer 中访问它。)

 

现在您已成功运行 LVGL 演示*、并尝试拨打 Elena 的电话号码、您该怎么办?

下面提供了快速指南、可帮助您在 LVGL 上使用 MSPM33C321 开始使用自己的 GUI。

 

所有这些说明都对 MSPM33C321 LVGL 示例中的 main.c 进行了更改。

 

#0 删除演示

注释掉演示文件:

在全球范围内

//#包含“demos/widgets/lv_demo_widget.h“

 

在 main() 中:

//lv_demo_deters();

 

#1:我们的第一个标签

在 main() 之上添加全局对象:

 

             LV_OBJ_t *MyLabel;

 

这将创建指向 LVGL 对象的指针。

 

现在,在 main() 中,在 while () 循环之前添加以下内容:

 

             MyLabel = LV_LABEL_CREATE (LV_SCR_act ());

   LV_LABEL_SET_TEXT (MyLabel、“Hello、World!“);

   LV_OBJ_ALIGN (MyLabel、LV_ALIGN_CENTER、0);

 

这将创建一个新标签、将其分配给 MyLabel 并将其初始化为“Hello、World!“

它也会将其与显示屏的中心对齐。

 

编译并在您的硬件上运行。

HelloWorld.jpg

(我的屏幕截图来自我的 MSVS 模拟器 — 见下文)

 

2 号计数器

让我们稍微修改一下、在标签中创建一个实时计数器。

 

将此变量和函数添加到 main() 上方的全局区域:

 

INT 计数器= 0;

 

void UpdateCounterTimer(LV_TIMER_t*计时器)

{

   LV_LABEL_SET_TEXT_fmt(MyLabel、“Hello、World:%d,计数器);

   counter++;  

}

 

并在其他 MyLabel 代码下面添加此函数:

LV_TIMER_CREATE (UpdateCounterTimer、1000、NULL);

 

构建并运行。

此代码添加了一个计时器、它将每 1000 毫秒调用一次 UpdateCounterTimer ()。

[请注意、至少在我的 LaunchPad 上、更新速度快得多。 调用中断的速度可能快于每 1ms ]

当调用 UpdateCounterTimer() 时、它会设置一个带有计数器值的新文本标签。

Counter.jpg

#3 按钮

最后修改后、我们再添加一个按钮。

在全局区域中、我们需要一个按钮和布尔值来充当标志:

LV_OBJ_t*按钮;

Volatile bool 标志= false;

 

以及处理按钮事件的功能:

 

void Button_Event_Handler (LV_EVENT_t* e)

{

   LV_EVENT_CODE_t 代码= LV_EVENT_GET_CODE (e);

 

   if (code == LV_EVENT_CLOSED){

 

       if(标志== false)

       {

           flag = true;

       }

       暴露

       {

           FLAG = FALSE;

       }

       

    }

}

 

如果我们有多个按钮、我们可能需要添加代码来区分按钮

 

让我们在 UpdateCounterTimer () 函数中做一个小的改变,只在标记为 false 时更新计数器

void UpdateCounterTimer(LV_TIMER_t*计时器)

{

   LV_LABEL_SET_TEXT_fmt(MyLabel、“Hello、World:%d,计数器);

 

   if(标志== false)

   {

       counter++;

   }

}

 

最后,我们将按钮启动代码添加到 main() 中:

 

按钮= LV_btn_create (LV_SCR_act ());

LV_OBJ_ADD_EVENT_CB (Button、Button_Event_Handler、LV_EVENT_ALL、NULL);

LV_OBJ_ALIGN (Button、LV_ALIGN_CENTER、–100、–100);

 

LV_OBJ_t*标签;

标签= LV_label_create(按钮);

LV_LABEL_SET_TEXT(标签,“Start//Stop“);

LV_OBJ_CENTER(标签);

 

这将创建一个按钮作为主屏幕的子屏幕。 (“LV_SCR_act ()“)它在原始标签的上方和左侧对齐。

然后、我们创建一个作为按钮子项的标签、并添加一些文本。

 

编译并运行。 您应该会看到如下所示的内容:

HelloButton.jpg

当您单击按钮时、您可以启动和停止计数器。

 

这应该足以让您开始工作。

但是、如果要添加更多小工具并查看更多示例:

https://lvgl.io/docs/open/8.3/get-started/

(我指向 8.3 文档、因为这是 MSPM33 SDK 当前提供的版本。)

 

如果您要创建任何类型的复杂 GUI、我强烈建议您使用在主机 PC 上运行的仿真器:

https://lvgl.io/docs/open/8.3/get-started/platforms/pc-simulator.html

 

还有一个大型的活跃用户论坛、可帮助您解决任何其他问题。

 

(注意:即将推出的新 SDK 即将推出,可能会以未知方式更改这些指令。)

 

 

*我必须断开 PWM/LED 引脚才能使其正常工作。

 

--

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keith:

    您只需查看 TI 提供的任何帮助。 这似乎更像是一个常见问题解答?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,这更多的是一个常见问题, lvgl 文档只是让它在运行演示后挂起,而演示是如此复杂,不容易拆分,看看在幕后发生了什么。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 感谢 Keith 帮助社区!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    实际上,你可以告诉我,我需要做什么,以得到正确的计时器回调时间!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keith:

    请尝试以下指南:https://lvgl.io/docs/open/8.4/porting/tick.html#api

    您可以将后台计时器配置为在某个设定的周期(如 1ms)触发、然后调用该函数  lv_tick_inc(1); in the IRQ"

    Let me know if this answers your question or if you need more details on the MSPM33C321A side.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此示例使用 TimerG 作为节拍增量、加载值为 999。 由于该示例不包括 SysConfig 文件、因此很难解析确切的时钟频率以查看该加载值是否正确。 我只是将其增加一点、看看我是否可以接近每周期 1ms。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keith:

    我查看 TIMERG 配置、我认为它配置为 80us。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果有人感兴趣、1.04.00.00 SDK(7 月 6 日发布)中的 lvgl 示例进行了更广泛的演示。 我还没有尝试过、看看是否需要更改我的示例、但它似乎可以解决时序问题。 8^)