Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
逆着光、寻觅
rt-thread
提交
db16cada
R
rt-thread
项目概览
逆着光、寻觅
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
db16cada
编写于
10月 05, 2018
作者:
B
Bernard Xiong
提交者:
GitHub
10月 05, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1864 from xuzhuoyi/stm32f429-disco
STM32F429-DISCO 添加 I2C 和触摸屏支持
上级
fc439bf6
f8918c34
变更
20
展开全部
隐藏空白更改
内联
并排
Showing
20 changed file
with
703 addition
and
492 deletion
+703
-492
bsp/stm32f429-disco/.config
bsp/stm32f429-disco/.config
+30
-7
bsp/stm32f429-disco/applications/application.c
bsp/stm32f429-disco/applications/application.c
+6
-7
bsp/stm32f429-disco/applications/startup.c
bsp/stm32f429-disco/applications/startup.c
+2
-6
bsp/stm32f429-disco/drivers/Kconfig
bsp/stm32f429-disco/drivers/Kconfig
+17
-1
bsp/stm32f429-disco/drivers/SConscript
bsp/stm32f429-disco/drivers/SConscript
+12
-2
bsp/stm32f429-disco/drivers/board.c
bsp/stm32f429-disco/drivers/board.c
+3
-6
bsp/stm32f429-disco/drivers/board.h
bsp/stm32f429-disco/drivers/board.h
+2
-6
bsp/stm32f429-disco/drivers/drv_i2c.c
bsp/stm32f429-disco/drivers/drv_i2c.c
+116
-0
bsp/stm32f429-disco/drivers/drv_i2c.h
bsp/stm32f429-disco/drivers/drv_i2c.h
+20
-0
bsp/stm32f429-disco/drivers/drv_lcd.c
bsp/stm32f429-disco/drivers/drv_lcd.c
+20
-128
bsp/stm32f429-disco/drivers/drv_lcd.h
bsp/stm32f429-disco/drivers/drv_lcd.h
+10
-0
bsp/stm32f429-disco/drivers/drv_sdram.c
bsp/stm32f429-disco/drivers/drv_sdram.c
+2
-16
bsp/stm32f429-disco/drivers/drv_sdram.h
bsp/stm32f429-disco/drivers/drv_sdram.h
+2
-6
bsp/stm32f429-disco/drivers/drv_touch.c
bsp/stm32f429-disco/drivers/drv_touch.c
+226
-0
bsp/stm32f429-disco/drivers/drv_touch.h
bsp/stm32f429-disco/drivers/drv_touch.h
+79
-0
bsp/stm32f429-disco/drivers/usart.c
bsp/stm32f429-disco/drivers/usart.c
+2
-6
bsp/stm32f429-disco/drivers/usart.h
bsp/stm32f429-disco/drivers/usart.h
+2
-6
bsp/stm32f429-disco/project.uvprojx
bsp/stm32f429-disco/project.uvprojx
+133
-291
bsp/stm32f429-disco/readme.md
bsp/stm32f429-disco/readme.md
+9
-4
bsp/stm32f429-disco/rtconfig.h
bsp/stm32f429-disco/rtconfig.h
+10
-0
未找到文件。
bsp/stm32f429-disco/.config
浏览文件 @
db16cada
...
...
@@ -117,18 +117,24 @@ CONFIG_RT_USING_SERIAL=y
# CONFIG_RT_USING_CAN is not set
# CONFIG_RT_USING_HWTIMER is not set
# CONFIG_RT_USING_CPUTIME is not set
# CONFIG_RT_USING_I2C is not set
CONFIG_RT_USING_I2C
=
y
CONFIG_RT_USING_I2C_BITOPS
=
y
CONFIG_RT_USING_PIN
=
y
# CONFIG_RT_USING_PWM is not set
# CONFIG_RT_USING_MTD_NOR is not set
# CONFIG_RT_USING_MTD_NAND is not set
# CONFIG_RT_USING_MTD is not set
# CONFIG_RT_USING_RTC is not set
# CONFIG_RT_USING_SDIO is not set
# CONFIG_RT_USING_SPI is not set
# CONFIG_RT_USING_WDT is not set
# CONFIG_RT_USING_WIFI is not set
# CONFIG_RT_USING_AUDIO is not set
#
# Using WiFi
#
# CONFIG_RT_USING_WIFI is not set
#
# Using USB
#
...
...
@@ -138,8 +144,13 @@ CONFIG_RT_USING_PIN=y
#
# POSIX layer and C standard library
#
# CONFIG_RT_USING_LIBC is not set
CONFIG_RT_USING_LIBC
=
y
# CONFIG_RT_USING_PTHREADS is not set
CONFIG_RT_USING_POSIX
=
y
# CONFIG_RT_USING_POSIX_MMAP is not set
# CONFIG_RT_USING_POSIX_TERMIOS is not set
# CONFIG_RT_USING_POSIX_AIO is not set
# CONFIG_RT_USING_MODULE is not set
#
# Network
...
...
@@ -210,6 +221,7 @@ CONFIG_RT_USING_PIN=y
# CONFIG_PKG_USING_NOPOLL is not set
# CONFIG_PKG_USING_NETUTILS is not set
# CONFIG_PKG_USING_AT_DEVICE is not set
# CONFIG_PKG_USING_WIZNET is not set
#
# IoT Cloud
...
...
@@ -246,13 +258,12 @@ CONFIG_RT_USING_PIN=y
# CONFIG_PKG_USING_EASYFLASH is not set
# CONFIG_PKG_USING_EASYLOGGER is not set
# CONFIG_PKG_USING_SYSTEMVIEW is not set
# CONFIG_PKG_USING_RDB is not set
#
# system packages
#
# CONFIG_PKG_USING_GUIENGINE is not set
# CONFIG_PKG_USING_GUIENGINE_V200 is not set
# CONFIG_PKG_USING_GUIENGINE_LATEST_VERSION is not set
# CONFIG_PKG_USING_CAIRO is not set
# CONFIG_PKG_USING_PIXMAN is not set
# CONFIG_PKG_USING_LWEXT4 is not set
...
...
@@ -261,18 +272,27 @@ CONFIG_RT_USING_PIN=y
# CONFIG_PKG_USING_SQLITE is not set
# CONFIG_PKG_USING_RTI is not set
# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
# CONFIG_PKG_USING_LITTLEVGL2RTT_V001 is not set
# CONFIG_PKG_USING_LITTLEVGL2RTT_LATEST_VERSION is not set
# CONFIG_LV_MEM_STATIC is not set
# CONFIG_LV_MEM_DYNAMIC is not set
# CONFIG_LV_COLOR_DEPTH_1 is not set
# CONFIG_LV_COLOR_DEPTH_8 is not set
# CONFIG_LV_COLOR_DEPTH_16 is not set
# CONFIG_LV_COLOR_DEPTH_24 is not set
# CONFIG_PKG_USING_CMSIS is not set
# CONFIG_PKG_USING_DFS_YAFFS is not set
#
# peripheral libraries and drivers
#
# CONFIG_PKG_USING_STM32F4_HAL is not set
# CONFIG_PKG_USING_STM32F4_DRIVERS is not set
# CONFIG_PKG_USING_REALTEK_AMEBA is not set
# CONFIG_PKG_USING_SHT2X is not set
# CONFIG_PKG_USING_AHT10 is not set
# CONFIG_PKG_USING_AP3216C is not set
# CONFIG_PKG_USING_STM32_SDIO is not set
# CONFIG_PKG_USING_ICM20608 is not set
# CONFIG_PKG_USING_U8G2 is not set
#
# miscellaneous packages
...
...
@@ -303,8 +323,11 @@ CONFIG_RT_USING_PIN=y
# example package: hello
#
# CONFIG_PKG_USING_HELLO is not set
CONFIG_RT_USING_ILI9341_LCD
=
y
CONFIG_RT_USING_STMPE811_TOUCH
=
y
CONFIG_RT_USING_EXT_SDRAM
=
y
CONFIG_RT_USING_UART1
=
y
# CONFIG_RT_USING_UART2 is not set
# CONFIG_RT_USING_UART3 is not set
# CONFIG_RT_USING_SPI5 is not set
CONFIG_RT_USING_I2C3
=
y
bsp/stm32f429-disco/applications/application.c
浏览文件 @
db16cada
/*
* File : application.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
@@ -32,8 +28,11 @@
#include <gdb_stub.h>
#endif
void
rt_init_thread_entry
(
void
*
parameter
)
{
rt_thread_t
tid
;
/* GDB STUB */
#ifdef RT_USING_GDB
gdb_set_device
(
"uart6"
);
...
...
@@ -57,7 +56,7 @@ void rt_init_thread_entry(void* parameter)
#endif
rt_components_init
();
}
int
rt_application_init
()
...
...
bsp/stm32f429-disco/applications/startup.c
浏览文件 @
db16cada
/*
* File : startup.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://openlab.rt-thread.com/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
bsp/stm32f429-disco/drivers/Kconfig
浏览文件 @
db16cada
config RT_USING_ILI9341_LCD
bool "Enable LCD on the board"
default y
select RT_USING_EXT_SDRAM
config RT_USING_STMPE811_TOUCH
bool "Enable Touchscreen on the board"
default y
select RT_USING_I2C3
config RT_USING_EXT_SDRAM
bool "Enable SDRAM on the board"
default y
...
...
@@ -16,4 +26,10 @@ config RT_USING_UART3
config RT_USING_SPI5
bool "Enable SPI5"
default n
default n
config RT_USING_I2C3
bool "Enable I2C3"
default y
select RT_USING_I2C
select RT_USING_I2C_BITOPS
bsp/stm32f429-disco/drivers/SConscript
浏览文件 @
db16cada
...
...
@@ -9,10 +9,20 @@ src = Split("""
board.c
stm32f4xx_it.c
usart.c
drv_sdram.c
drv_lcd.c
"""
)
if
GetDepend
([
'RT_USING_EXT_SDRAM'
]):
src
+=
[
'drv_sdram.c'
]
if
GetDepend
([
'RT_USING_I2C'
]):
src
+=
[
'drv_i2c.c'
]
if
GetDepend
([
'RT_USING_ILI9341_LCD'
]):
src
+=
[
'drv_lcd.c'
]
if
GetDepend
([
'RT_USING_STMPE811_TOUCH'
]):
src
+=
[
'drv_touch.c'
]
CPPPATH
=
[
cwd
]
group
=
DefineGroup
(
'Drivers'
,
src
,
depend
=
[
''
],
CPPPATH
=
CPPPATH
)
...
...
bsp/stm32f429-disco/drivers/board.c
浏览文件 @
db16cada
/*
* File : board.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009 RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2009-01-05 Bernard first implementation
*/
#include <stdint.h>
#include <rthw.h>
#include <rtthread.h>
...
...
bsp/stm32f429-disco/drivers/board.h
浏览文件 @
db16cada
/*
* File : board.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
bsp/stm32f429-disco/drivers/drv_i2c.c
0 → 100644
浏览文件 @
db16cada
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-06-05 tanek first implementation.
*/
#include "drv_i2c.h"
#include <board.h>
#include <finsh.h>
#include <rtdevice.h>
#include <rthw.h>
#define DEBUG
#ifdef DEBUG
#define DEBUG_PRINTF(...) rt_kprintf(__VA_ARGS__)
#else
#define DEBUG_PRINTF(...)
#endif
static
void
stm32f4_i2c_gpio_init
()
{
GPIO_InitTypeDef
GPIO_Initure
;
__HAL_RCC_GPIOA_CLK_ENABLE
();
__HAL_RCC_GPIOC_CLK_ENABLE
();
GPIO_Initure
.
Pin
=
GPIO_PIN_8
;
GPIO_Initure
.
Mode
=
GPIO_MODE_OUTPUT_OD
;
GPIO_Initure
.
Pull
=
GPIO_PULLUP
;
GPIO_Initure
.
Speed
=
GPIO_SPEED_FAST
;
HAL_GPIO_Init
(
GPIOA
,
&
GPIO_Initure
);
GPIO_Initure
.
Pin
=
GPIO_PIN_9
;
GPIO_Initure
.
Mode
=
GPIO_MODE_OUTPUT_OD
;
GPIO_Initure
.
Pull
=
GPIO_PULLUP
;
GPIO_Initure
.
Speed
=
GPIO_SPEED_FAST
;
HAL_GPIO_Init
(
GPIOC
,
&
GPIO_Initure
);
HAL_GPIO_WritePin
(
GPIOA
,
GPIO_PIN_8
,
GPIO_PIN_SET
);
HAL_GPIO_WritePin
(
GPIOC
,
GPIO_PIN_9
,
GPIO_PIN_SET
);
}
static
void
stm32f4_set_sda
(
void
*
data
,
rt_int32_t
state
)
{
HAL_GPIO_WritePin
(
GPIOC
,
GPIO_PIN_9
,
(
GPIO_PinState
)
state
);
}
static
void
stm32f4_set_scl
(
void
*
data
,
rt_int32_t
state
)
{
HAL_GPIO_WritePin
(
GPIOA
,
GPIO_PIN_8
,
(
GPIO_PinState
)
state
);
}
static
rt_int32_t
stm32f4_get_sda
(
void
*
data
)
{
return
(
rt_int32_t
)
HAL_GPIO_ReadPin
(
GPIOC
,
GPIO_PIN_9
);
}
static
rt_int32_t
stm32f4_get_scl
(
void
*
data
)
{
return
(
rt_int32_t
)
HAL_GPIO_ReadPin
(
GPIOA
,
GPIO_PIN_8
);
}
static
void
stm32f4_udelay
(
rt_uint32_t
us
)
{
rt_int32_t
i
;
for
(;
us
>
0
;
us
--
)
{
i
=
50
;
while
(
i
>
0
)
{
i
--
;
}
}
}
static
const
struct
rt_i2c_bit_ops
bit_ops
=
{
RT_NULL
,
stm32f4_set_sda
,
stm32f4_set_scl
,
stm32f4_get_sda
,
stm32f4_get_scl
,
stm32f4_udelay
,
5
,
100
};
int
stm32f4_i2c_init
(
void
)
{
struct
rt_i2c_bus_device
*
bus
;
bus
=
rt_malloc
(
sizeof
(
struct
rt_i2c_bus_device
));
if
(
bus
==
RT_NULL
)
{
rt_kprintf
(
"rt_malloc failed
\n
"
);
return
-
RT_ENOMEM
;
}
rt_memset
((
void
*
)
bus
,
0
,
sizeof
(
struct
rt_i2c_bus_device
));
bus
->
priv
=
(
void
*
)
&
bit_ops
;
stm32f4_i2c_gpio_init
();
rt_i2c_bit_add_bus
(
bus
,
"i2c3"
);
return
RT_EOK
;
}
INIT_DEVICE_EXPORT
(
stm32f4_i2c_init
);
bsp/stm32f429-disco/drivers/drv_i2c.h
0 → 100644
浏览文件 @
db16cada
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
* Change Logs:
* Date Author Notes
* 2017-06-05 tanek first implementation.
*/
#ifndef STM32F4XX_IIC_INCLUDED
#define STM32F4XX_IIC_INCLUDED
#include <rtthread.h>
#include <drivers/spi.h>
#include "stm32f4xx_hal.h"
#endif // STM32F20X_40X_SPI_H_INCLUDED
bsp/stm32f429-disco/drivers/drv_lcd.c
浏览文件 @
db16cada
/*
* File : drv_lcd.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009 RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
@@ -25,13 +21,13 @@
typedef
struct
{
rt_uint16_t
width
;
//LCD 宽度
rt_uint16_t
height
;
//LCD 高度
rt_uint16_t
id
;
//LCD ID
rt_uint8_t
dir
;
//
横屏还是竖屏控制:0,竖屏;1,横屏。
rt_uint16_t
wramcmd
;
//开始写gram指令
rt_uint16_t
setxcmd
;
//设置x坐标指令
rt_uint16_t
setycmd
;
//设置y坐标指令
rt_uint16_t
width
;
rt_uint16_t
height
;
rt_uint16_t
id
;
rt_uint8_t
dir
;
//
Horizontal or vertical screen control: 0, vertical; 1, horizontal
rt_uint16_t
wramcmd
;
rt_uint16_t
setxcmd
;
rt_uint16_t
setycmd
;
}
lcd_info_t
;
typedef
struct
...
...
@@ -40,22 +36,20 @@ typedef struct
volatile
rt_uint16_t
ram
;
}
lcd_ili9341_t
;
//使用NOR/SRAM的 Bank1.sector1,地址位HADDR[27,26]=00 A18作为数据命令区分线
//注意设置时STM32内部会右移一位对其!
#define LCD_ILI9341_BASE ((rt_uint32_t)(0x60000000 | 0x0007FFFE))
#define ili9341 ((lcd_ili9341_t *) LCD_ILI9341_BASE)
//////////////////////////////////////////////////////////////////////////////////
//
扫描方向定义
#define L2R_U2D 0
//从左到右,从上到下
#define L2R_D2U 1
//从左到右,从下到上
#define R2L_U2D 2
//从右到左,从上到下
#define R2L_D2U 3
//从右到左,从下到上
#define U2D_L2R 4
//从上到下,从左到右
#define U2D_R2L 5
//从上到下,从右到左
#define D2U_L2R 6
//从下到上,从左到右
#define D2U_R2L 7
//从下到上,从右到左
#define DFT_SCAN_DIR L2R_U2D
//默认的扫描方向
//
Definition of scan direction
#define L2R_U2D 0
#define L2R_D2U 1
#define R2L_U2D 2
#define R2L_D2U 3
#define U2D_L2R 4
#define U2D_R2L 5
#define D2U_L2R 6
#define D2U_R2L 7
#define DFT_SCAN_DIR L2R_U2D
static
lcd_info_t
lcddev
;
LTDC_HandleTypeDef
LtdcHandler
;
...
...
@@ -734,108 +728,6 @@ rt_uint16_t ili9341_bgr2rgb(rt_uint16_t value)
return
(
blue
<<
11
)
+
(
green
<<
5
)
+
(
red
<<
0
);
}
//static void ili9341_set_scan_direction(rt_uint8_t dir)
//{
// rt_uint16_t regval = 0;
// rt_uint16_t dirreg = 0;
// rt_uint16_t temp;
// switch (dir)
// {
// case L2R_U2D://从左到右,从上到下
// regval |= (0 << 7) | (0 << 6) | (0 << 5);
// break;
// case L2R_D2U://从左到右,从下到上
// regval |= (1 << 7) | (0 << 6) | (0 << 5);
// break;
// case R2L_U2D://从右到左,从上到下
// regval |= (0 << 7) | (1 << 6) | (0 << 5);
// break;
// case R2L_D2U://从右到左,从下到上
// regval |= (1 << 7) | (1 << 6) | (0 << 5);
// break;
// case U2D_L2R://从上到下,从左到右
// regval |= (0 << 7) | (0 << 6) | (1 << 5);
// break;
// case U2D_R2L://从上到下,从右到左
// regval |= (0 << 7) | (1 << 6) | (1 << 5);
// break;
// case D2U_L2R://从下到上,从左到右
// regval |= (1 << 7) | (0 << 6) | (1 << 5);
// break;
// case D2U_R2L://从下到上,从右到左
// regval |= (1 << 7) | (1 << 6) | (1 << 5);
// break;
// }
// dirreg = 0X36;
// ili9341_write_reg_with_value(dirreg, regval);
// if (regval & 0X20)
// {
// if (lcddev.width < lcddev.height)//交换X,Y
// {
// temp = lcddev.width;
// lcddev.width = lcddev.height;
// lcddev.height = temp;
// }
// }
// else
// {
// if (lcddev.width > lcddev.height)//交换X,Y
// {
// temp = lcddev.width;
// lcddev.width = lcddev.height;
// lcddev.height = temp;
// }
// }
//
// ili9341_write_reg(lcddev.setxcmd);
// ili9341_write_data(0);
// ili9341_write_data(0);
// ili9341_write_data((lcddev.width - 1) >> 8);
// ili9341_write_data((lcddev.width - 1) & 0XFF);
// ili9341_write_reg(lcddev.setycmd);
// ili9341_write_data(0);
// ili9341_write_data(0);
// ili9341_write_data((lcddev.height - 1) >> 8);
// ili9341_write_data((lcddev.height - 1) & 0XFF);
//}
//void ili9341_set_backlight(rt_uint8_t pwm)
//{
// ili9341_write_reg(0xBE);
// ili9341_write_data(0x05);
// ili9341_write_data(pwm*2.55);
// ili9341_write_data(0x01);
// ili9341_write_data(0xFF);
// ili9341_write_data(0x00);
// ili9341_write_data(0x00);
//}
//void ili9341_set_display_direction(rt_uint8_t dir)
//{
// lcddev.dir = dir;
// if (dir == 0)
// {
// lcddev.width = 240;
// lcddev.height = 320;
// }
// else
// {
// lcddev.width = 320;
// lcddev.height = 240;
// }
// lcddev.wramcmd = 0X2C;
// lcddev.setxcmd = 0X2A;
// lcddev.setycmd = 0X2B;
// ili9341_set_scan_direction(DFT_SCAN_DIR);
//}
void
_lcd_low_level_init
(
void
)
{
...
...
@@ -906,7 +798,7 @@ static rt_err_t lcd_control(rt_device_t dev, int cmd, void *args)
info
->
bits_per_pixel
=
16
;
info
->
pixel_format
=
RTGRAPHIC_PIXEL_FORMAT_RGB565
;
info
->
framebuffer
=
RT_NULL
;
info
->
framebuffer
=
(
rt_uint8_t
*
)
LtdcHandler
.
LayerCfg
[
ActiveLayer
].
FBStartAdress
;
info
->
width
=
240
;
info
->
height
=
320
;
}
...
...
bsp/stm32f429-disco/drivers/drv_lcd.h
浏览文件 @
db16cada
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-09-13 xuzhuoyi first implementation
*/
#ifndef __DRV_LCD_H__
#define __DRV_LCD_H__
...
...
bsp/stm32f429-disco/drivers/drv_sdram.c
浏览文件 @
db16cada
/*
* File : drv_sdram.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2016, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
bsp/stm32f429-disco/drivers/drv_sdram.h
浏览文件 @
db16cada
/*
* File : drv_sdram.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2016 RT-Thread Develop Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
bsp/stm32f429-disco/drivers/drv_touch.c
0 → 100644
浏览文件 @
db16cada
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-10-03 xuzhuoyi first implementation.
*/
#include "drv_touch.h"
#include "drivers/i2c.h"
#ifdef PKG_USING_LITTLEVGL2RTT
#include "littlevgl2rtt.h"
#endif
#define TSC_I2C_ADDR 0x41
/* 7-bit I2C address */
static
struct
rt_i2c_bus_device
*
stmpe811_i2c_bus
;
/**
\fn int32_t touch_readRegister (uint8_t reg, uint8_t *val)
\brief Read register value from Touchscreen controller
\param[in] reg Register address
\param[out] val Pointer where data will be read from register
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
static
int32_t
touch_read
(
uint8_t
reg
,
uint8_t
*
val
)
{
struct
rt_i2c_msg
msgs
[
2
];
msgs
[
0
].
addr
=
TSC_I2C_ADDR
;
msgs
[
0
].
flags
=
RT_I2C_WR
;
msgs
[
0
].
buf
=
&
reg
;
msgs
[
0
].
len
=
1
;
msgs
[
1
].
addr
=
TSC_I2C_ADDR
;
msgs
[
1
].
flags
=
RT_I2C_RD
;
msgs
[
1
].
buf
=
val
;
msgs
[
1
].
len
=
1
;
if
(
rt_i2c_transfer
(
stmpe811_i2c_bus
,
msgs
,
2
)
==
2
)
{
return
RT_EOK
;
}
else
{
return
-
RT_ERROR
;
}
}
/**
\fn int32_t touch_writeData (uint8_t reg, const uint8_t *val)
\brief Write value to Touchscreen controller register
\param[in] reg Register address
\param[in] val Pointer with data to write to register
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
static
int32_t
touch_write
(
uint8_t
reg
,
uint8_t
val
)
{
struct
rt_i2c_msg
msgs
;
rt_uint8_t
buf
[
2
]
=
{
reg
,
val
};
msgs
.
addr
=
TSC_I2C_ADDR
;
msgs
.
flags
=
RT_I2C_WR
;
msgs
.
buf
=
buf
;
msgs
.
len
=
2
;
if
(
rt_i2c_transfer
(
stmpe811_i2c_bus
,
&
msgs
,
1
)
==
1
)
{
return
RT_EOK
;
}
else
{
return
-
RT_ERROR
;
}
}
/**
\fn int32_t Touch_Initialize (void)
\brief Initialize touchscreen
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
static
rt_err_t
stmpe811_touch_init
(
rt_device_t
dev
)
{
stmpe811_i2c_bus
=
rt_i2c_bus_device_find
(
"touch"
);
// ptrI2C->Initialize (NULL);
// ptrI2C->PowerControl(ARM_POWER_FULL);
// ptrI2C->Control (ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
// ptrI2C->Control (ARM_I2C_BUS_CLEAR, 0);
touch_write
(
STMPE811_SYS_CTRL1
,
0x02
);
/* Reset Touch-screen controller */
rt_thread_mdelay
(
10
);
/* Wait 10ms */
touch_write
(
STMPE811_SYS_CTRL2
,
0x0C
);
/* Enable TSC and ADC */
touch_write
(
STMPE811_ADC_CTRL1
,
0x68
);
/* Set sample time , 12-bit mode */
rt_thread_mdelay
(
1
);
/* Wait 1ms */
touch_write
(
STMPE811_ADC_CTRL2
,
0x01
);
/* ADC frequency 3.25 MHz */
touch_write
(
STMPE811_TSC_CFG
,
0xC2
);
/* Detect delay 10us,
Settle time 500us */
touch_write
(
STMPE811_FIFO_TH
,
0x01
);
/* Threshold for FIFO */
touch_write
(
STMPE811_FIFO_STA
,
0x01
);
/* FIFO reset */
touch_write
(
STMPE811_FIFO_STA
,
0x00
);
/* FIFO not reset */
touch_write
(
STMPE811_TSC_FRACTION_Z
,
0x07
);
/* Fraction z */
touch_write
(
STMPE811_TSC_I_DRIVE
,
0x01
);
/* Drive 50 mA typical */
touch_write
(
STMPE811_GPIO_AF
,
0x00
);
/* Pins are used for touchscreen */
touch_write
(
STMPE811_TSC_CTRL
,
0x01
);
/* Enable TSC */
return
0
;
}
/**
\fn int32_t Touch_Uninitialize (void)
\brief De-initialize touchscreen
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
int32_t
touch_uninitialize
(
void
)
{
touch_write
(
STMPE811_SYS_CTRL1
,
0x02
);
/* Reset Touch-screen controller */
return
0
;
}
/**
\fn int32_t Touch_GetState (TOUCH_STATE *pState)
\brief Get touchscreen state
\param[out] pState pointer to TOUCH_STATE structure
\returns
- \b 0: function succeeded
- \b -1: function failed
*/
int32_t
touch_get_state
(
struct
touch_state
*
state
)
{
uint8_t
val
;
uint8_t
num
;
uint8_t
xyz
[
4
];
int32_t
res
;
struct
rt_i2c_msg
msgs
[
2
];
/* Read touch status */
res
=
touch_read
(
STMPE811_TSC_CTRL
,
&
val
);
if
(
res
<
0
)
return
-
1
;
state
->
pressed
=
(
val
&
(
1
<<
7
))
?
1
:
0
;
if
(
state
->
pressed
)
{
val
=
STMPE811_TSC_DATA
;
/* If FIFO overflow, discard all samples except the last one */
res
=
touch_read
(
STMPE811_FIFO_SIZE
,
&
num
);
if
(
res
<
0
||
num
==
0
)
return
-
1
;
while
(
num
--
)
{
msgs
[
0
].
addr
=
TSC_I2C_ADDR
;
msgs
[
0
].
flags
=
RT_I2C_WR
;
msgs
[
0
].
buf
=
&
val
;
msgs
[
0
].
len
=
1
;
//rt_i2c_transfer(stmpe811_i2c_bus, &msgs, 1);
//ptrI2C->MasterTransmit (TSC_I2C_ADDR, &val, 1, true);
//while (ptrI2C->GetStatus().busy);
msgs
[
1
].
addr
=
TSC_I2C_ADDR
;
msgs
[
1
].
flags
=
RT_I2C_RD
;
msgs
[
1
].
buf
=
xyz
;
msgs
[
1
].
len
=
4
;
rt_i2c_transfer
(
stmpe811_i2c_bus
,
msgs
,
2
);
//ptrI2C->MasterReceive (TSC_I2C_ADDR, xyz, 4, false);
//while (ptrI2C->GetStatus().busy);
}
state
->
x
=
(
int16_t
)((
xyz
[
0
]
<<
4
)
|
((
xyz
[
1
]
&
0xF0
)
>>
4
));
state
->
y
=
(
int16_t
)
(
xyz
[
2
]
|
((
xyz
[
1
]
&
0x0F
)
<<
8
));
}
else
{
/* Clear all data in FIFO */
touch_write
(
STMPE811_FIFO_STA
,
0x1
);
touch_write
(
STMPE811_FIFO_STA
,
0x0
);
}
return
0
;
}
void
touch_show_state
()
{
int16_t
x
;
int16_t
y
;
struct
touch_state
ts
;
touch_get_state
(
&
ts
);
x
=
(
3706
-
ts
.
x
)
/
14
;
y
=
(
-
461
+
ts
.
y
)
/
10
.
5
;
rt_kprintf
(
"[drv_touch] touch_show_state, x: %d, y: %d, pressed: %d, padding: %d
\n
"
,
ts
.
x
,
ts
.
y
,
ts
.
pressed
,
ts
.
padding
);
rt_kprintf
(
"[drv_touch] touch_show_state, phy x: %d, phy y: %d
\n
"
,
x
,
y
);
}
MSH_CMD_EXPORT
(
touch_show_state
,
show
screen
coordinate
in
touching
);
static
int
rt_hw_touch_init
(
void
)
{
static
struct
rt_device
touch
;
/* init device structure */
touch
.
type
=
RT_Device_Class_Unknown
;
touch
.
init
=
stmpe811_touch_init
;
touch
.
user_data
=
RT_NULL
;
/* register touch device to RT-Thread */
rt_device_register
(
&
touch
,
"touch"
,
RT_DEVICE_FLAG_RDWR
);
return
RT_EOK
;
}
INIT_BOARD_EXPORT
(
rt_hw_touch_init
);
bsp/stm32f429-disco/drivers/drv_touch.h
0 → 100644
浏览文件 @
db16cada
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-10-03 xuzhuoyi first implementation.
*/
#ifndef __DRV_TOUCH_H__
#define __DRV_TOUCH_H__
#include <stdint.h>
/* Register addresses */
#define STMPE811_CHIP_ID 0x00
#define STMPE811_ID_VER 0x02
#define STMPE811_SYS_CTRL1 0x03
#define STMPE811_SYS_CTRL2 0x04
#define STMPE811_SPI_CFG 0x08
#define STMPE811_INT_CTRL 0x09
#define STMPE811_INT_EN 0x0A
#define STMPE811_INT_STA 0x0B
#define STMPE811_GPIO_EN 0x0C
#define STMPE811_GPIO_INT_STA 0x0D
#define STMPE811_ADC_INT_EN 0x0E
#define STMPE811_ADC_INT_STA 0x0F
#define STMPE811_GPIO_SET_PIN 0x10
#define STMPE811_GPIO_CLR_PIN 0x11
#define STMPE811_GPIO_MP_STA 0x12
#define STMPE811_GPIO_DIR 0x13
#define STMPE811_GPIO_ED 0x14
#define STMPE811_GPIO_RE 0x15
#define STMPE811_GPIO_FE 0x16
#define STMPE811_GPIO_AF 0x17
#define STMPE811_ADC_CTRL1 0x20
#define STMPE811_ADC_CTRL2 0x21
#define STMPE811_ADC_CAPT 0x22
#define STMPE811_ADC_DATA_CH0 0x30
#define STMPE811_ADC_DATA_CH1 0x32
#define STMPE811_ADC_DATA_CH2 0x34
#define STMPE811_ADC_DATA_CH3 0x36
#define STMPE811_ADC_DATA_CH4 0x38
#define STMPE811_ADC_DATA_CH5 0x3A
#define STMPE811_ADC_DATA_CH6 0x3C
#define STMPE811_ADC_DATA_CH7 0x3E
#define STMPE811_TSC_CTRL 0x40
#define STMPE811_TSC_CFG 0x41
#define STMPE811_WDW_TR_X 0x42
#define STMPE811_WDW_TR_Y 0x44
#define STMPE811_WDW_BL_X 0x46
#define STMPE811_WDW_BL_Y 0x48
#define STMPE811_FIFO_TH 0x4A
#define STMPE811_FIFO_STA 0x4B
#define STMPE811_FIFO_SIZE 0x4C
#define STMPE811_TSC_DATA_X 0x4D
#define STMPE811_TSC_DATA_Y 0x4F
#define STMPE811_TSC_DATA_Z 0x51
#define STMPE811_TSC_FRACTION_Z 0x56
#define STMPE811_TSC_DATA_XYZ 0x57
#define STMPE811_TSC_DATA 0xD7
#define STMPE811_TSC_I_DRIVE 0x58
#define STMPE811_TSC_SHIELD 0x59
#define STMPE811_TEMP_CTRL 0x60
#define STMPE811_TEMP_DATA 0x61
#define STMPE811_TEMP_TH 0x62
/* Touch state */
struct
touch_state
{
int16_t
x
;
///< Position X
int16_t
y
;
///< Position Y
uint8_t
pressed
;
///< Pressed flag
uint8_t
padding
;
};
int32_t
touch_get_state
(
struct
touch_state
*
state
);
#endif
/* __DRV_TOUCH_H__ */
bsp/stm32f429-disco/drivers/usart.c
浏览文件 @
db16cada
/*
* File : usart.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
bsp/stm32f429-disco/drivers/usart.h
浏览文件 @
db16cada
/*
* File : usart.h
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2009, RT-Thread Development Team
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rt-thread.org/license/LICENSE
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
...
...
bsp/stm32f429-disco/project.uvprojx
浏览文件 @
db16cada
此差异已折叠。
点击以展开。
bsp/stm32f429-disco/readme.md
浏览文件 @
db16cada
...
...
@@ -20,6 +20,8 @@ STM32F429I-DISCOVERY 开发板使用高性能 MCU STM32F429,可以用于实现
|LED| 6 个 |
|按键| 2 个 |
本 BSP 已测试支持 RT-Thread GUIEngine 和 Littlevgl,可以使用 env 工具安装相应的 Package。
## 2. 编译说明
STM32F429-DISCO 板级包支持 MDK4﹑MDK5﹑IAR 开发环境和 GCC 编译器,以下是具体版本信息:
...
...
@@ -61,13 +63,16 @@ finsh />
| 驱动 | 支持情况 | 备注 |
| ------ | ---- | :------: |
| USART | 支持 | USART1/2/3 |
| SPI | 支持 | |
|
LCD | 支持 | 支持 FrameBuffer 模式 LCD 显示
|
| SPI | 支持 |
SPI5
|
|
IIC | 支持 | IIC3
|
| SDRAM | 支持 | |
| LCD | 支持 | 支持 FrameBuffer 模式 LCD 显示 |
| 触摸屏 | 支持 | IIC 接口 STMPE811 |
| USB OTG Host| 即将支持 | 预计 2018/11 |
| USB OTG Device| 未支持 | |
| GPIO | 未支持 | |
| IIC | 未支持 | |
| L3GD20 | 未支持 | |
| USB OTG | 未支持 | |
## 5. 联系人信息
...
...
bsp/stm32f429-disco/rtconfig.h
浏览文件 @
db16cada
...
...
@@ -75,13 +75,20 @@
#define RT_USING_DEVICE_IPC
#define RT_PIPE_BUFSZ 512
#define RT_USING_SERIAL
#define RT_USING_I2C
#define RT_USING_I2C_BITOPS
#define RT_USING_PIN
/* Using WiFi */
/* Using USB */
/* POSIX layer and C standard library */
#define RT_USING_LIBC
#define RT_USING_POSIX
/* Network */
...
...
@@ -147,7 +154,10 @@
/* example package: hello */
#define RT_USING_ILI9341_LCD
#define RT_USING_STMPE811_TOUCH
#define RT_USING_EXT_SDRAM
#define RT_USING_UART1
#define RT_USING_I2C3
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录