此文章介绍swm32s基于5寸800*480分辨率液晶屏+gt9157触摸芯片的驱动实现过程。
硬件
mcu:swm32sret6
tft-lcd:5.0寸 800*480电容屏
触摸芯片:gt9157
mcu
swm32s 内嵌 arm cortex-m4 控制器,片上包含精度为 1%以内的 20mhz/40mhz 时钟,可通过 pll 倍频到 120mhz 时钟,提供多种内置 flash/sram 大小可供选择,支持 isp(在系统编程)操作及 iap(在应用编程)。
外设串行总线包括 1 个 can 接口,多个 uart 接口、 spi 通信接口(支持主/从选择)及 i2c 接口(支持主/从选择)。此外还包括 1 个 32 位看门狗定时器, 6 组 32 位通用定时器, 1 组 32 位专用脉冲宽度测量定时器, 12 通道 16 位的 pwm 发生器, 2 个 8 通道 12 位、 1msps 的逐次逼近型adc 模块, 1 个 sdio 接口模块, tft-lcd 液晶驱动模块以及 rtc 实时时钟、 sramc、 sdramc、norflc 接口控制模块,同时提供欠压检测及低电压复位功能。
触摸芯片
gt9157拥有26个驱动通道和14个感应通道,以满足更高的touch 精度要求。同时支持最先进的短距离传输功能hotknot。gt9157可同时识别5个触摸点位的实时准确位置,移动轨迹及触摸面积。并可根据主控需要,读取相应点数的触摸信息,其内部结构如上图所示。
gt9157触控芯片有两个备选的i2c通讯地址,这是由芯片的上电时序决定,如图所示。上 电时序有reset 引脚和int引脚生成,若reset引脚从低电电平转变到高电平期间,int 引脚为高电平的时候,触控芯片使用的i2c设备地址为0x28/0x29(8位写、读地址),7位地址为0x14;若reset引脚从低电电平转变到高电平期间,int 引脚一直为低电平,则触控芯片使用的i2c设备地址为0xba/0xbb(8位写、读地址),7位地址为0x5d。
代码
红色框内文件相对重要并解读
( 1) bsp_i2c_gt9xx.c 文件的解读
#include bsp_i2c_gt9xx.h
#include string.h
#include bsp_systick.h
#include
void i2c_mst_init(void)
{
i2c_initstructure i2c_initstruct;
port_init(porta, pin4, funmux0_i2c0_scl, 1); // gpioa.4配置为i2c0 scl引脚
port_init(porta, pin5, funmux1_i2c0_sda, 1); // gpioa.5配置为i2c0 sda引脚
i2c_initstruct.master = 1;
i2c_initstruct.addr7b = 1;
i2c_initstruct.mstclk = 400000;
i2c_initstruct.mstien = 0;
i2c_init(i2c0, &i2c_initstruct);
i2c_open(i2c0);
}
void bsp_gt9xx_initrst(void)
{
// 第一阶段设置端口,并拉低两个端口
gpio_init(gpio_port_gt_rst, gpio_pin_gt_rst, 1, 0, 0); // 复位脚 输出
gpio_init(gpio_port_gt_int, gpio_pin_gt_int, 1, 0, 0); // 中断脚
gpio_clrbit(gpioc, pin3);
gpio_clrbit(gpioc, pin2); // 拉低两个端口的电平,准备复位
rt_thread_delay(10);
// 第二阶段复位芯片
gpio_setbit(gpioc, pin3); // 拉高开始复位芯片
rt_thread_delay(10);
// 第三阶段设置中断引脚为 中断功能
gpio_init(gpioc, pin2, 0, 0, 0);
exti_init(gpioc, pin2, exti_rise_edge); // 上升沿触发中断
i2c_mst_init(); // 硬件iic端口初始化
rt_thread_delay(10);
}
void gt9xx_irqenable(void)
{
nvic_enableirq(gpioc2_irqn); // 使能gpioc.2端口中断
exti_open(gpioc, pin2); // 打开外部中断
}
void gt9xx_irqdisable(void)
{
nvic_disableirq(gpioc2_irqn); // 禁止gpioc.2端口中断
exti_close(gpioc, pin2); // 关闭外部中断
gpio_init(gpioc, pin2, 1, 0, 1); // 回到普通输出端口
gpio_clrbit(gpioc, pin2);
}
/**********************************************************************************************************************
* 函数名称: bsp_wrnumbyte()
* 功能说明: iic写num个字节
* 输 入: reg 寄存器地址,*p数据,wrbytenum写入的数据个数
* 输 出: 0,正常 其他,失败
* 注意事项:
**********************************************************************************************************************/
uint8_t bsp_gt9xx_wrreg(uint8_t idaddr,uint8_t *p,uint8_t wrbytenum)
{
i2c0->mstdat = idaddr | 0; // 发送器件地址+写命令
i2c0->mstcmd = (1 << i2c_mstcmd_sta_pos) |
(1 mstcmd = (1 << i2c_mstcmd_rd_pos) |
(1 << i2c_mstcmd_ack_pos) |
(1 << i2c_mstcmd_sto_pos);
这三行程序,当我们在跑该程序的时候, 一般是先写寄存器,再读数,而此时如果没有这三行程序,会把下一次的读数据和写寄存器混淆,导致 gt9157 芯片不认识此协议。当我们加了之后,就有结束,有开始,继而芯片能够识别此协议。
现象
复位 初始化后串口打印,可以看到x轴800 ,y轴480
进行一个点的触摸 id:0 定位是(257,237) 宽度62
进行两个点的触摸 可以看到id0 id1
进行五个点的触摸 可以看到id0 id1 id2 id3 id4
附录:
主程序代码:
#include bsp_uart.h
#include rtthread.h
#include ugui.h
#include bsp_gt9xx.h
extern void gtp_touchprocess(void);
ug_gui gui;
uint32_t lcd_buffer[800*480 * 2 / 4] __attribute__((at(sdramm_base))) = {0};
void _hw_drawpoint(ug_s16 x, ug_s16 y, ug_color c)
{
lcd_buffer[y*400 + x/2] &= ~(0xffff << ((x%2) == 0 ? 0 : 16));
lcd_buffer[y*400 + x/2] |= (c
lcd_start(lcd);
ug_init(&gui,(void(*)(ug_s16,ug_s16,ug_color))_hw_drawpoint,800,480);
gtp_init_panel();
while(1)
{
}
}
int main(void)
{
static struct rt_thread test_thread; // 线程控制块
printf(swm320 );
// 创建静态线程
rt_thread_init(&test_thread, // 线程控制块
test, // 线程名字,在shell里面可以看到
test_thread_entry, // 线程入口函数
rt_null, // 线程入口函数参数
&rt_test_thread_stack[0], // 线程栈起始地址
sizeof(rt_test_thread_stack), // 线程栈大小
5, // 线程的优先级
20); // 线程时间片
rt_thread_startup(&test_thread); // 启动线程
}
void lcd_handler(void)
{
lcd_intclr(lcd);
lcd_start(lcd);
}
void gpioc2_handler(void)
{
exti_clear(gpioc, pin2); // 清楚中断标志位
gtp_touchprocess();
}
胶囊生产设备远程维护解决方案,在家也能控制设备
机器视觉检测的概念及应用优势
KINAX角位变送器在水位控制的应用
孙丕恕:工业互联网必将为实体经济振兴、为中国经济腾飞插上翅膀
图解大模型训练之:Megatron源码解读2,模型并行
SWM32S基于GT9157的触摸芯片驱动
均衡电流,实现车规智能驱动器的最佳性能
酷派老将遭遇乐视清洗 众高管离职加盟ivvi
微软MR原型创作工具Maquette:针对PC VR头显,能在VR中创作3D内容
在5G技术的赋能下智慧医疗将大有可为
关于高频淬火的常见缺陷,它的产生原因是什么
马化腾马云布局VR产业 VR技术基础有望在5G时代迎来质变
电动汽车特斯拉股价大跌8.6% 马斯克再次跌落世界首富宝座
声发射的基本原理、特点及应用
双声道d类音频功放芯片的详细介绍
PESD1LIN供应商 杭州东沃电子
一起来了解Self-test的重要性!
黑鲨2Pro 8GB+128GB版开启预售 售价2699元
奥迪一汽新能源汽车有限公司CIO等一行到访启明信息调研
新飞成立60周年的今天,新飞电器破产拍卖