S3C2440 触摸屏驱动(针对Android版)

2024-06-13  

和原来的触摸屏驱动区别不是很大,增加了report函数来将事件发送到应用层。

驱动结构:

很简单的字符设备+平台设备驱动,总的结构来说,主要四个部分构成:

probe

remove

resume

suspend

工作机制则是注册设备,然后发生ts按下事件后产生ts中断以及adc中断,获得按下坐标。

没有读写函数,重点就是在两个中断处理函数上。

1,平台设备架构部分分析:

probe函数:

流程:ts基址的重映射->获得并启动时钟->ADCCON、ADCDLY、ADCTSC的初始化->初始化input设备完善ts结构体->建立ts_filter_chain->申请中断->注册input设备(2.6.27后为event0不再是ts0)。


static int __init s3c2410ts_probe(struct platform_device *pdev)
{
    int rc;
    struct s3c2410_ts_mach_info *info;
    struct input_dev *input_dev;
    int ret = 0;

    dev_info(&pdev->dev, "Startingn");

    info = (struct s3c2410_ts_mach_info *)pdev->dev.platform_data;//获得平台设备数据


    if (!info)
    {
        dev_err(&pdev->dev, "Hm... too bad: no platform data for tsn");
        return -EINVAL;
    }

#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
    printk(DEBUG_LVL "Entering s3c2410ts_initn");
#endif

    adc_clock = clk_get(NULL, "adc");
    if (!adc_clock) {
        dev_err(&pdev->dev, "failed to get adc clock sourcen");
        return -ENOENT;
    }
    clk_enable(adc_clock);

#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
    printk(DEBUG_LVL "got and enabled clockn");
#endif

    base_addr = ioremap(S3C2410_PA_ADC,0x20);//将PA_ADC寄存器重映射到内存上

    if (base_addr == NULL) {
        dev_err(&pdev->dev, "Failed to remap register blockn");
        ret = -ENOMEM;
        goto bail0;
    }


    /* If we acutally are a S3C2410: Configure GPIOs */
    if (!strcmp(pdev->name, "s3c2410-ts"))
        s3c2410_ts_connect();//初始化相关gpio口


    if ((info->presc & 0xff) > 0)
        writel(S3C2410_ADCCON_PRSCEN |
         S3C2410_ADCCON_PRSCVL(info->presc&0xFF),
                         base_addr + S3C2410_ADCCON);
    else
        writel(0, base_addr+S3C2410_ADCCON);

    /* Initialise registers */
    if ((info->delay & 0xffff) > 0)
        writel(info->delay & 0xffff, base_addr + S3C2410_ADCDLY);

    writel(WAIT4INT(0), base_addr + S3C2410_ADCTSC);

    /* Initialise input stuff */
    memset(&ts, 0, sizeof(struct s3c2410ts));
    input_dev = input_allocate_device();

    if (!input_dev) {
        dev_err(&pdev->dev, "Unable to allocate the input devicen");
        ret = -ENOMEM;
        goto bail1;
    }

//初始化input设备

    ts.dev = input_dev;
    ts.dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) |
             BIT_MASK(EV_ABS);
    ts.dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
    input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
    input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
    input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);

    ts.dev->name = s3c2410ts_name;
    ts.dev->id.bustype = BUS_RS232;
    ts.dev->id.vendor = 0xDEAD;
    ts.dev->id.product = 0xBEEF;
    ts.dev->id.version = S3C2410TSVERSION;
    ts.state = TS_STATE_STANDBY;//设置ts状态为就绪

    ts.event_fifo = kfifo_alloc(TS_EVENT_FIFO_SIZE, GFP_KERNEL, NULL);//为event队列申请内存空间

    if (IS_ERR(ts.event_fifo)) {
        ret = -EIO;
        goto bail2;
    }

    /* create the filter chain set up for the 2 coordinates we produce */
    ts.chain = ts_filter_chain_create(pdev, info->filter_config, 2);//针对Android的,建立filter_chain


    if (IS_ERR(ts.chain))
        goto bail2;

    ts_filter_chain_clear(ts.chain);

    /* Get irqs */
    if (request_irq(IRQ_ADC, stylus_action, IRQF_SAMPLE_RANDOM,
                         "s3c2410_action", ts.dev)) {
        dev_err(&pdev->dev, "Could not allocate ts IRQ_ADC !n");
        iounmap(base_addr);
        ret = -EIO;
        goto bail3;
    }
    if (request_irq(IRQ_TC, stylus_updown, IRQF_SAMPLE_RANDOM,
            "s3c2410_action", ts.dev)) {
        dev_err(&pdev->dev, "Could not allocate ts IRQ_TC !n");
        free_irq(IRQ_ADC, ts.dev);
        iounmap(base_addr);
        ret = -EIO;
        goto bail4;
    }

    dev_info(&pdev->dev, "Successfully loadedn");

    /* All went ok, so register to the input system */
    rc = input_register_device(ts.dev);
    if (rc) {
        ret = -EIO;
        goto bail5;
    }

    return 0;

