在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SWM32S基于GT9157的觸摸芯片驅(qū)動

0xQC_gh_ed4f95b ? 來源:華芯微特32位MCU ? 2023-04-10 09:36 ? 次閱讀

此文章介紹SWM32S基于5寸800*480分辨率液晶屏+GT9157觸摸芯片的驅(qū)動實現(xiàn)過程。

硬件

MCU:SWM32SRET6

TFT-LCD:5.0寸 800*480電容

觸摸芯片:GT9157

MCU

SWM32S 內(nèi)嵌 ARM Cortex-M4 控制器,片上包含精度為 1%以內(nèi)的 20MHz/40MHz 時鐘,可通過 PLL 倍頻到 120MHz 時鐘,提供多種內(nèi)置 FLASH/SRAM 大小可供選擇,支持 ISP(在系統(tǒng)編程)操作及 IAP(在應用編程)。


外設(shè)串行總線包括 1 個 CAN 接口,多個 UART 接口、 SPI 通信接口(支持主/從選擇)及 I2C 接口(支持主/從選擇)。此外還包括 1 個 32 位看門狗定時器, 6 組 32 位通用定時器, 1 組 32 位專用脈沖寬度測量定時器, 12 通道 16 位的 PWM 發(fā)生器, 2 個 8 通道 12 位、 1MSPS 的逐次逼近型ADC 模塊, 1 個 SDIO 接口模塊, TFT-LCD 液晶驅(qū)動模塊以及 RTC 實時時鐘、 SRAMC、 SDRAMC、NORFLC 接口控制模塊,同時提供欠壓檢測及低電壓復位功能。

觸摸芯片

9acae928-d73a-11ed-bfe3-dac502259ad0.png

GT9157擁有26個驅(qū)動通道和14個感應通道,以滿足更高的touch 精度要求。同時支持最先進的短距離傳輸功能HotKnot。GT9157可同時識別5個觸摸點位的實時準確位置,移動軌跡及觸摸面積。并可根據(jù)主控需要,讀取相應點數(shù)的觸摸信息,其內(nèi)部結(jié)構(gòu)如上圖所示。

9ae8df78-d73a-11ed-bfe3-dac502259ad0.png

GT9157觸控芯片有兩個備選的I2C通訊地址,這是由芯片的上電時序決定,如圖所示。上 電時序有Reset 引腳和INT引腳生成,若Reset引腳從低電電平轉(zhuǎn)變到高電平期間,INT 引腳為高電平的時候,觸控芯片使用的I2C設(shè)備地址為0x28/0x29(8位寫、讀地址),7位地址為0x14;若Reset引腳從低電電平轉(zhuǎn)變到高電平期間,INT 引腳一直為低電平,則觸控芯片使用的I2C設(shè)備地址為0xBA/0xBB(8位寫、讀地址),7位地址為0x5D。

代碼

9b0a7160-d73a-11ed-bfe3-dac502259ad0.png

紅色框內(nèi)文件相對重要并解讀

( 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)

{

// 第一階段設(shè)置端口,并拉低兩個端口

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);

// 第三階段設(shè)置中斷引腳為 中斷功能

GPIO_Init(GPIOC, PIN2, 0, 0, 0);

EXTI_Init(GPIOC, PIN2, EXTI_RISE_EDGE); // 上升沿觸發(fā)中斷

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); // 關(guān)閉外部中斷

GPIO_Init(GPIOC, PIN2, 1, 0, 1); // 回到普通輸出端口

GPIO_ClrBit(GPIOC, PIN2);

}

/**********************************************************************************************************************

* 函數(shù)名稱: bsp_WrNumByte()

* 功能說明: IIC寫Num個字節(jié)

* 輸 入: reg 寄存器地址,*p數(shù)據(jù),WrByteNum寫入的數(shù)據(jù)個數(shù)

* 輸 出: 0,正常 其他,失敗

* 注意事項:

**********************************************************************************************************************/

uint8_t bsp_GT9XX_WrReg(uint8_t IdAddr,uint8_t *p,uint8_t WrByteNum)

