按照之前的计划,S32K144采集相关数据后,打包到CAN报文,然后发送到总线上。
接收方目前暂定使用恩智浦公司的MCXN947搭配一块官方屏幕。屏幕上的GUI设计也采用恩智浦推出的Gui Guider来快速设计并生成基于FreeRTOS的Keil工程。
本次的过程贴主旨是记录接收方的相关设计。
GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。
单击按钮,您可以在模拟环境中运行应用或将其导出到目标项目。可以很轻松地将GUI Guider生成的代码添加到MCUXpresso IDE或IAR Embedded Workbench项目中,从而加速开发过程,并允许无缝地将嵌入式用户界面添加到应用中。
GUI Guider可免费与恩智浦的通用和跨界MCU一起使用,并包括用于多个受支持平台的内置项目模板。
详细的下载安装包可以参考:https://www.nxp.com.cn/design/design-center/software/development-software/gui-guider:GUI-GUIDER
gui设计好后,还可以点击Simulator来查看效果:
之后点击生成代码:
打开生成的keil工程,添加fsl_flexcan.c驱动
配置CAN收发引脚:
/* * CAN TX : P1_10 */ const port_pin_config_t port1_10_pinC3_config = {/* Internal pull-up/down resistor is disabled */ kPORT_PullDisable, /* Low internal pull resistor value is selected. */ kPORT_LowPullResistor, /* Fast slew rate is configured */ kPORT_FastSlewRate, /* Passive input filter is disabled */ kPORT_PassiveFilterDisable, /* Open drain output is disabled */ kPORT_OpenDrainEnable, /* Low drive strength is configured */ kPORT_LowDriveStrength, /* Pin is configured as CAN0_TXD */ kPORT_MuxAlt11, /* Digital input enabled */ kPORT_InputBufferEnable, /* Digital input is not inverted */ kPORT_InputNormal, /* Pin Control Register fields [15:0] are not locked */ kPORT_UnlockRegister}; /* PORT1_10 (pin C3) is configured as CAN0_TXD */ PORT_SetPinConfig(PORT1, 10U, &port1_10_pinC3_config); /* * CAN RX : P1_11 */ const port_pin_config_t port1_11_pinD3_config = {/* Internal pull-up/down resistor is disabled */ kPORT_PullDisable, /* Low internal pull resistor value is selected. */ kPORT_LowPullResistor, /* Fast slew rate is configured */ kPORT_FastSlewRate, /* Passive input filter is disabled */ kPORT_PassiveFilterDisable, /* Open drain output is disabled */ kPORT_OpenDrainEnable, /* Low drive strength is configured */ kPORT_LowDriveStrength, /* Pin is configured as CAN0_RXD */ kPORT_MuxAlt11, /* Digital input enabled */ kPORT_InputBufferEnable, /* Digital input is not inverted */ kPORT_InputNormal, /* Pin Control Register fields [15:0] are not locked */ kPORT_UnlockRegister}; /* PORT1_11 (pin D3) is configured as CAN0_RXD */ PORT_SetPinConfig(PORT1, 11U, &port1_11_pinD3_config);
设置Rx过滤器,接收id为0x555的报文
/* Setup Rx Message Buffer. */ mbConfig.format = kFLEXCAN_FrameFormatStandard; mbConfig.type = kFLEXCAN_FrameTypeData; mbConfig.id = FLEXCAN_ID_STD(0x555); #if (defined(USE_CANFD) && USE_CANFD) FLEXCAN_SetFDRxMbConfig(EXAMPLE_CAN, RX_MESSAGE_BUFFER_NUM, &mbConfig, true); #else FLEXCAN_SetRxMbConfig(EXAMPLE_CAN, RX_MESSAGE_BUFFER_NUM, &mbConfig, true); #endif
接收成功后,把两组数据分别存储到全局变量中
if(rxComplete){ rxComplete = false; PRINTF("\r\n CAN Rx Done\r\n"); PRINTF("\r\nReceived message from MB%d\r\n", RX_MESSAGE_BUFFER_NUM); //PRINTF("EXAMPLE_CAN_CLK_FREQ = %u MHz, CAN BUS bitRate = %uk bps\r\n", EXAMPLE_CAN_CLK_FREQ/1000000, (flexcanConfig.bitRate)/1000); PRINTF("rx frame CanID = 0x%x\r\n", (rxFrame.id)>>18); PRINTF("rx word0 = 0x%x, 0d%d\r\n", rxFrame.dataWord0, rxFrame.dataWord0); PRINTF("rx word1 = 0x%x\r\n", rxFrame.dataWord1); tempVal1 = rxFrame.dataWord0; tempVal2 = rxFrame.dataWord1; PRINTF("\r\n POT: %d mV",tempVal1); PRINTF("\r\n Vref: %d mV",tempVal2); (void)FLEXCAN_TransferReceiveNonBlocking(EXAMPLE_CAN, &flexcanHandle, &rxXfer); }
验证:在USB-CAN调试工具中增加id为0x555的报文,可以看到MCXN947 (COM57)接收到了报文
下载验证:
附完整的主屏幕代码:
/* * Copyright 2025 NXP * NXP Confidential and Proprietary. This software is owned or controlled by NXP and may only be used strictly in * accordance with the applicable license terms. By expressly accepting such terms or by downloading, installing, * activating and/or otherwise using the software, you are agreeing that you have read, and that you agree to * comply with and are bound by, such license terms. If you do not agree to be bound by the applicable license * terms, then you may not retain, install, activate or otherwise use the software. */ #include "lvgl.h" #include <stdio.h> #include "gui_guider.h" #include "events_init.h" #include "widgets_init.h" #include "custom.h" static lv_obj_t * mylabel_temp; static lv_obj_t * temp_meter; static lv_obj_t * temp_needle; extern volatile uint32_t tempVal1, tempVal2; static void add_data(lv_timer_t * timer) { LV_UNUSED(timer); // lv_label_set_text_fmt(mylabel_temp, "%d", eco2Val); #if 1 lv_label_set_text_fmt(mylabel_temp, "%d", tempVal2); lv_meter_set_indicator_value(temp_meter, temp_needle, tempVal1); #endif #if 0 static uint32_t cnt = 0; lv_chart_set_next_value(chart, chart_ser1, lv_rand(20, 90)); cnt++; tempVal = analogRead(A0); lv_chart_set_next_value(ui->screen_nxpChart, ui->screen_nxpChart_0, tempVal>>6); //String mySensorValueADC = "Voice Sensor: " + String(tempVal); #endif } void setup_scr_screen(lv_ui *ui) { //Write codes screen ui->screen = lv_obj_create(NULL); lv_obj_set_size(ui->screen, 480, 320); lv_obj_set_scrollbar_mode(ui->screen, LV_SCROLLBAR_MODE_OFF); //Write style for screen, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_bg_opa(ui->screen, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_datetext_1 ui->screen_datetext_1 = lv_label_create(ui->screen); lv_label_set_text(ui->screen_datetext_1, "2025/02/27"); lv_obj_set_style_text_align(ui->screen_datetext_1, LV_TEXT_ALIGN_CENTER, 0); lv_obj_add_flag(ui->screen_datetext_1, LV_OBJ_FLAG_CLICKABLE); lv_obj_add_event_cb(ui->screen_datetext_1, screen_datetext_1_event_handler, LV_EVENT_ALL, NULL); lv_obj_set_pos(ui->screen_datetext_1, 170, 4); lv_obj_set_size(ui->screen_datetext_1, 141, 30); //Write style for screen_datetext_1, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_radius(ui->screen_datetext_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_color(ui->screen_datetext_1, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui->screen_datetext_1, &lv_font_Alatsi_Regular_22, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_opa(ui->screen_datetext_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_letter_space(ui->screen_datetext_1, 2, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui->screen_datetext_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_color(ui->screen_datetext_1, lv_color_hex(0xe83d3d), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_grad_dir(ui->screen_datetext_1, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_top(ui->screen_datetext_1, 7, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_right(ui->screen_datetext_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_left(ui->screen_datetext_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_datetext_1, 1, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_color(ui->screen_datetext_1, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_opa(ui->screen_datetext_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_spread(ui->screen_datetext_1, 2, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_ofs_x(ui->screen_datetext_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_ofs_y(ui->screen_datetext_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_label_1 ui->screen_label_1 = lv_label_create(ui->screen); lv_label_set_text(ui->screen_label_1, "POT ADC VAL\nunit: mV"); lv_label_set_long_mode(ui->screen_label_1, LV_LABEL_LONG_WRAP); lv_obj_set_pos(ui->screen_label_1, 62, 278); lv_obj_set_size(ui->screen_label_1, 201, 31); //Write style for screen_label_1, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_border_width(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_color(ui->screen_label_1, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui->screen_label_1, &lv_font_montserratMedium_16, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_opa(ui->screen_label_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_letter_space(ui->screen_label_1, 2, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_line_space(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_align(ui->screen_label_1, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_top(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_right(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_left(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_img_1 ui->screen_img_1 = lv_img_create(ui->screen); lv_obj_add_flag(ui->screen_img_1, LV_OBJ_FLAG_CLICKABLE); lv_img_set_src(ui->screen_img_1, &_eepw_alpha_129x51); lv_img_set_pivot(ui->screen_img_1, 50,50); lv_img_set_angle(ui->screen_img_1, 0); lv_obj_set_pos(ui->screen_img_1, 2, 1); lv_obj_set_size(ui->screen_img_1, 129, 51); //Write style for screen_img_1, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_img_opa(ui->screen_img_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_img_2 ui->screen_img_2 = lv_img_create(ui->screen); lv_obj_add_flag(ui->screen_img_2, LV_OBJ_FLAG_CLICKABLE); lv_img_set_src(ui->screen_img_2, &_digikey_alpha_131x49); lv_img_set_pivot(ui->screen_img_2, 50,50); lv_img_set_angle(ui->screen_img_2, 0); lv_obj_set_pos(ui->screen_img_2, 347, 1); lv_obj_set_size(ui->screen_img_2, 131, 49); //Write style for screen_img_2, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_img_opa(ui->screen_img_2, 255, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_my_meter ui->screen_my_meter = lv_meter_create(ui->screen); // add scale screen_my_meter_scale_0 lv_meter_scale_t *screen_my_meter_scale_0 = lv_meter_add_scale(ui->screen_my_meter); lv_meter_set_scale_ticks(ui->screen_my_meter, screen_my_meter_scale_0, 41, 2, 10, lv_color_hex(0x9a89d7)); lv_meter_set_scale_major_ticks(ui->screen_my_meter, screen_my_meter_scale_0, 8, 5, 15, lv_color_hex(0x198699), 10); lv_meter_set_scale_range(ui->screen_my_meter, screen_my_meter_scale_0, 0, 5000, 300, 90); // add arc for screen_my_meter_scale_0 ui->screen_my_meter_scale_0_arc_0 = lv_meter_add_arc(ui->screen_my_meter, screen_my_meter_scale_0, 10, lv_color_hex(0x70c3c3), 0); lv_meter_set_indicator_start_value(ui->screen_my_meter, ui->screen_my_meter_scale_0_arc_0, 0); lv_meter_set_indicator_end_value(ui->screen_my_meter, ui->screen_my_meter_scale_0_arc_0, 20); // add needle line for screen_my_meter_scale_0. ui->screen_my_meter_scale_0_ndline_0 = lv_meter_add_needle_line(ui->screen_my_meter, screen_my_meter_scale_0, 5, lv_color_hex(0xdcba57), -10); lv_meter_set_indicator_value(ui->screen_my_meter, ui->screen_my_meter_scale_0_ndline_0, 1314); lv_obj_set_pos(ui->screen_my_meter, 63, 64); lv_obj_set_size(ui->screen_my_meter, 200, 200); //Write style for screen_my_meter, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_bg_opa(ui->screen_my_meter, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_color(ui->screen_my_meter, lv_color_hex(0xbaddf3), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_grad_dir(ui->screen_my_meter, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_my_meter, 100, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_border_width(ui->screen_my_meter, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_my_meter, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write style for screen_my_meter, Part: LV_PART_TICKS, State: LV_STATE_DEFAULT. lv_obj_set_style_text_color(ui->screen_my_meter, lv_color_hex(0xff0000), LV_PART_TICKS|LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui->screen_my_meter, &lv_font_montserratMedium_12, LV_PART_TICKS|LV_STATE_DEFAULT); lv_obj_set_style_text_opa(ui->screen_my_meter, 255, LV_PART_TICKS|LV_STATE_DEFAULT); //Write style for screen_my_meter, Part: LV_PART_INDICATOR, State: LV_STATE_DEFAULT. lv_obj_set_style_bg_opa(ui->screen_my_meter, 255, LV_PART_INDICATOR|LV_STATE_DEFAULT); lv_obj_set_style_bg_color(ui->screen_my_meter, lv_color_hex(0x000000), LV_PART_INDICATOR|LV_STATE_DEFAULT); lv_obj_set_style_bg_grad_dir(ui->screen_my_meter, LV_GRAD_DIR_NONE, LV_PART_INDICATOR|LV_STATE_DEFAULT); //Write codes screen_my_bar ui->screen_my_bar = lv_bar_create(ui->screen); lv_obj_set_style_anim_time(ui->screen_my_bar, 1000, 0); lv_bar_set_mode(ui->screen_my_bar, LV_BAR_MODE_NORMAL); lv_bar_set_range(ui->screen_my_bar, 0, 5000); lv_bar_set_value(ui->screen_my_bar, 2471, LV_ANIM_ON); lv_obj_set_pos(ui->screen_my_bar, 332, 203); lv_obj_set_size(ui->screen_my_bar, 90, 24); //Write style for screen_my_bar, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_bg_opa(ui->screen_my_bar, 60, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_color(ui->screen_my_bar, lv_color_hex(0x2195f6), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_grad_dir(ui->screen_my_bar, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_my_bar, 10, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_my_bar, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write style for screen_my_bar, Part: LV_PART_INDICATOR, State: LV_STATE_DEFAULT. lv_obj_set_style_bg_opa(ui->screen_my_bar, 255, LV_PART_INDICATOR|LV_STATE_DEFAULT); lv_obj_set_style_bg_color(ui->screen_my_bar, lv_color_hex(0x2195f6), LV_PART_INDICATOR|LV_STATE_DEFAULT); lv_obj_set_style_bg_grad_dir(ui->screen_my_bar, LV_GRAD_DIR_NONE, LV_PART_INDICATOR|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_my_bar, 10, LV_PART_INDICATOR|LV_STATE_DEFAULT); //Write codes screen_label_2 ui->screen_label_2 = lv_label_create(ui->screen); lv_label_set_text(ui->screen_label_2, "VREF mV"); lv_label_set_long_mode(ui->screen_label_2, LV_LABEL_LONG_WRAP); lv_obj_set_pos(ui->screen_label_2, 327, 277); lv_obj_set_size(ui->screen_label_2, 100, 32); //Write style for screen_label_2, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_border_width(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_color(ui->screen_label_2, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui->screen_label_2, &lv_font_montserratMedium_16, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_opa(ui->screen_label_2, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_letter_space(ui->screen_label_2, 2, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_line_space(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_align(ui->screen_label_2, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_top(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_right(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_left(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_label_2, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_label_3 ui->screen_label_3 = lv_label_create(ui->screen); lv_label_set_text(ui->screen_label_3, "0"); lv_label_set_long_mode(ui->screen_label_3, LV_LABEL_LONG_WRAP); lv_obj_set_pos(ui->screen_label_3, 307, 208); lv_obj_set_size(ui->screen_label_3, 23, 14); //Write style for screen_label_3, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_border_width(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_color(ui->screen_label_3, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui->screen_label_3, &lv_font_montserratMedium_16, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_opa(ui->screen_label_3, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_letter_space(ui->screen_label_3, 2, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_line_space(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_align(ui->screen_label_3, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_top(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_right(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_left(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_label_3, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //Write codes screen_label_4 ui->screen_label_4 = lv_label_create(ui->screen); lv_label_set_text(ui->screen_label_4, "5000"); lv_label_set_long_mode(ui->screen_label_4, LV_LABEL_LONG_WRAP); lv_obj_set_pos(ui->screen_label_4, 422, 208); lv_obj_set_size(ui->screen_label_4, 62, 14); //Write style for screen_label_4, Part: LV_PART_MAIN, State: LV_STATE_DEFAULT. lv_obj_set_style_border_width(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_radius(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_color(ui->screen_label_4, lv_color_hex(0x000000), LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_font(ui->screen_label_4, &lv_font_montserratMedium_16, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_opa(ui->screen_label_4, 255, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_letter_space(ui->screen_label_4, 2, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_line_space(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_text_align(ui->screen_label_4, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_top(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_right(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_bottom(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_pad_left(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); lv_obj_set_style_shadow_width(ui->screen_label_4, 0, LV_PART_MAIN|LV_STATE_DEFAULT); //The custom code of screen. mylabel_temp = ui->screen_label_4; temp_meter = ui->screen_my_meter; temp_needle = ui->screen_my_meter_scale_0_ndline_0; lv_timer_create(add_data,1000,NULL); //Update current screen layout. lv_obj_update_layout(ui->screen); }