bail5:
    free_irq(IRQ_TC, ts.dev);
    free_irq(IRQ_ADC, ts.dev);
    clk_disable(adc_clock);
    iounmap(base_addr);
    disable_irq(IRQ_TC);
bail4:
    disable_irq(IRQ_ADC);
bail3:
    ts_filter_chain_destroy(ts.chain);
    kfifo_free(ts.event_fifo);
bail2:
    input_unregister_device(ts.dev);
bail1:
    iounmap(base_addr);
bail0:

    return ret;
}


remove:
就是probe的逆运算,

static int s3c2410ts_remove(struct platform_device *pdev)
{
    disable_irq(IRQ_ADC);
    disable_irq(IRQ_TC);
    free_irq(IRQ_TC,ts.dev);
    free_irq(IRQ_ADC,ts.dev);

    if (adc_clock) {
        clk_disable(adc_clock);
        clk_put(adc_clock);
        adc_clock = NULL;
    }

    input_unregister_device(ts.dev);
    iounmap(base_addr);

    ts_filter_chain_destroy(ts.chain);

    kfifo_free(ts.event_fifo);

    return 0;
}


resume与suspend函数可有可无,完成触摸屏的激活和挂起,

2,中断处理分析:

三种模式转换过程:等待down中断模式->x,y连续坐标转换模式->等待up中断模式->等待down中断模式->..
两个中断的发生:触摸屏按下,发生ts中断,开始ad转换,ad转换结束,发生adc中断。
              触摸屏抬起,发生ts中断。
ts中断处理函数:

//判断ts中断是up还是down

static irqreturn_t stylus_updown(int irq, void *dev_id)
{
    unsigned long data0;
    unsigned long data1;
    int event_type;

    data0 = readl(base_addr+S3C2410_ADCDAT0);
    data1 = readl(base_addr+S3C2410_ADCDAT1);

    ts.is_down = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) &&
                     (!(data1 & S3C2410_ADCDAT0_UPDOWN));

    event_type = ts.is_down ? 'D' : 'U';

    if (unlikely(__kfifo_put(ts.event_fifo, (unsigned char *)&event_type,
         sizeof(int)) != sizeof(int))) /* should not happen */
        printk(KERN_ERR __FILE__": stylus_updown lost event!n");

    if (ts.is_down)
        s3c2410_ts_start_adc_conversion();//down

    else
        writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);//up


    mod_timer(&event_send_timer, jiffies + 1);//延时


    return IRQ_HANDLED;
}

[1] [2]
关键字:S3C2440  触摸屏驱动  Android版 引用地址:S3C2440 触摸屏驱动(针对Android版) 声明:本文内容及配图由平台用户或入驻媒体撰写。文章观点仅代表作者本人,不代表EEWorld网站立场。文章及其配图仅供工程师学习之用,如有内容侵权或违规,请联系本站处理,邮箱地址:bbs_service@eeworld.com.cn

上一篇:S3C2440 UDA1341声卡驱动分析(oos)
下一篇:S3C2440 rtc 平台设备驱动 卸载问题 oops

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
加好友,回复“进群” 拉你进技术交流群
加好友,回复“进群”
拉你进技术交流群
0

