-
串口触摸屏驱动,串口触摸屏驱动
2018-09-13 10:36:37很少用到的串口触摸屏驱动,本驱动本人工作中移植的,可以正常使。很少用到的串口触摸屏驱动,本驱动本人工作中移植的,可以正常使。 -
最新USB COM 串口 触摸屏驱动及说明
2013-05-11 18:10:21最新USB COM 串口 触摸屏驱动及说明1375 -
【linux】imx6开发板上配置串口触摸屏驱动
2020-01-17 16:48:10cp -f ./ touchattach /usr/bin 配置开机自启动触控屏幕 , 在/etc/loacl.rc 加入: modprobe rtouch touchattach -rtouch --daemon /dev/ttyXXX # XXX根据实际情况而定 将触摸屏校正程序LinearAp拷贝值目标机的/usr/...- 开启Framebuffer。
# make menuconfig [*]VGA text console [*]Video mode selection support <*> Framebuffer Console support
- 将安装包/rtouch/目录内的"rtouch.c" 复制到"/kernel source code/drivers/input/touchscreen/"目录内。
- 编辑"/kernel source code/drivers/input/touchscreen/Makefile" , 加入:
obj-$(CONFIG_TOUCHSCREEN_RTOUCH) += rtouch.o
- 编辑"/kernel source code/drivers/input/touchscreen/kconfig" , 加入:
config TOUCHSCREEN_RTOUCH tristate "Risintech serial touchscreens" select SERIO help Say Y here if you have a Risintech serial touchscreen connected to your system. If unsure, say N. To compile this driver as a module, choose M here: the module will be called rtouch.
- 编辑kernel 的".config" 将SERIO 相关参数打开:
CONFIG_SERIO=y CONFIG_SERIO_SERPORT=y CONFIG_SERIO_RAW=y CONFIG_INPUT_TOUCHSCREEN=y
并增加下行:
CONFIG_TOUCHSCREEN_RTOUCH=y
- 编译kernel。
- 并用新内核制作根文件系统。
- 将新根文件系统烧写到目标机上。
- 在交叉编译机上执行安装包内/touchattach/目录内的cp.sh 编译touchattach,请自行修改cp.sh 加上自己的cross compiler。
- 将编译好的touchattach从交叉编译机复制到目标机的/usr/bin/下。
cp -f ./ touchattach /usr/bin
- 配置开机自启动触控屏幕 , 在/etc/loacl.rc 加入:
modprobe rtouch touchattach -rtouch --daemon /dev/ttyXXX # XXX根据实际情况而定
- 将触摸屏校正程序LinearAp拷贝值目标机的/usr/bin/。
- 执行校正程序,但是报错“touchscreen device not found!”
# LinearAp
-
触摸屏驱动+串口驱动
2013-06-27 20:35:05触摸屏驱动+串口驱动 -
多点触摸串口触摸屏调试——添加驱动部分(一)
2018-12-12 20:48:15最近调试一个红外触摸屏,既有USB,又有串口两种协议,...2. 切换串口触摸的点数 static void gen_ir_process_data(struct gen_ir *pgen_ir) { struct input_dev *dev = pgen_ir->dev; char num = pgen_...最近调试一个红外触摸屏,既有USB,又有串口两种协议,两种协议都会用到。
1. 需要通过串口发送命令去开关触摸屏的USB 触摸功能
2. 切换串口触摸的点数
static void gen_ir_process_data(struct gen_ir *pgen_ir) { struct input_dev *dev = pgen_ir->dev; char num = pgen_ir->data[41]; char mtouch = 0; unsigned char *buf = pgen_ir->data; for(i=0; i< num; i++){ buf = &(pgen_ir->data[6*i+5]); if(buf[0]==0x03 || (buf[0]==0x02 && touch[i] == 0xff)) { mtouch = 1; touch[i] = buf[0]; } else if(buf[0]==0x02 && touch[i] == 0x03){ mtouch = 0; touch[i] = 0xFF; } if(mtouch) { input_report_abs(dev, ABS_MT_POSITION_X, GEN_IR_GET_XC(buf)); input_report_abs(dev, ABS_MT_POSITION_Y, GEN_IR_GET_YC(buf)); input_mt_sync(dev); } else { if(num == 1) input_mt_sync(dev); } } input_sync(dev); } static irqreturn_t gen_ir_interrupt(struct serio *serio, unsigned char data, unsigned int flags) { struct gen_ir* pgen_ir = serio_get_drvdata(serio); bool error = false; char i = 0; static unsigned int sum = 0; static bool untouch = false; pgen_ir->data[pgen_ir->idx] = data; switch(pgen_ir->idx) { case 0: if(pgen_ir->data[0] != 0x1F) error = true; break; case 1: if(pgen_ir->data[1] != 0xF7) error = true; break; case 2: if(pgen_ir->data[2] != 0x2B && pgen_ir->data[2] != 0xFC) error = true; break; case 3: if(pgen_ir->data[3] != 0 && pgen_ir->data[3] != 0x30) error = true; break; default: break; } if(!error) sum += data; else sum = 0; if((pgen_ir->idx++) == 42 || error) { if( (unsigned char)(sum - pgen_ir->data[42]) == pgen_ir->data[42]) gen_ir_process_data(pgen_ir); pgen_ir->idx = 0; sum = 0; untouch = false; } return IRQ_HANDLED; }
static void gen_ir_disconnect(struct serio *serio) { struct gen_ir* pgen_ir = serio_get_drvdata(serio); input_get_device(pgen_ir->dev); input_unregister_device(pgen_ir->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(pgen_ir->dev); kfree(pgen_ir); }
static int gen_ir_connect(struct serio *serio, struct serio_driver *drv) { struct gen_ir *pgen_ir; struct input_dev *input_dev; int err; pgen_ir = kzalloc(sizeof(struct gen_ir), GFP_KERNEL); input_dev = input_allocate_device(); if (!pgen_ir || !input_dev) { err = -ENOMEM; goto fail1; } pgen_ir->serio = serio; pgen_ir->dev = input_dev; snprintf(pgen_ir->phys, sizeof(pgen_ir->phys), "%s/input0", serio->phys); input_dev->name = "Serial TouchScreen"; input_dev->phys = pgen_ir->phys; input_dev->id.bustype = BUS_RS232; input_dev->id.vendor = 0x1ff7; input_dev->id.product = 0x0013; input_dev->id.version = 0x0001; input_dev->dev.parent = &serio->dev; set_bit(EV_SYN, input_dev->evbit); set_bit(EV_ABS, input_dev->evbit); set_bit(ABS_MT_POSITION_X, input_dev->absbit); set_bit(ABS_MT_POSITION_Y, input_dev->absbit); set_bit(INPUT_PROP_DIRECT, input_dev->propbit); //这个属性必须设,否则触摸点只是一个圆圈,并且触点坐标跟指示位置还对不上 input_set_abs_params(pgen_ir->dev, ABS_MT_POSITION_X, GEN_IR_MIN_XC, GEN_IR_MAX_XC, 0, 0); input_set_abs_params(pgen_ir->dev, ABS_MT_POSITION_Y, GEN_IR_MIN_YC, GEN_IR_MAX_YC, 0, 0); serio_set_drvdata(serio, pgen_ir); err = serio_open(serio, drv); if (err) goto fail2; err = input_register_device(pgen_ir->dev); if (err) goto fail3; return 0; ............. }
-
驱动 2.4'' TFT 串口触摸屏
2017-03-25 15:21:00最近一直在ESP8266上折腾一块从淘宝上找回来的2.4'' TFT 的串口触摸屏,分辨率是240x320的基于 ILI9341驱动,具体型号是 TJCTM24024-SPI 就是下面的这块。 之前买了一块3.2''的,到手后找线路和驱动时...最近一直在ESP8266上折腾一块从淘宝上找回来的2.4'' TFT 的串口触摸屏,分辨率是240x320的基于 ILI9341驱动,具体型号是 TJCTM24024-SPI 就是下面的这块。
之前买了一块3.2''的,到手后找线路和驱动时才知道是个并口的,要STM32才能正常驱动或者得去个转接块将并口转成SPI,真是坑死哥了!在Google上查了许久发现要在ESP8266上使用彩屏的TFT得选这个小的,找到后果断出手,到货后才发现还是和Google上能快速找到的ESP驱动的资料大相径庭,真是作啊~~~
原因是大多在网上找到的ESP8266接2.8''~2.2''的TFT都是些不带触摸的,问淘宝上的卖家也是一头雾水(丫的根本不懂知道自已卖的是啥)。皇天不负有心人,最终还是让哥给找到了方法!
先来讲讲线路与硬件的连接方法吧,我用的是NodeMCU 以下是它们的连接方式:
MyTouchSPIShield.png(因为找不到TJCTM24024-SPI的fzz文件,所以只能用找资料找到的连接图了,待以后找到了它的fzz再做一个像样的吧。)
库
- AdaFruit_GFX 在Arduino IDE的库管理器中直接安装就行了。
- XPT2046 这个是触摸屏的驱动,得释放到Arduino 的 library目录里面。
- http://nailbuster.com/nailcode/tft28esp.zip 这个库是For ESP8266的TFT触摸驱动,也是释放到Arduino 的Library中。
固件
在上面的 tft28esp.zip 文件中有一些示例,我没有直接去写一些应用与示例而是拿现成的,因为被折腾太久了心急于试试这个屏的显示效果所以直接实行拿来主义,
以下是其中的一个触摸的示例,直接在Arduino IDE 打开上传到NodeMCU里面就可以跑了
#include <Arduino.h> #include <SPI.h> #include <Adafruit_ILI9341esp.h> #include <Adafruit_GFX.h> #include <XPT2046.h> // Modify the following two lines to match your hardware // Also, update calibration parameters below, as necessary // For the esp shield, these are the default. #define TFT_DC 2 #define TFT_CS 15 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); XPT2046 touch(/*cs=*/ 4, /*irq=*/ 5); Adafruit_GFX_Button button; void setup() { delay(1000); Serial.begin(115200); SPI.setFrequency(ESP_SPI_FREQ); tft.begin(); touch.begin(tft.width(), tft.height()); // Must be done before setting rotation Serial.print("tftx ="); Serial.print(tft.width()); Serial.print(" tfty ="); Serial.println(tft.height()); tft.fillScreen(ILI9341_BLACK); // Replace these for your screen module touch.setCalibration(209, 1759, 1775, 273); button.initButton(&tft, 100, 100, 70, 40, ILI9341_DARKCYAN, ILI9341_BLUE, ILI9341_GREENYELLOW, "Clear", 2); button.drawButton(); } static uint16_t prev_x = 0xffff, prev_y = 0xffff; void loop() { uint16_t x, y; if (touch.isTouching()) { touch.getPosition(x, y); // Serial.print("x ="); Serial.print(x); Serial.print(" y ="); Serial.println(y); if (prev_x == 0xffff) { tft.drawPixel(x, y,ILI9341_BLUE); } else { tft.drawLine(prev_x, prev_y, x, y,ILI9341_BLUE); } prev_x = x; prev_y = y; } else { prev_x = prev_y = 0xffff; } button.press(button.contains(x, y)); // tell the button it is pressed // now we can ask the buttons if their state has changed if (button.justReleased()) { tft.fillScreen(ILI9341_BLACK); button.drawButton(); // draw normal } if (button.justPressed()) { button.drawButton(true); // draw invert! } delay(20); }
运行效果如下:
更简单的办法
如果不想测试触摸功能,也可以直接用Adafruit 自带的示例:
打开这个示例后记得要改一下Pin的声明,因为我用的是NodeMCU不是Uno:
// For the Adafruit shield, these are the default. #define TFT_DC 2 #define TFT_CS 5
上传后就可以看到更丰富的测试的效果了:
总的来说,对这个屏还是挺满意的价格也只是36加上运费也就40来块钱的样子,显示速度很流畅,触摸也挺准确的是一个可用来做一些高端IoT项目的可选件。
其它参考
-
linux 串口触摸屏调试记录
2016-04-07 10:26:56这几天在调试串口触摸屏,网上找了下似乎说的都不大清楚,这里记录下. 实现方法网上说有好几种,这里是将串口作为一个serio总线设备,利用linux内核提供serio总线驱动,通过设置对应的串口,调用serport提供的函数将...这几天在调试串口触摸屏,网上找了下似乎说的都不大清楚,这里记录下.
实现方法网上说有好几种,这里是将串口作为一个serio总线设备,利用linux内核提供serio总线驱动,通过设置对应的串口,调用serport提供的函数将串口当做serio总线设备,在驱动里面需要按照serio总线设备驱动的框架来实现,在内核源码drivers/input/touchscreen下提供了两个例子,touchright.c和touchit123.c,可以参考这两个例子编写驱动.我的驱动是在网上抄的,源码如下
只是修改了最后一点,其中egalax_serio_ids中的几个参数在应用程序中需要用到,加上驱动编译内核更新后,此时这个驱动是没有起作用的,需要通过应用程序将串口与之绑定,后才能正常工作./* *Egalax serial touchscreen driver * * Copyright (c) 2004-2016 * * Based on Touchright driver (drivers/input/touchscreen/touchit213.c) * * Zolt??n B??sz??rm??nyi <zboszor@xxxxx> */ /* * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. */ #include <linux/errno.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/input.h> #include <linux/serio.h> #include <linux/init.h> #define DRIVER_DESC "EETI Egalax serial touchscreen driver" MODULE_AUTHOR("Zolt??n B??sz??rm??nyi <zboszor@xxxxx>"); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE("GPL"); /* * Definitions & global arrays. */ #define SERIO_EGALAX 0x3f #define EGALAX_FORMAT_MAX_LENGTH 6 #define EGALAX_RESPONSE_BEGIN_BYTE 0x80 #define EGALAX_FORMAT_PRESSURE_BIT 0x40 #define EGALAX_FORMAT_TOUCH_BIT 0x01 #define EGALAX_FORMAT_RESOLUTION 0x06 #define EGALAX_MIN_XC 0 #define EGALAX_MAX_XC 0x4000 #define EGALAX_MIN_YC 0 #define EGALAX_MAX_YC 0x4000 #define EGALAX_GET_XC(data, resbits, shift) ((((data[1] & (resbits)) << 7) | (data[2] & 0x7f)) << shift) #define EGALAX_GET_YC(data, resbits, shift) ((((data[3] & (resbits)) << 7) | (data[4] & 0x7f)) << shift) #define EGALAX_GET_TOUCHED(data) (EGALAX_FORMAT_TOUCH_BIT & data[0]) /* * Per-touchscreen data. */ struct egalax { struct input_dev *dev; struct serio *serio; int idx; int bytes; int resbits; int shift; unsigned char data[EGALAX_FORMAT_MAX_LENGTH]; char phys[32]; }; static void egalax_process_data(struct egalax *pegalax) { struct input_dev *dev = pegalax->dev; if (++pegalax->idx == pegalax->bytes) { input_report_abs(dev, ABS_X, EGALAX_GET_XC(pegalax->data, pegalax->resbits, pegalax->shift)); input_report_abs(dev, ABS_Y, EGALAX_GET_YC(pegalax->data, pegalax->resbits, pegalax->shift)); //input_report_key(dev, BTN_TOUCH, EGALAX_GET_TOUCHED(pegalax->data)); input_report_abs(dev, ABS_PRESSURE, EGALAX_GET_TOUCHED(pegalax->data)); input_sync(dev); pegalax->idx = 0; } } static irqreturn_t egalax_interrupt(struct serio *serio, unsigned char data, unsigned int flags) { struct egalax *pegalax = serio_get_drvdata(serio); pegalax->data[pegalax->idx] = data; if (EGALAX_RESPONSE_BEGIN_BYTE & pegalax->data[0]) { pegalax->bytes = (EGALAX_FORMAT_PRESSURE_BIT & pegalax->data[0] ? 6 : 5); switch ((EGALAX_FORMAT_RESOLUTION & pegalax->data[0]) >> 1) { case 0: pegalax->resbits = 0x0f; pegalax->shift = 3; break; case 1: pegalax->resbits = 0x1f; pegalax->shift = 2; break; case 2: pegalax->resbits = 0x3f; pegalax->shift = 1; break; default: pegalax->resbits = 0x7f; pegalax->shift = 0; break; } egalax_process_data(pegalax); } else dev_dbg(&serio->dev, "unknown/unsynchronized data: %x\n", pegalax->data[0]); return IRQ_HANDLED; } static void egalax_disconnect(struct serio *serio) { struct egalax *pegalax = serio_get_drvdata(serio); input_get_device(pegalax->dev); input_unregister_device(pegalax->dev); serio_close(serio); serio_set_drvdata(serio, NULL); input_put_device(pegalax->dev); kfree(pegalax); } /* * egalax_connect() is the routine that is called when someone adds a * new serio device that supports egalax protocol and registers it as * an input device. This is usually accomplished using inputattach. */ static int egalax_connect(struct serio *serio, struct serio_driver *drv) { struct egalax *pegalax; struct input_dev *input_dev; int err; pegalax = kzalloc(sizeof(struct egalax), GFP_KERNEL); input_dev = input_allocate_device(); if (!pegalax || !input_dev) { err = -ENOMEM; goto fail1; } pegalax->serio = serio; pegalax->dev = input_dev; snprintf(pegalax->phys, sizeof(pegalax->phys), "%s/input1", serio->phys); input_dev->name = "EETI eGalaxTouch Serial TouchScreen"; input_dev->phys = pegalax->phys; input_dev->id.bustype = BUS_RS232; input_dev->id.vendor = SERIO_EGALAX; input_dev->id.product = 0; input_dev->id.version = 0x0001; input_dev->dev.parent = &serio->dev; input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); //input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); input_set_abs_params(pegalax->dev, ABS_X, EGALAX_MIN_XC, EGALAX_MAX_XC, 0, 0); input_set_abs_params(pegalax->dev, ABS_Y, EGALAX_MIN_YC, EGALAX_MAX_YC, 0, 0); input_set_abs_params(pegalax->dev, ABS_PRESSURE, 0, 1, 0, 0); serio_set_drvdata(serio, pegalax); err = serio_open(serio, drv); if (err) goto fail2; err = input_register_device(pegalax->dev); if (err) goto fail3; return 0; fail3: serio_close(serio); fail2: serio_set_drvdata(serio, NULL); fail1: input_free_device(input_dev); kfree(pegalax); return err; } /* * The serio driver structure. */ static struct serio_device_id egalax_serio_ids[] = { { .type = SERIO_RS232, .proto = SERIO_EGALAX, .id = SERIO_ANY, .extra = SERIO_ANY, }, { 0 } }; MODULE_DEVICE_TABLE(serio, egalax_serio_ids); static struct serio_driver egalax_drv = { .driver = { .name = "egalax", }, .description = DRIVER_DESC, .id_table = egalax_serio_ids, .interrupt = egalax_interrupt, .connect = egalax_connect, .disconnect = egalax_disconnect, }; /* * The functions for inserting/removing us as a module. */ static int __init egalax_init(void) { return serio_register_driver(&egalax_drv); } static void __exit egalax_exit(void) { serio_unregister_driver(&egalax_drv); } module_init(egalax_init); module_exit(egalax_exit);
应用程序如下,这个代码网上也有
/************************************* NAME:seriotouch.c *************************************/ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <linux/fs.h> #include <errno.h> #include <string.h> #include <linux/fb.h> #include <malloc.h> #include <sys/mman.h> #include <termio.h> #include <linux/serio.h> #define SERIO_ANY 0xff #define SERIO_EGALAX 0x3f int main(int argc, char* argv[]) { int dev,ret; char comdev[20]; int ldisc; unsigned long type; struct termios option; int fd = -1; if(argc != 2) { printf("-----------------------------------------\n"); printf("\nUsage: %s [serial device(1-5)]\n", argv[0]); printf("Example: %s 5 n", argv[0]); printf("-----------------------------------------\n"); return 0; } dev = strtol(argv[1],NULL,10); sprintf(comdev,"/dev/ttyAMA%d",dev); fd = open(comdev,O_RDWR|O_NONBLOCK|O_NOCTTY); if (fd < 0) { perror(comdev); exit(1); } tcgetattr(fd, &option); option.c_iflag = IGNPAR | IGNBRK; option.c_cflag = HUPCL | CS8 | CREAD | CLOCAL | B9600; option.c_cc[VMIN] = 1; option.c_cc[VTIME] = 0; cfsetispeed(&option,B9600); cfsetospeed(&option,B9600); ret = tcsetattr(fd, TCSANOW, &option); if(ret < 0) { perror("TCSANOW"); exit(1); } ldisc = N_MOUSE; ret = ioctl(fd,TIOCSETD,&ldisc); if(ret) { perror("TIOCSETD"); } type = SERIO_EGALAX | (SERIO_ANY << 8) | (SERIO_ANY << 16); ret = ioctl(fd,SPIOCSTYPE, &type); if(ret) { perror("SPIOCSTYPE"); } read(fd,NULL,0); //close(fd); return 0; }
需要注意的是,应用程序最后这个read一定要执行,不然驱动里不会进行连接.
编译生成可执行文件seriotouch
应用程序配制完串口后需要与之前的驱动连接,看设置spiocstype的设置,需要保证这里的几个参数与驱动进行对应。
系统启动后执行seriotouch 5 &
后面这个5对应的是串口号,执行这个后会看到驱动里的connect执行了,同时会生成一个input节点,如下图
此时将tslib里的tsdevice修改为这个,进行校准后,就可以正常使用了
-
多点触摸串口触摸屏调试——添加native service,JNI, 到android 调用(二)
2018-12-12 21:49:41添加了触摸屏的驱动之后,还无法绑定到具体哪个串口,开机后还无法起作用 需要open 某个/dev/ttySx设备, 设置成N_MOUSE,再read 一下才能跟驱动绑定起来 由于在某些情况下还要写串口,开关USB 的触摸功能,就直接... -
串口、usb、i2c触摸屏驱动-penmount系列(包括tslib)
2018-03-22 10:07:021)PenMount Device Driver for Linux 2)tslib resource 3)some exmples of touchscreen 4)Android penmount driver -
Android 4.0 触摸屏驱动调试记录
2013-05-24 13:43:34软件平台:Android 4.0 问题描述: ...触摸屏驱动也在2.3平台上能正 常使用,为什么移植到4.0上就出现问题了呢? 测试步骤: 1、getevent查看事件发现事件上报正常; 2、加串口打印,发现触摸点坐 -
android4.1触摸屏驱动怎么移植?
2012-11-12 16:25:50我移植android4.1.2触摸屏驱动;下载的android系统编译完成后直接连接触摸屏getevent打印信息正常:如下 串口也可以完全打印触摸屏的信息! 我的idc文件配置是我在google官网上拷贝的;根据android4.0开发文档... -
Android 4.0 触摸屏驱动调试记录 及 git patch相关内容
2013-03-27 18:26:34软件平台:Android 4.0 问题描述: ...触摸屏驱动也在2.3平台上能正 常使用,为什么移植到4.0上就出现问题了呢? 测试步骤: 1、getevent查看事件发现事件上报正常; 2、加串口打印,发现触摸点坐 -
STM32L476应用开发之四:触摸屏驱动与数据交互
2017-09-29 22:16:00我们的便携式气体分析仪,需要人来操作和配置,所以触摸屏就是我们必然的一个选择。本次我们计划采用3.5寸显示屏,串口通讯。 1、硬件设计 前面我们实验了串行通讯,这次来使用屏实现显示。这次我们计划使用的3.5... -
基于串口的电阻式五线触摸屏在VxWorks 6.8/6.9 系统下的驱动支持
2018-08-01 10:12:31电阻式触摸屏,是一个很古老的产品,在早期的PDA上,我们看到过它的身影(90后,00后估计没有见过)。使用起来,需要先校准,然后才能正常使用,使用的过程中需要用力按压触摸屏,否则不会动作,这是由于其构造机理... -
树莓派4B—LCD触摸屏和硬件串口配置
2020-08-13 09:56:001.LCD触摸屏直接下载官网驱动,这里选用的是3.5寸显示屏,解压后直接运行 sudo ./LCD35-show 然后重启。 注意:一定要先安装LCD驱动,因为安装驱动会修改/boot/config.txt文件,如果先设置串口,再安装LCD屏的话,... -
android触摸屏ar1011驱动
2019-05-21 06:50:07ar1011是TI出的一块串口类型的触摸控制芯片,支持4,5,8线屏。接口是串口的,这个芯片有点贵,但支持温度广。原理上是通过串口上传x,y,pre值。 1.在kernel下,把driver配置编译进去。具体修改源码.linux 和android ... -
STM32驱动迪文触摸屏
2014-09-02 11:02:39用STM32F103VC驱动北京迪文工业串口屏实现文本显示
-
开关电源设计资料大全,包括多个DC/DC电源硬件设计原理图及电源文档资料.zip
-
MySQL 四类管理日志(详解及高阶配置)
-
C/C++反汇编解密
-
把计算机“防火墙”说的通俗易懂,这篇文章做到了
-
anaconda使用
-
13. 三角形判定.cpp
-
用微服务spring cloud架构打造物联网云平台
-
C# 获取动态key的json对象的值案例
-
golang网络编程基础知识:OSI网络模型、IP、端口号详解
-
JavaSE之命令行传递参数
-
雷普.rar电气设备选型资料大全 (适合刚刚入行的电气工程师对设备进行选型规划)详解 报价
-
Unity RUST 逆向安全开发
-
使用 Linux 平台充当 Router 路由器
-
基恩士.电气设备选型资料大全 (适合刚刚入行的电气工程师对设备进行选型规划)详解 报价
-
全球光通信产业白皮书:F5G赋能智慧城市进入全光时代-安永.pdf
-
NFS 网络文件系统
-
SQLAlchemy数据库实战-学习笔记-1
-
Samba 服务配置与管理
-
两套《会计学原理》李永言期中考试试卷(含答案).pdf
-
2021-03-01 lenet