{

I2C0->MSTDAT = IdAddr | 0; // 發(fā)送器件地址+寫命令

I2C0->MSTCMD = (1 << I2C_MSTCMD_STA_Pos) |??

(1 << I2C_MSTCMD_WR_Pos);? // 發(fā)送起始位和從機地址

while(I2C0->MSTCMD & I2C_MSTCMD

以上程序是我們?yōu)橐浦病?bsp_GT9XX.c”文件做的基本驅(qū)動,接下來我們詳細分析一下,


這部分源碼具體實現(xiàn)了什么功能。I2C_Mst_Init()函數(shù)中,我們首先聲明了一個結(jié)構(gòu)體,接著將 GPIOA.4 和 GPIOA.5進行了特殊功能管腳的分配,設(shè)置為 I2C 接口。接著是給結(jié)構(gòu)體賦值, 他們的意義分別是設(shè)置為主機模式;地址為 7 位接口;I2C 通信時鐘頻率設(shè)為 400HHz;不使能中斷模式,接著是調(diào)用庫函數(shù)進行給寄存器賦值;最后打開 I2C 接口。接下來 bsp_GT9XX_InitRst()函數(shù)為初始化,主要是設(shè)置端口,并將 GT9157 的設(shè)備 I2C 地址設(shè)置為 0xBA,這個設(shè)置過程參加上面的時序;接著將 GPIOC.2 設(shè)置為中斷,上升沿觸發(fā)。函數(shù) GT9XX_IRQEnable()和 GT9XX_IRQDisable(),顧名思義,就是使能中斷和失能中斷,這個好理解最后就是兩個讀寫 GT9157 寄存器的函數(shù),這兩個函數(shù),需要讀者先理解 I2C 通信的基本協(xié)議,之后安裝基本協(xié)議,一句、一句的理解,這里需要注意的是

I2C0->MSTCMD = (1 << I2C_MSTCMD_RD_Pos) ?|

(1 << I2C_MSTCMD_ACK_Pos) |

(1 << I2C_MSTCMD_STO_Pos);

這三行程序,當我們在跑該程序的時候, 一般是先寫寄存器,再讀數(shù),而此時如果沒有這三行程序,會把下一次的讀數(shù)據(jù)和寫寄存器混淆,導致 GT9157 芯片不認識此協(xié)議。當我們加了之后,就有結(jié)束,有開始,繼而芯片能夠識別此協(xié)議。

現(xiàn)象

復位 初始化后串口打印,可以看到x軸800 ,y軸480

9b3309cc-d73a-11ed-bfe3-dac502259ad0.png

進行一個點的觸摸 ID:0 定位是(257,237) 寬度62

9b4c9f68-d73a-11ed-bfe3-dac502259ad0.png

進行兩個點的觸摸 可以看到ID0 ID1

9b4c9f68-d73a-11ed-bfe3-dac502259ad0.png

進行五個點的觸摸 可以看到ID0 ID1 ID2 ID3 ID4

9b835e90-d73a-11ed-bfe3-dac502259ad0.png

附錄

程序代碼

#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 << ((x%2) == 0 ? 0 : 16));

}

ALIGN(RT_ALIGN_SIZE) // 以字對齊(4字節(jié))

static rt_uint8_t rt_Test_thread_stack[1024]; // 線程棧

// 線程Test

static void Test_thread_entry(void* parameter)