推荐阅读最新更新时间:2024-06-23 13:22

s3c2410与s3c2440的全方位对比
1. 最高主频不相同:2410为200M,2440为400M。 我们在用这两款处理器时,一般使用的主频是不相同的,而这个不相同,不仅影响是的运行的速度,最主要的是会影响一些外设(如串口)的时钟,这些外设的时钟如果不正确,就会出现问题。 又比如内存总线设置,2410 和 2440 主频不一样,总线定时所要求的时钟数也会不一样。 ---------------------------------------------------------------------------- 2. MPLL和UPLL的计算公式不相同:2440的MPLL是2410的两倍;2440的MPLL计算与UPLL的计算不相同。 2
[单片机]
基于S3C2440处理器和WinCE的智能车载仪表设计
  随着高性能电子显示技术的发展,汽车仪表电子化的程度越来越高。国内外已开发出了多功能全电子显示仪表、平视显示仪表、汽车导航系统、行车记录仪等高技术产品。未来,车用电子化嵌入式仪表具有以下优点:提供大量复杂的信息,使汽车的电子控制程度越来越高;满足小型、轻量化的要求,使有限的驾驶空间更人性化;高精度和高可靠性实现汽车仪表的电子化,降低了故障的发生率;设有在线故障诊断系统,一旦汽车发生故障,可以找到故障来源,方便维修;外形设计自由度高,汽车仪表盘造型美观。基于以上优点,汽车会越来越多地采用各种用途的电子化仪表。造型新颖、功能强大的嵌入式电子化仪表将是今后车用仪表的发展趋势和潮流。    1 智能车载仪表系统结构   本智能车载仪
