Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
卖小麦←_←
rt-thread
提交
f96ee3cb
R
rt-thread
项目概览
卖小麦←_←
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
f96ee3cb
编写于
10月 19, 2021
作者:
B
Bernard Xiong
提交者:
GitHub
10月 19, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5204 from mysterywolf/l47555
[stm32l475] port for LVGL
上级
abf88128
d4991d9d
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
268 addition
and
22 deletion
+268
-22
bsp/stm32/stm32f103-blue-pill/applications/SConscript
bsp/stm32/stm32f103-blue-pill/applications/SConscript
+8
-3
bsp/stm32/stm32f407-atk-explorer/applications/SConscript
bsp/stm32/stm32f407-atk-explorer/applications/SConscript
+3
-6
bsp/stm32/stm32l475-atk-pandora/applications/SConscript
bsp/stm32/stm32l475-atk-pandora/applications/SConscript
+10
-3
bsp/stm32/stm32l475-atk-pandora/applications/lcd_sample.c
bsp/stm32/stm32l475-atk-pandora/applications/lcd_sample.c
+0
-3
bsp/stm32/stm32l475-atk-pandora/board/Kconfig
bsp/stm32/stm32l475-atk-pandora/board/Kconfig
+12
-0
bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.c
bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.c
+55
-6
bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.h
bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.h
+1
-1
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/SConscript
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/SConscript
+9
-0
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lv_conf.h
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lv_conf.h
+16
-0
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl_demo.c
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl_demo.c
+154
-0
未找到文件。
bsp/stm32/stm32f103-blue-pill/applications/SConscript
浏览文件 @
f96ee3cb
Import
(
'RTT_ROOT'
)
Import
(
'rtconfig'
)
from
building
import
*
import
os
cwd
=
GetCurrentDir
()
src
=
Glob
(
'*.c'
)
CPPPATH
=
[
cwd
,
]
CPPPATH
=
[
cwd
]
group
=
DefineGroup
(
'Applications'
,
src
,
depend
=
[
''
],
CPPPATH
=
CPPPATH
)
list
=
os
.
listdir
(
cwd
)
for
d
in
list
:
path
=
os
.
path
.
join
(
cwd
,
d
)
if
os
.
path
.
isfile
(
os
.
path
.
join
(
path
,
'SConscript'
)):
group
=
group
+
SConscript
(
os
.
path
.
join
(
d
,
'SConscript'
))
Return
(
'group'
)
bsp/stm32/stm32f407-atk-explorer/applications/SConscript
浏览文件 @
f96ee3cb
import
rtconfig
import
os
from
building
import
*
import
os
cwd
=
GetCurrentDir
()
CPPPATH
=
[
cwd
,
str
(
Dir
(
'#'
))]
src
=
Split
(
"""
main.c
"""
)
CPPPATH
=
[
cwd
]
src
=
Glob
(
'*.c'
)
group
=
DefineGroup
(
'Applications'
,
src
,
depend
=
[
''
],
CPPPATH
=
CPPPATH
)
...
...
bsp/stm32/stm32l475-atk-pandora/applications/SConscript
浏览文件 @
f96ee3cb
from
building
import
*
import
os
cwd
=
GetCurrentDir
()
cwd
=
GetCurrentDir
()
src
=
Split
(
'''
main.c
'''
)
if
GetDepend
([
'BSP_USING_
SPI_LCD
'
]):
if
GetDepend
([
'BSP_USING_
LCD_SAMPLE
'
]):
src
+=
[
'lcd_sample.c'
]
if
GetDepend
([
'PKG_USING_NRF24L01'
]):
src
+=
[
'nrf24l01_init.c'
]
CPPPATH
=
[
str
(
Dir
(
'#'
)),
cwd
]
CPPPATH
=
[
cwd
]
group
=
DefineGroup
(
'Applications'
,
src
,
depend
=
[
''
],
CPPPATH
=
CPPPATH
)
list
=
os
.
listdir
(
cwd
)
for
d
in
list
:
path
=
os
.
path
.
join
(
cwd
,
d
)
if
os
.
path
.
isfile
(
os
.
path
.
join
(
path
,
'SConscript'
)):
group
=
group
+
SConscript
(
os
.
path
.
join
(
d
,
'SConscript'
))
Return
(
'group'
)
bsp/stm32/stm32l475-atk-pandora/applications/lcd_sample.c
浏览文件 @
f96ee3cb
...
...
@@ -11,8 +11,6 @@
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#ifdef BSP_USING_SPI_LCD
#include <drv_lcd.h>
#include <rttlogo.h>
...
...
@@ -45,4 +43,3 @@ static int lcd_sample(void)
return
RT_EOK
;
}
INIT_APP_EXPORT
(
lcd_sample
);
#endif
/* BSP_USING_SPI_LCD */
bsp/stm32/stm32l475-atk-pandora/board/Kconfig
浏览文件 @
f96ee3cb
...
...
@@ -35,6 +35,18 @@ menu "Onboard Peripheral Drivers"
select BSP_USING_SPI3
default n
config BSP_USING_LCD_SAMPLE
bool "Enable LCD sample"
depends on BSP_USING_SPI_LCD
depends on !BSP_USING_LVGL
default n
config BSP_USING_LVGL
bool "Enable LVGL for LCD"
select BSP_USING_SPI_LCD
select PKG_USING_LVGL
default n
config BSP_USING_SDCARD
bool "Enable SDCARD (spi1)"
select BSP_USING_SPI
...
...
bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.c
浏览文件 @
f96ee3cb
...
...
@@ -8,17 +8,17 @@
* 2018-08-14 flybreak the first version
* 2018-09-18 balanceTWK add sleep mode function
* 2018-09-27 ZYLX optimized display speed
* 2021-10-17 Meco Man add lcd_fill_array()
*/
#include <rtdevice.h>
#include "drv_spi.h"
#include
"drv_lcd.h"
#include
<drv_lcd.h>
#include "drv_lcd_font.h"
#include
"drv_gpio.h"
#include
<drv_gpio.h>
#define DBG_SECTION_NAME "LCD"
#define DBG_COLOR
#define DBG_LEVEL DBG_LOG
#define DBG_TAG "drv.lcd"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>
#define LCD_PWR_PIN GET_PIN(B, 7)
...
...
@@ -375,7 +375,7 @@ void lcd_fill(rt_uint16_t x_start, rt_uint16_t y_start, rt_uint16_t x_end, rt_ui
rt_uint32_t
size
=
0
,
size_remain
=
0
;
rt_uint8_t
*
fill_buf
=
RT_NULL
;
size
=
(
x_end
-
x_start
)
*
(
y_end
-
y_start
)
*
2
;
size
=
(
x_end
-
x_start
+
1
)
*
(
y_end
-
y_start
+
1
)
*
2
;
if
(
size
>
LCD_CLEAR_SEND_NUMBER
)
{
...
...
@@ -426,6 +426,55 @@ void lcd_fill(rt_uint16_t x_start, rt_uint16_t y_start, rt_uint16_t x_end, rt_ui
}
}
/**
* full color array on the lcd.
*
* @param x_start start of x position
* @param y_start start of y position
* @param x_end end of x position
* @param y_end end of y position
* @param color Fill color array's pointer
*
* @return void
*/
void
lcd_fill_array
(
rt_uint16_t
x_start
,
rt_uint16_t
y_start
,
rt_uint16_t
x_end
,
rt_uint16_t
y_end
,
void
*
pcolor
)
{
rt_uint32_t
size
=
0
,
size_remain
=
0
;
size
=
(
x_end
-
x_start
+
1
)
*
(
y_end
-
y_start
+
1
)
*
2
;
if
(
size
>
LCD_CLEAR_SEND_NUMBER
)
{
/* the number of remaining to be filled */
size_remain
=
size
-
LCD_CLEAR_SEND_NUMBER
;
size
=
LCD_CLEAR_SEND_NUMBER
;
}
lcd_address_set
(
x_start
,
y_start
,
x_end
,
y_end
);
/* fast fill */
while
(
1
)
{
rt_pin_write
(
LCD_DC_PIN
,
PIN_HIGH
);
rt_spi_send
(
spi_dev_lcd
,
pcolor
,
size
);
/* Fill completed */
if
(
size_remain
==
0
)
break
;
/* calculate the number of fill next time */
if
(
size_remain
>
LCD_CLEAR_SEND_NUMBER
)
{
size_remain
=
size_remain
-
LCD_CLEAR_SEND_NUMBER
;
}
else
{
size
=
size_remain
;
size_remain
=
0
;
}
}
}
/**
* display a line on the lcd.
*
...
...
bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.h
浏览文件 @
f96ee3cb
...
...
@@ -50,7 +50,7 @@ void lcd_draw_circle(rt_uint16_t x0, rt_uint16_t y0, rt_uint8_t r);
void
lcd_draw_line
(
rt_uint16_t
x1
,
rt_uint16_t
y1
,
rt_uint16_t
x2
,
rt_uint16_t
y2
);
void
lcd_draw_rectangle
(
rt_uint16_t
x1
,
rt_uint16_t
y1
,
rt_uint16_t
x2
,
rt_uint16_t
y2
);
void
lcd_fill
(
rt_uint16_t
x_start
,
rt_uint16_t
y_start
,
rt_uint16_t
x_end
,
rt_uint16_t
y_end
,
rt_uint16_t
color
);
void
lcd_fill_array
(
rt_uint16_t
x_start
,
rt_uint16_t
y_start
,
rt_uint16_t
x_end
,
rt_uint16_t
y_end
,
void
*
pcolor
);
void
lcd_show_num
(
rt_uint16_t
x
,
rt_uint16_t
y
,
rt_uint32_t
num
,
rt_uint8_t
len
,
rt_uint32_t
size
);
rt_err_t
lcd_show_string
(
rt_uint16_t
x
,
rt_uint16_t
y
,
rt_uint32_t
size
,
const
char
*
fmt
,
...);
rt_err_t
lcd_show_image
(
rt_uint16_t
x
,
rt_uint16_t
y
,
rt_uint16_t
length
,
rt_uint16_t
wide
,
const
rt_uint8_t
*
p
);
...
...
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/SConscript
0 → 100644
浏览文件 @
f96ee3cb
from
building
import
*
cwd
=
GetCurrentDir
()
src
=
Glob
(
'*.c'
)
CPPPATH
=
[
cwd
]
group
=
DefineGroup
(
'LVGL'
,
src
,
depend
=
[
'BSP_USING_LVGL'
],
CPPPATH
=
CPPPATH
)
Return
(
'group'
)
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lv_conf.h
0 → 100644
浏览文件 @
f96ee3cb
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-18 Meco Man First version
*/
#ifndef LV_CONF_H
#define LV_CONF_H
#define LV_COLOR_16_SWAP 1
#endif
bsp/stm32/stm32l475-atk-pandora/board/ports/lvgl/lvgl_demo.c
0 → 100644
浏览文件 @
f96ee3cb
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-10-17 Meco Man First version
*/
#include <rtthread.h>
#include <lvgl.h>
#include <drv_lcd.h>
#define DBG_TAG "LVGL"
#define DBG_LVL DBG_INFO
#include <rtdbg.h>
#ifndef LV_THREAD_STACK_SIZE
#define LV_THREAD_STACK_SIZE 2048
#endif
#ifndef LV_THREAD_PRIO
#define LV_THREAD_PRIO (RT_THREAD_PRIORITY_MAX*2/3)
#endif
static
void
lv_example_get_started_1
(
void
);
static
void
lv_example_get_started_3
(
void
);
#define MY_DISP_HOR_RES 240
/* 240*240 */
/*A static or global variable to store the buffers*/
static
lv_disp_draw_buf_t
disp_buf
;
/*Static or global buffer(s). The second buffer is optional*/
static
lv_color_t
buf_1
[
MY_DISP_HOR_RES
*
10
];
static
lv_color_t
buf_2
[
MY_DISP_HOR_RES
*
10
];
static
lv_disp_drv_t
disp_drv
;
/*Descriptor of a display driver*/
/*Flush the content of the internal buffer the specific area on the display
*You can use DMA or any hardware acceleration to do this operation in the background but
*'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
)
{
lcd_fill_array
(
area
->
x1
,
area
->
y1
,
area
->
x2
,
area
->
y2
,
color_p
);
/*IMPORTANT!!!
*Inform the graphics library that you are ready with the flushing*/
lv_disp_flush_ready
(
disp_drv
);
}
static
void
lvgl_thread
(
void
*
parameter
)
{
lv_init
();
/*Initialize `disp_buf` with the buffer(s). With only one buffer use NULL instead buf_2 */
lv_disp_draw_buf_init
(
&
disp_buf
,
buf_1
,
buf_2
,
MY_DISP_HOR_RES
*
10
);
lv_disp_drv_init
(
&
disp_drv
);
/*Basic initialization*/
/*Set the resolution of the display*/
disp_drv
.
hor_res
=
MY_DISP_HOR_RES
;
disp_drv
.
ver_res
=
MY_DISP_HOR_RES
;
/*Set a display buffer*/
disp_drv
.
draw_buf
=
&
disp_buf
;
/*Used to copy the buffer's content to the display*/
disp_drv
.
flush_cb
=
disp_flush
;
/*Finally register the driver*/
lv_disp_drv_register
(
&
disp_drv
);
lv_example_get_started_1
();
lv_example_get_started_3
();
while
(
1
)
{
lv_task_handler
();
rt_thread_mdelay
(
10
);
}
}
static
int
lvgl_demo_init
(
void
)
{
rt_thread_t
tid
;
tid
=
rt_thread_create
(
"lvgl"
,
lvgl_thread
,
RT_NULL
,
LV_THREAD_STACK_SIZE
,
LV_THREAD_PRIO
,
0
);
rt_thread_startup
(
tid
);
return
0
;
}
INIT_COMPONENT_EXPORT
(
lvgl_demo_init
);
/* ------------------- demo1 ----------------------- */
static
void
btn_event_cb
(
lv_event_t
*
e
)
{
lv_event_code_t
code
=
lv_event_get_code
(
e
);
lv_obj_t
*
btn
=
lv_event_get_target
(
e
);
if
(
code
==
LV_EVENT_CLICKED
)
{
static
uint8_t
cnt
=
0
;
cnt
++
;
/*Get the first child of the button which is the label and change its text*/
lv_obj_t
*
label
=
lv_obj_get_child
(
btn
,
0
);
lv_label_set_text_fmt
(
label
,
"Button: %d"
,
cnt
);
}
}
/**
* Create a button with a label and react on click event.
*/
static
void
lv_example_get_started_1
(
void
)
{
lv_obj_t
*
btn
=
lv_btn_create
(
lv_scr_act
());
/*Add a button the current screen*/
lv_obj_set_pos
(
btn
,
10
,
10
);
/*Set its position*/
lv_obj_set_size
(
btn
,
120
,
50
);
/*Set its size*/
lv_obj_add_event_cb
(
btn
,
btn_event_cb
,
LV_EVENT_ALL
,
NULL
);
/*Assign a callback to the button*/
lv_obj_t
*
label
=
lv_label_create
(
btn
);
/*Add a label to the button*/
lv_label_set_text
(
label
,
"Button"
);
/*Set the labels text*/
lv_obj_center
(
label
);
}
/* ------------------- demo3 ----------------------- */
static
lv_obj_t
*
label
;
static
void
slider_event_cb
(
lv_event_t
*
e
)
{
lv_obj_t
*
slider
=
lv_event_get_target
(
e
);
/*Refresh the text*/
lv_label_set_text_fmt
(
label
,
"%d"
,
(
int
)
lv_slider_get_value
(
slider
));
lv_obj_align_to
(
label
,
slider
,
LV_ALIGN_OUT_TOP_MID
,
0
,
-
15
);
/*Align top of the slider*/
}
/**
* Create a slider and write its value on a label.
*/
static
void
lv_example_get_started_3
(
void
)
{
/*Create a slider in the center of the display*/
lv_obj_t
*
slider
=
lv_slider_create
(
lv_scr_act
());
lv_obj_set_width
(
slider
,
200
);
/*Set the width*/
lv_obj_center
(
slider
);
/*Align to the center of the parent (screen)*/
lv_obj_add_event_cb
(
slider
,
slider_event_cb
,
LV_EVENT_VALUE_CHANGED
,
NULL
);
/*Assign an event function*/
/*Create a label below the slider*/
label
=
lv_label_create
(
lv_scr_act
());
lv_label_set_text
(
label
,
"0"
);
lv_obj_align_to
(
label
,
slider
,
LV_ALIGN_OUT_TOP_MID
,
0
,
-
15
);
/*Align top of the slider*/
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录