diff --git a/.config b/.config
index f885b7f..6c1eec8 100644
--- a/.config
+++ b/.config
@@ -221,7 +221,8 @@ CONFIG_RT_SFUD_SPI_MAX_HZ=50000000
CONFIG_RT_USING_WDT=y
# CONFIG_RT_USING_AUDIO is not set
# CONFIG_RT_USING_SENSOR is not set
-# CONFIG_RT_USING_TOUCH is not set
+CONFIG_RT_USING_TOUCH=y
+# CONFIG_RT_TOUCH_PIN_IRQ is not set
CONFIG_RT_USING_LCD=y
# CONFIG_RT_USING_HWCRYPTO is not set
# CONFIG_RT_USING_PULSE_ENCODER is not set
diff --git a/.cproject b/.cproject
index f3f5b4d..55f928c 100644
--- a/.cproject
+++ b/.cproject
@@ -1,837 +1,842 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index cdf8b63..0bc0db6 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/applications/lvgl/lv__user_gui.c b/applications/lvgl/lv__user_gui.c
index 31db8dc..428c2a2 100644
--- a/applications/lvgl/lv__user_gui.c
+++ b/applications/lvgl/lv__user_gui.c
@@ -19,44 +19,55 @@
#define LCD_BL_PIN GET_PIN(D,12)
#define LCD_RST_PIN GET_PIN(D,11)
-void lv_user_gui_init(void)
+static void btn_led_on_evt_handler(lv_event_t *e)
{
- // rt_pin_mode(LCD_BL_PIN, PIN_MODE_OUTPUT);
- // rt_pin_write( LCD_BL_PIN, PIN_HIGH);
- // rt_pin_mIN, ode(LCD_RST_PIN, PIN_MODE_OUTPUT);
- // rt_pin_write( LCD_RST_PPIN_LOW);
+ lv_event_code_t code = lv_event_get_code(e);
- // 检查 LTDC 是否全局使能
- if (LTDC->GCR & LTDC_GCR_LTDCEN)
- {
- LOG_D("LTDC is ENABLED");
- }
- else
+ if (code == LV_EVENT_CLICKED)
{
- LOG_E("LTDC is NOT enabled!");
+ rt_kprintf("LED ON\n");
+ //led_on();
}
+}
- // 检查图层 0 是否使能
- if (LTDC_Layer1->CR & LTDC_LxCR_LEN)
- {
- LOG_D("Layer 0 is ENABLED");
- }
- else
- {
- LOG_E("Layer 0 is NOT enabled!");
- }
- if (__HAL_RCC_LTDC_IS_CLK_ENABLED())
- {
- LOG_D("LTDC clock is enabled");
- }
- else
+static void btn_led_off_evt_handler(lv_event_t *e)
+{
+ lv_event_code_t code = lv_event_get_code(e);
+
+ if (code == LV_EVENT_CLICKED)
{
- LOG_E("LTDC clock is DISABLED! <-- This is likely the root cause");
+ rt_kprintf("LED OFF\n");
+ // led_off();
}
+}
+
+void lv_user_gui_init(void)
+{
+ lv_obj_t *scr = lv_scr_act();
+
+ // 创建“按钮” —— 实际是一个可点击的普通对象
+ lv_obj_t *btn_on = lv_obj_create(scr);
+ lv_obj_set_size(btn_on, 100, 50);
+ lv_obj_align(btn_on, LV_ALIGN_CENTER, -60, 0);
+ lv_obj_add_flag(btn_on, LV_OBJ_FLAG_CLICKABLE); // 启用点击
+ lv_obj_clear_flag(btn_on, LV_OBJ_FLAG_SCROLLABLE);
+
+ lv_obj_t *label_on = lv_label_create(btn_on);
+ lv_label_set_text(label_on, "LED ON");
+ lv_obj_center(label_on);
+
+ lv_obj_add_event_cb(btn_on, btn_led_on_evt_handler, LV_EVENT_CLICKED, NULL);
+
+ // 第二个按钮
+ lv_obj_t *btn_off = lv_obj_create(scr);
+ lv_obj_set_size(btn_off, 100, 50);
+ lv_obj_align(btn_off, LV_ALIGN_CENTER, 60, 0);
+ lv_obj_add_flag(btn_off, LV_OBJ_FLAG_CLICKABLE);
+ lv_obj_clear_flag(btn_off, LV_OBJ_FLAG_SCROLLABLE);
+ lv_obj_t *label_off = lv_label_create(btn_off);
+ lv_label_set_text(label_off, "LED OFF");
+ lv_obj_center(label_off);
- // lv_obj_t *label = lv_label_create(lv_scr_act());
- // lv_label_set_text(label, "Hello LVGL on RT-Thread!");
- // lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_add_event_cb(btn_off, btn_led_off_evt_handler, LV_EVENT_CLICKED, NULL);
}
-//INIT_APP_EXPORT(lv_user_gui_init);
diff --git a/applications/lvgl/lv_port_disp.c b/applications/lvgl/lv_port_disp.c
index e7af276..2e83d28 100644
--- a/applications/lvgl/lv_port_disp.c
+++ b/applications/lvgl/lv_port_disp.c
@@ -10,6 +10,8 @@
* INCLUDES
*********************/
#include "lv_port_disp.h"
+#include "ltdc.h"
+#include "lcd.h"
#include
/*********************
@@ -174,25 +176,37 @@ void disp_disable_update(void)
*'lv_disp_flush_ready()' has to be called when finished.*/
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
- if(disp_flush_enabled) {
- /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/
+ // if(disp_flush_enabled){
+ // ltdc_color_fill(area->x1,area->y1,area->x2,area->y2,(uint16_t*)color_p);
+ // }
+ if(!RGB_DIR) /*竖屏*/
+ {
int32_t x;
int32_t y;
- for(y = area->y1; y <= area->y2; y++) {
- for(x = area->x1; x <= area->x2; x++) {
- /*Put a pixel to the display. For example:*/
- /*put_px(x, y, *color_p)*/
+ for(y = area->y1; y <= area->y2; y++)
+ {
+ for(x = area->x1; x <= area->x2; x++)
+ {
+ #if LTDC_PIXFORMAT == LTDC_PIXFORMAT_ARGB8888
+ ltdc_draw_point(x, y, *(uint32_t *)(uint32_t*)color_p);
+ #elif LTDC_PIXFORMAT_RGB565
+ ltdc_draw_point(x, y, *(uint16_t *)(uint32_t*)color_p);
+ #endif
color_p++;
}
}
}
-
+ else /*横屏*/
+ {
+ ltdc_color_fill(area->x1,area->y1,area->x2,area->y2,(uint16_t*)color_p);
+ }
/*IMPORTANT!!!
*Inform the graphics library that you are ready with the flushing*/
lv_disp_flush_ready(disp_drv);
}
+
/*OPTIONAL: GPU INTERFACE*/
/*If your MCU has hardware accelerator (GPU) then you can use it to fill a memory with a color*/
diff --git a/applications/lvgl/lv_port_disp.h b/applications/lvgl/lv_port_disp.h
index af04b01..a10691d 100644
--- a/applications/lvgl/lv_port_disp.h
+++ b/applications/lvgl/lv_port_disp.h
@@ -25,6 +25,8 @@ extern "C" {
/*********************
* DEFINES
*********************/
+#define MY_DISP_HOR_RES 1024
+#define MY_DISP_VER_RES 600
/**********************
* TYPEDEFS
diff --git a/applications/main.c b/applications/main.c
index a8cc28b..e138466 100644
--- a/applications/main.c
+++ b/applications/main.c
@@ -12,7 +12,6 @@
#include
#include
#include "DB_SQLite.h"
-#include "lv__user_gui.h"
#include "lcd.h"
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
@@ -26,8 +25,6 @@ int main(void)
thread_DB_SQLite();
thread_RUN_LED();//运行指示灯线程
- lcd_init();
- // lv_user_gui_init();
return RT_EOK;
}
diff --git a/applications/wdt.c b/applications/wdt.c
index 82cb6b2..7ef05f3 100644
--- a/applications/wdt.c
+++ b/applications/wdt.c
@@ -69,4 +69,4 @@ static int wdt_sample()
return ret;
}
-//INIT_APP_EXPORT(wdt_sample);
+INIT_APP_EXPORT(wdt_sample);
diff --git a/cubemx/Src/stm32h7xx_hal_msp.c b/cubemx/Src/stm32h7xx_hal_msp.c
index 04e268a..761a63f 100644
--- a/cubemx/Src/stm32h7xx_hal_msp.c
+++ b/cubemx/Src/stm32h7xx_hal_msp.c
@@ -84,13 +84,13 @@ void HAL_MspInit(void)
*/
void HAL_DMA2D_MspInit(DMA2D_HandleTypeDef* hdma2d)
{
- if(hdma2d->Instance==DMA2D)
+ //if(hdma2d->Instance==DMA2D)
{
/* USER CODE BEGIN DMA2D_MspInit 0 */
/* USER CODE END DMA2D_MspInit 0 */
/* Peripheral clock enable */
- __HAL_RCC_DMA2D_CLK_ENABLE();
+ // __HAL_RCC_DMA2D_CLK_ENABLE();
/* USER CODE BEGIN DMA2D_MspInit 1 */
/* USER CODE END DMA2D_MspInit 1 */
diff --git a/drivers/include/lcd.h b/drivers/include/lcd.h
index dbc41e6..8f66392 100644
--- a/drivers/include/lcd.h
+++ b/drivers/include/lcd.h
@@ -22,6 +22,8 @@
#define CYAN 0x07FF
#define MAGENTA 0xF81F
+#define RGB_DIR 1
+
/* 注意:_lcd_dev 必须在 extern 之前定义! */
typedef struct {
uint16_t width;
@@ -35,7 +37,7 @@ extern uint32_t g_back_color;
extern _lcd_dev lcddev;
/* 函数声明 */
-void lcd_init(void);
+int lcd_init(void);
void lcd_clear(uint32_t color);
void lcd_draw_point(uint16_t x, uint16_t y, uint32_t color);
void lcd_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t color);
diff --git a/drivers/include/ltdc.h b/drivers/include/ltdc.h
index a32d9c8..4f3c81d 100644
--- a/drivers/include/ltdc.h
+++ b/drivers/include/ltdc.h
@@ -95,7 +95,7 @@ extern DMA2D_HandleTypeDef g_dma2d_handle; /* DMA2D句柄 */
#define LTDC_BACKLAYERCOLOR 0X00000000
/* LTDC帧缓冲区首地址,这里定义在SDRAM里面. */
-#define LTDC_FRAME_BUF_ADDR 0XC0000000
+//#define LTDC_FRAME_BUF_ADDR 0XC0000000
/* LTDC背光控制 */
#define LTDC_BL(x) do{ x ? \
@@ -124,6 +124,6 @@ uint8_t ltdc_clk_set(uint32_t pll3n, uint32_t pll3m, uint32_t pll3r);
void ltdc_layer_window_config(uint8_t layerx, uint16_t sx, uint16_t sy, uint16_t width, uint16_t height); /* LTDC层窗口设置 */
void ltdc_layer_parameter_config(uint8_t layerx, uint32_t bufaddr, uint8_t pixformat, uint8_t alpha, uint8_t alpha0, uint8_t bfac1, uint8_t bfac2, uint32_t bkcolor); /* LTDC层基本参数设置 */
uint16_t ltdc_panelid_read(void); /* LTDC 面板ID读取函数 */
-int ltdc_init(void); /* LTDC初始化函数 */
+int ltdc_init(void);
#endif /* DRIVERS_INCLUDE_LTDC_H_ */
diff --git a/drivers/lcd.c b/drivers/lcd.c
index b7ee730..650ef2e 100644
--- a/drivers/lcd.c
+++ b/drivers/lcd.c
@@ -16,19 +16,20 @@ uint32_t g_point_color = RED;
uint32_t g_back_color = WHITE;
_lcd_dev lcddev;
-void lcd_init(void) {
- lcddev.id = 0x7016; // 模拟 ID
+int lcd_init(void) {
+ // lcddev.id = 0x7016; // 模拟 ID
- rt_kprintf("LCD ID:%x\r\n", lcddev.id);
+ // rt_kprintf("LCD ID:%x\r\n", lcddev.id);
if (lcdltdc.pwidth != 0) {
- lcd_display_dir(1); // 横屏
+ lcd_display_dir(RGB_DIR); // 横屏
}
lcd_clear(WHITE);
- lcd_rgb_test();
+
+ return 0;
}
-//INIT_APP_EXPORT(lcd_init);
+INIT_APP_EXPORT(lcd_init);
void lcd_rgb_test(void)
{
@@ -106,8 +107,8 @@ void lcd_show_xnum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, uint8_t si
void lcd_show_string(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t size, char *p, uint32_t color) {}
// 工具函数(若未使用可删除)
-static uint32_t lcd_pow(uint8_t m, uint8_t n) {
+/*static uint32_t lcd_pow(uint8_t m, uint8_t n) {
uint32_t result = 1;
while (n--) result *= m;
return result;
-}
+}*/
diff --git a/drivers/ltdc.c b/drivers/ltdc.c
index 81d1259..0564340 100644
--- a/drivers/ltdc.c
+++ b/drivers/ltdc.c
@@ -19,10 +19,8 @@
LTDC_HandleTypeDef g_ltdc_handle; /* LTDC句柄 */
DMA2D_HandleTypeDef g_dma2d_handle; /* DMA2D句柄 */
-/* 移除原始静态帧缓存数组定义 */
-
-#define MAX_FRAME_WIDTH 1280
-#define MAX_FRAME_HEIGHT 800
+#define MAX_FRAME_WIDTH 1024
+#define MAX_FRAME_HEIGHT 600
#if LTDC_PIXFORMAT == LTDC_PIXFORMAT_ARGB8888 || LTDC_PIXFORMAT == LTDC_PIXFORMAT_RGB888
#define BYTES_PER_PIXEL 4
@@ -234,8 +232,16 @@ void ltdc_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t colo
}
else
{
- if (ex >= lcdltdc.pheight) ex = lcdltdc.pheight - 1;
- if (sx >= lcdltdc.pheight) sx = lcdltdc.pheight - 1;
+ if (ex >= lcdltdc.pheight)
+ {
+ ex = lcdltdc.pheight - 1;
+ }
+
+ if (sx >= lcdltdc.pheight)
+ {
+ sx = lcdltdc.pheight - 1;
+ }
+
psx = sy;
psy = lcdltdc.pheight - ex - 1;
pex = ey;
@@ -246,10 +252,12 @@ void ltdc_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t colo
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx));
__HAL_RCC_DMA2D_CLK_ENABLE();
+
DMA2D->CR &= ~(DMA2D_CR_START);
DMA2D->CR = DMA2D_R2M;
DMA2D->OPFCCR = LTDC_PIXFORMAT;
DMA2D->OOR = offline;
+
DMA2D->OMAR = addr;
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16);
DMA2D->OCOLR = color;
@@ -292,11 +300,13 @@ void ltdc_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx));
__HAL_RCC_DMA2D_CLK_ENABLE();
+
DMA2D->CR &= ~(DMA2D_CR_START);
DMA2D->CR = DMA2D_M2M;
DMA2D->FGPFCCR = LTDC_PIXFORMAT;
DMA2D->FGOR = 0;
DMA2D->OOR = offline;
+
DMA2D->FGMAR = (uint32_t)color;
DMA2D->OMAR = addr;
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16);
@@ -448,7 +458,7 @@ int ltdc_init(void)
lcdltdc.pwidth = 1024; lcdltdc.pheight = 600;
lcdltdc.hsw = 20; lcdltdc.hbp = 140; lcdltdc.hfp = 160;
lcdltdc.vsw = 3; lcdltdc.vbp = 20; lcdltdc.vfp = 12;
- ltdc_clk_set(300, 25, 6);
+ ltdc_clk_set(129, 32, 5);
}
else if (lcdid == 0X7018)
{
diff --git a/packages/LVGL-v8.3.11/lv_conf_template.h b/packages/LVGL-v8.3.11/lv_conf.h
similarity index 100%
rename from packages/LVGL-v8.3.11/lv_conf_template.h
rename to packages/LVGL-v8.3.11/lv_conf.h
diff --git a/packages/packages.dbsqlite b/packages/packages.dbsqlite
index 1c0f41a..2d3e4f2 100644
Binary files a/packages/packages.dbsqlite and b/packages/packages.dbsqlite differ
diff --git a/rtconfig.h b/rtconfig.h
index ad2d633..3f276d3 100644
--- a/rtconfig.h
+++ b/rtconfig.h
@@ -144,6 +144,7 @@
#define RT_SFUD_USING_QSPI
#define RT_SFUD_SPI_MAX_HZ 50000000
#define RT_USING_WDT
+#define RT_USING_TOUCH
#define RT_USING_LCD
#define RT_USING_DEV_BUS
#define RT_USING_PIN