[单片机]
基于<font color='red'>S3C2440</font>处理器和WinCE的智能车载仪表设计
S3C2440与NAND FLASH(K9F1208)的接线分析
一、SDRAM(HY57V561620F)连线分析 1、 S3C2440 有27根地址线ADDR ,8根片选信号ngcs0-ngcs7,对应bank0-bank7,当访问bankx 的地址空间,ngcsx引脚为低电平,选中外设。 2^27=128MByte, 8*128Mbyte = 1Gbyte,所以S3C2440 总的寻址空间是1Gbyte。但市面上很少有32位宽度的单片SDRAM,一般选择2片16位SDRAM 扩展得到32位SDRAM. 2、这里选择的SDARM是HY57V561620F,4Mbit * 4bank *16I/O,共32Mbyte。 首先了解下SDRAM 的寻址原理。 SDRAM 内部是一个存储阵列,
[单片机]
<font color='red'>S3C2440</font>与NAND FLASH(K9F1208)的接线分析
s3c2440 LCD及触摸屏的学习笔记(1)
所用的LCD为TopPoly-TD035STED4(TFT)型号,240*320的 其VCLK为6.39MHz。 根据s3c2440手册s3c2440处理LCD的时钟源是HCLK,通过寄存器LCDCON1中的CLKVAL可以调整VCLK频率大小,它的公式为:VCLK=HCLK÷ ,程序的内部分频为FCLK=400MHz、HCLK=100MHz、PCLK=50MHz(MPLLCON=(92 12)|(1 4)|1;),因此得到CLKVAL取整为6。 注:(LCD一般需要三个时序信号:VSYNC、HSYNC和VCLK。VSYNC是垂直同步信号,在每进行一个帧(即一个屏)的扫描之前,该信号就有效一次,由该信号可以确定LCD的场频,即
[单片机]
<font color='red'>s3c2440</font> LCD及<font color='red'>触摸屏</font>的学习笔记(1)
Samsung S3C2440平台上的Vxworks BSP移植
  研究基于S3C2440平台上的Vxworks BSP移植具有重要的意义。本文就BSP的概念、BSP移植过程中重点修改的几个文件、串口和网口驱动以及BSP的调试和仿真做详细的介绍。   BSP概述   VxWorks操作系统将所有硬件的功能函数分别放到一系列库中,这些库就被称为板级支持包BSP。BSP是连接VxWorks操作系统与硬件平台的一个接口软件包,在引导系统、支持系统运行过程中扮演着重要的角色,首先,通过BSP可以生成引导操作系统的bootrom;其次,引导行工程的建立基础就是BSP;最后,BSP具有与用户交互的作用,可以提供一个基础的硬件调试环境。BSP还可以使VxWorks运行于特定的硬件平台,如ARM、PPC、
[单片机]
Samsung <font color='red'>S3C2440</font>平台上的Vxworks BSP移植
S3C2440裸机------Nor Flash编程_识别
1.编写菜单程序 首先我们编写一个测试菜单程序,用来获取norFlash信息以及对NorFlash进行读写操作,代码如下: void nor_flash_test(void) { char c; while (1) { /* 打印菜单, 供我们选择测试内容 */ printf( Scan nor flashnr ); printf( Erase nor flashnr ); printf( Write nor flashnr ); printf( Read nor flashnr ); printf( quitnr ); printf( Enter selection:
[单片机]
<font color='red'>S3C2440</font>裸机------Nor Flash编程_识别
基于S3C2440的嵌入式Linux驱动——SPI子系统解读(三)
该系列文章将分为四个部分: 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。 基于S3C2440的嵌入式Linux驱动——SPI子系统解读(一) 第二部分,该文将对SPI的主控制器(master)驱动进行描述。 基于S3C2440的嵌入式Linux驱动——SPI子系统解读(二) 第三部分,即本篇文章,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。 第四部分,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang中转,最后由master驱动将数据传输出 去。 基于S3C
[单片机]
Android谷歌地图增加离线浏览功能
     北京时间7月8日凌晨消息,谷歌今天在Android版谷歌地图中(Google Maps For Android)加入了离线查看功能,用户可针对目标区域提前进行地图下载,然后以备离线观看。   要想激活这一功能,用户通过菜单按钮访问地图应用中的实验室选项后就可以发现新增的下载区域地图选项,通过点击更多选项就可以找到将周围区域地图进行本地存储的选项。   谷歌提供的周边区域地图下载的范围较大,覆盖10英里(约合16千米)半径的区域。   谷歌实现这一离线地图观看功能采用的是矢量系统来显示地图信息,而非老式图像系统,前者使用更少的数据,这就意味着该系统可以更加迅速的下载数据并进行本地存储,而且不会占据太多存储空间。   Andr
[手机便携]
热门资源推荐
热门放大器推荐
更多
  •  pdf文件智能仪器设计基础 (王祁)
  •  pdf文件现代操作系统(原书第4
  •  pdf文件Head First Python(中文
  •  pdf文件现代操作系统(第4
  •  数字集成电路——电路、系统与设计 (第二版)
  •  48 V总线兼容1.2 V/100 A双降压DC-DC转换器
  •  基于ansys的信号和电源完整性设计与分析
  •  托马斯微积分(第10版)
小广播
大联大有奖直播:最新功能安全牵引逆变器方案:助力汽车提升续航与节省成本!预约有礼~
活动时间:07月04日 上午 10:00
有奖直播 | 国产FPGA安路科技2024线上新品发布会
直播时间:7月8日(周一) 10:00
【资料合集】汽车总线基础、系统开发,限时免积分下载
Follow me第二季第1期来啦!与得捷一起解锁【Adafruit Circuit Playground Express】超能力!
报名时间:即日起—6月24日
直播预约 | 汽车圈盛会!第二届英飞凌汽车创新峰会(IACE)全程直播
直播时间:6月28日(周五)上午9:00
MPS有奖活动|绿色AI“芯” 动力,探索节能低碳的AI供电方案!
即日起—8月31日
Vicor| 适用于电池生命周期各个阶段的高密度电源转换器
即日起——08月31日
学干货赢【京东卡】 | 来PI PowiGaN技术学习中心,解密高可靠性和耐用性氮化镓(GaN)技术
即日起—7月7日
下载汽车电气化精品文章,赢【体脂秤、罗技鼠标、手持风扇】,开启MPS汽车技术进阶之旅!
即日起—7月7日
报名赢京东卡:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案
直播时间:7月3日(周三)下午14:00
大联大有奖直播:最新功能安全牵引逆变器方案:助力汽车提升续航与节省成本!预约有礼~
活动时间:07月04日 上午 10:00
有奖直播 | 国产FPGA安路科技2024线上新品发布会
直播时间:7月8日(周一) 10:00
【资料合集】汽车总线基础、系统开发,限时免积分下载
Follow me第二季第1期来啦!与得捷一起解锁【Adafruit Circuit Playground Express】超能力!
报名时间:即日起—6月24日
直播预约 | 汽车圈盛会!第二届英飞凌汽车创新峰会(IACE)全程直播
直播时间:6月28日(周五)上午9:00
MPS有奖活动|绿色AI“芯” 动力,探索节能低碳的AI供电方案!
即日起—8月31日
Vicor| 适用于电池生命周期各个阶段的高密度电源转换器
即日起——08月31日
学干货赢【京东卡】 | 来PI PowiGaN技术学习中心,解密高可靠性和耐用性氮化镓(GaN)技术
即日起—7月7日
下载汽车电气化精品文章,赢【体脂秤、罗技鼠标、手持风扇】,开启MPS汽车技术进阶之旅!
即日起—7月7日
报名赢京东卡:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案
直播时间:7月3日(周三)下午14:00
添点儿料...
无论热点新闻、行业分析、技术干货……
发布文章
推荐内容
热门活动
换一批
更多
免费申请|基于树莓派<a href=MCU RP2040的Wi-Fi/BLE开发板" style="opacity: 0;">
大联大有奖直播:最新功能安全牵引逆变器方案:助力汽车提升续航与节省成本!预约有礼
有奖直播 | 国产FPGA安路科技2024线上新品发布会
免费申请|基于STM32H7处理器的机器视觉微控制器板OpenMV4 Cam H7
报名赢京东卡:英飞凌针对电动工具的高功率、高效率以及高可靠性解决方案
设计资源 培训 开发板 精华推荐
  • 【下载】LAT6021 在STM32MP13x系列MPU上裸跑应用程序
  • 【下载】LAT1406 STM32F7在800x480及24位色深显示撕裂问题的分析和解决
  • 【下载】LAT6022 STM32MP13x低功耗的使用和注意事项
  • 【下载】RM0456 STM32U5系列基于Arm®内核的32位MCU
  • 【下载】LAT1373 STM32CubeIDE实用技巧之快捷键的配置
  • 【下载】LAT1378 STM32CubeIDE实用技巧之Flash代码填充

最新单片机文章
  • 混杂设备LED驱动程序(GPIO操作函数实现)
    mini2440上LED对应的IO:LED1GPB5LED2GPB6LED3GPB7LED4GPB8低电平有效(点亮)寄存器:GPxCON设置端口功能(00表示输入,01表示输出,10表 ...
  • QT_MPlayer移植到mini2440
    (一)首先要建立交叉编译环境a)首先搭建交叉编译环境i 将arm-linux-gcc-4 4 3 tar gz解压到一个空文件夹中 tar zvxf arm-linux-gcc-4 4 ...
  • U-Boot-2011.03移植nandflash到mini2440
    u-boot2011 03支持s3c2440,寄存器在arch arm includer asm 目录下s3c24x0_cpu h中定义。代码中包含了s3c2410读写nandflash函数,因此在s3c ...
  • mini2440 驱动ds18b20
    想着有个ds18b20,于是就写了一个18b20的驱动。是在mini2440上面实现的。ldd3的大师说得好,linux驱动应该尽可能多的提供机制,而不是提供 ...
  • mini2440 编译U-Boot-1.1.6遇到的一些问题
    Linux环境:Ubuntu11 10交叉编译工具:arm-linux-gcc4 3 2目标板:mini2440 Flash 256Mu-boot源代码:由友善之臂提供,基于1 1 6版本修改后的 ...
  • 移植U-Boot-2009.08到mini2440 基础配置篇
  • U-Boot 2010.09 支持mini2440
  • mini2440上DS18B20的驱动程序(含简单测试)
  • mini2440上LEDS的驱动程序(含测试程序)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

  • 《单片机与嵌入式系统应用》历年文章目录
  • 物联网时代的嵌入式系统机遇
  • 从嵌入式系统视角看物联网
更多精选电路图
  • 基于BA5417的立体声功率放大器电路
  • 如何通过433MHz制作红外遥控范围扩展器电路
  • 延迟开启继电器驱动器的电路原理图
  • 八路耦合器应用实例
  • 晶体管开关电路详解
  • 基于LDR感应火灾烟雾的火灾报警电路
换一换 更多 相关热搜器件
  •  ATTINY806-MFR
  •  TDC-GP30YA 3K
  •  NXH100B120H3Q0STG
  •  SAFC509-L
  •  E1SDA16-4.460M TR
  •  LEV100
  •  2SB772_15
  •  FTLX3611M336
  •  2200RGG200J234A
  •  7301L1PDA4GE3
更多热门文章
  • PLC使用脉冲方式控制伺服电机
  • 如何使用LTspice仿真来解释电压依赖性影响
  • 利用IP流量发生器实现IPTV测试仪的设计方案
  • PTI600经济型在线测试仪产品特点
  • 基于单片机的智能温度表课程设计
  • 4016交直流数位功率分析仪的功能特点及应用范围
  • 世界首个车规级Chiplet接口标准解析:ACC_RV 1.0
  • STM32高级开发——使用VS Code搭建STM32开发环境
  • 激光雷达及其工作原理
更多每日新闻
  • 贸泽开售适用于物联网应用的全新u-blox XPLR-IOT-1探索套件
  • 英飞凌推出集成高精度温度传感器的新型600 V CoolMOS S7TA MOSFET
  • 如何在中国的混合环境中采用广域网最佳实践
  • 针对域控制器的一种升级测试方案介绍
  • 谈谈Smart Charging技术
  • 国芯思辰|基本半导体650V SiC肖特基二极管B1D10065F(替代IDK10G65C5)助力车载充电机
  • 贞光科技 | 智能汽车芯片梳理
  • ADAS DV&amp;PV试验测试台架的方案分享
  • CANape |Option Driver Assistance功能详解
  • 薛其坤院士:中国量子信息和高温超导处于世界第一梯队
更多往期活动
  • 阅读并了解是德科技示波器、校准服务精彩专题,答题赢好礼!
  • 再续点评Vishay视频 抢楼拿奖进行到底
  • “TI 中国大学计划” 知多少——答题赢好礼!
  • 有奖直播:新科技、新课堂、新学期~ ADI软件定义无线电ADALM-Pluto入门实战
  • 下载【ADI 6本精选电子书】,截图抽红包啦~
  • 有奖直播报名:英飞凌智能电机驱动方案
  • Microchip有奖问答 | 新品 MCU 独立于内核的外设(CIP)技术解密
  • 月度原创精选评选2018年4月(总第3期)
  • 感谢有你,愿一路同行!——eeworld感恩节送书活动
厂商技术中心

TI 技术论坛

TI 在线培训

Qorvo 射频技术研习社

随便看看
  • 驾驶行为原始数据采集-环境搭建
  • 请问附件中的mic接口为什么左右两个声道可以接到一个音频线上?
  • 诚聘网络营销精英
  • 请教这个 433MHz 发射器电路图的工作原理
  • 对MSP430FR5739开发板的一点计划
  • 三网融合之遐想:广电的杯具
  • 关于STM8的破解
  • keil arm通过DTC连接的BKR EasyCODE
  • 码率与空速有什么区别吗?
  • 了解电源电路的EMI 和器件的作用

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 综合资讯 51单片机 PIC单片机 AVR单片机 ARM单片机 嵌入式系统 汽车电子 消费电子 数据处理 视频教程 电子百科 其他技术 STM32 MSP430 单片机资源下载 单片机习题与教程

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。