{

printf(" RGB工程初始化OK ...... ");

LCD->SRCADDR = (uint32_t)LCD_Buffer;

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 ");

// 創(chuàng)建靜態(tài)線程

rt_thread_init(&Test_thread, // 線程控制塊

"Test", // 線程名字,在shell里面可以看到

Test_thread_entry, // 線程入口函數(shù)

RT_NULL, // 線程入口函數(shù)參數(shù)

&rt_Test_thread_stack[0], // 線程棧起始地址

sizeof(rt_Test_thread_stack), // 線程棧大小

5, // 線程的優(yōu)先級

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();

}

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16449

    瀏覽量

    179485
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6534

    瀏覽量

    545772
  • 通信接口
    +關(guān)注

    關(guān)注

    3

    文章

    240

    瀏覽量

    31066

原文標題:SWM32S基于GT9157的觸摸芯片驅(qū)動

文章出處:【微信號:gh_ed4f95bde4df,微信公眾號:華芯微特32位MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RK3588-電容觸控芯片GT9XX觸摸調(diào)試筆記

    基于RK3588平臺, 電容觸控芯片GT9XX觸摸調(diào)試總結(jié)。 觸摸芯片:電容觸控芯片
    的頭像 發(fā)表于 06-13 10:47 ?3006次閱讀
    RK3588-電容觸控<b class='flag-5'>芯片</b><b class='flag-5'>GT</b>9XX<b class='flag-5'>觸摸</b>調(diào)試筆記

    【i.MX6ULL】驅(qū)動開發(fā)12——電容觸摸驅(qū)動實踐(上)

    本篇主要介紹了多點觸摸芯片GT911的驅(qū)動編寫與使用,并通過將觸摸點實時打印的方式,測試觸摸功能
    的頭像 發(fā)表于 05-30 09:38 ?5379次閱讀
    【i.MX6ULL】<b class='flag-5'>驅(qū)動</b>開發(fā)12——電容<b class='flag-5'>觸摸</b><b class='flag-5'>驅(qū)動</b>實踐(上)

    SWM32S單片機的SDRAM和LCD控制器的用法

    SWM32S單片機內(nèi)部集成了8MB的SDRAM以及LCD控制器,非常適合用于屏幕驅(qū)動。其中LCD控制器支持RGB565格式的接口,最大支持1024*768分辨率。今天來介紹一下這兩個外設(shè)的用法。
    發(fā)表于 09-26 11:22 ?2254次閱讀

    深圳回收觸摸IC,收購觸摸IC

    868 GT911 GT9110 GT912 GT913 GT9137 GT9147
    發(fā)表于 01-14 18:07

    專業(yè)回收觸摸ic 收購觸摸ic

    9110 GT912 GT913 GT9137 GT9147 GT915 GT9157
    發(fā)表于 05-14 16:30

    深圳回收觸摸IC 高價收購觸摸IC

    913 GT9137 GT9147 GT915 GT9157 GT9158 GT9271
    發(fā)表于 09-01 10:39

    如何對SWM32SRET6芯片進行測試呢

    SWM32SRET6芯片有哪些特點呢?如何對SWM32SRET6芯片進行測試呢?
    發(fā)表于 12-21 06:27

    分享芯片--SWM254S(霍爾開關(guān)IC)

    1. 概述 SWM254S是一顆微功耗、高靈敏度S極單極性的霍爾開關(guān)傳感裝置。SWM254S使用薄體縮小型貼片DTSP4(2.8*1.5*0.7mm)封裝,工作溫度范圍為-20~85°C
    發(fā)表于 05-27 15:36

    SWM201系列MCU數(shù)據(jù)手冊

    運算放大器模塊,4 路比較器模塊,并提供欠壓檢測及低電壓復位功能。SWM20DC6U7 內(nèi)部集成 6N 型 90V 三相半橋高邊和低邊驅(qū)動器。SWM20PG6S6 內(nèi)部集成 P-N 型最高 40V 三相半橋高邊和低邊
    發(fā)表于 09-14 08:56

    gt9xx觸摸屏(電容屏)驅(qū)動代碼

    gt9xx 觸摸屏(電容屏)驅(qū)動代碼,飛思卡爾平臺。
    發(fā)表于 05-16 11:05 ?27次下載

    LTDC—LCD觸摸畫板

    -ST固件庫版本:1.5.1 【 !】功能簡介: 驅(qū)動5點觸控電容屏,實現(xiàn)簡單的觸摸畫板功能。 學習目的:學習如何驅(qū)動觸摸屏(GT9157
    發(fā)表于 12-13 15:43 ?14次下載

    電容式觸摸屏控制芯片GT811數(shù)據(jù)手冊

    5 點電容式觸摸屏控制芯片 GT811,采用投射式電容檢測原理,由 16 個驅(qū)動通道與 10 個感應通道組成觸摸檢測網(wǎng)絡(luò),通過內(nèi)置模擬放大電
    發(fā)表于 09-29 10:13 ?14次下載

    MAX9157EHJ+ 接口 - 驅(qū)動器,接收器,收發(fā)器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX9157EHJ+相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MAX9157EHJ+的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX9157EHJ+真值表,MAX
    發(fā)表于 01-13 18:29
    MAX<b class='flag-5'>9157</b>EHJ+ 接口 - <b class='flag-5'>驅(qū)動</b>器,接收器,收發(fā)器

    MAX9157EGJ+T 接口 - 驅(qū)動器,接收器,收發(fā)器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX9157EGJ+T相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有MAX9157EGJ+T的引腳圖、接線圖、封裝手冊、中文資料、英文資料,MAX9157EGJ+T真值表,MAX
    發(fā)表于 01-28 18:03
    MAX<b class='flag-5'>9157</b>EGJ+T 接口 - <b class='flag-5'>驅(qū)動</b>器,接收器,收發(fā)器

    基于32位高速MCU芯片SWM201GS7的單電阻空氣凈化器電機驅(qū)動DEMO方案

    基于32位高速MCU芯片SWM201GS7的單電阻空氣凈化器電機驅(qū)動DEMO方案
    的頭像 發(fā)表于 11-07 17:15 ?969次閱讀
    基于32位高速MCU<b class='flag-5'>芯片</b><b class='flag-5'>SWM</b>201GS7的單電阻空氣凈化器電機<b class='flag-5'>驅(qū)動</b>DEMO方案
    主站蜘蛛池模板: 很黄网站| 狠狠干干干 | 男人女人真曰批视频播放 | 亚洲欧美强伦一区二区另类 | 人人爽天天爽夜夜爽曰 | 午夜韩国理论片在线播放 | 国产成人影院在线观看 | 波多野结衣在线网站 | 国产综合视频在线 | 在线视频观看你懂的 | 国产精品色婷婷在线观看 | www在线播放| 亚洲码在线 | 午夜 福利 视频 | 久草6| 特黄特色 | 国产精品波多野结衣 | 男人不识本网站上遍色站也枉然 | 一级一级一片免费高清 | 天天干天| 亚洲综合色婷婷在线观看 | 欧美一级别| 久久国产乱子伦精品免费午夜 | 黄黄网址| 色综合久久九月婷婷色综合 | 黄 色 录像成 人播放免费 | 色国产在线视频一区 | 天天久久 | 亚洲第一成网站 | 五月婷婷六月色 | www.婷婷.com| 男女性生动态免费视频 | 免费精品美女久久久久久久久久 | 国产色婷婷亚洲 | 国产成人影院 | 欧美xxxxx喷潮 | 欧美性天天影视 | 奇米77| 狠狠干狠狠搞 | 国产福利毛片 | 天天射天天操天天色 |