色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

SWM32S基于GT9157的觸摸芯片驅動

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

此文章介紹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 接口控制模塊,同時提供欠壓檢測及低電壓復位功能。

觸摸芯片

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

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

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

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

代碼

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

紅色框內文件相對重要并解讀

( 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 << I2C_MSTCMD_WR_Pos);? // 發送起始位和從機地址

while(I2C0->MSTCMD & I2C_MSTCMD

以上程序是我們為移植“ bsp_GT9XX.c”文件做的基本驅動,接下來我們詳細分析一下,


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

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

(1 << I2C_MSTCMD_ACK_Pos) |

(1 << I2C_MSTCMD_STO_Pos);

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

現象

復位 初始化后串口打印,可以看到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字節)

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

// 創建靜態線程

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

}

審核編輯 :李倩

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

    關注

    112

    文章

    16332

    瀏覽量

    177813
  • adc
    adc
    +關注

    關注

    98

    文章

    6496

    瀏覽量

    544470
  • 通信接口
    +關注

    關注

    3

    文章

    237

    瀏覽量

    30980

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

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

收藏 人收藏

    評論

    相關推薦

    RK3588-電容觸控芯片GT9XX觸摸調試筆記

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

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

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

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

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

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

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

    專業回收觸摸ic 收購觸摸ic

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

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

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

    如何對SWM32SRET6芯片進行測試呢

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

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

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

    SWM201系列MCU數據手冊

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

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

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

    LTDC—LCD觸摸畫板

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

    電容式觸摸屏控制芯片GT811數據手冊

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

    MAX9157EHJ+ 接口 - 驅動器,接收器,收發器

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

    MAX9157EGJ+T 接口 - 驅動器,接收器,收發器

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

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

    基于32位高速MCU芯片SWM201GS7的單電阻空氣凈化器電機驅動DEMO方案
    的頭像 發表于 11-07 17:15 ?876次閱讀
    基于32位高速MCU<b class='flag-5'>芯片</b><b class='flag-5'>SWM</b>201GS7的單電阻空氣凈化器電機<b class='flag-5'>驅動</b>DEMO方案
    主站蜘蛛池模板: 秋霞av伦理片在线观看| 黄色网址在线免费观看| 强行撕开衣服捏胸黄文| 国产 高清 无码 在线播放| 欧美zzzoooxxx| 99久久99久久久精品久久| 九九99国产香蕉视频| 亚洲精品高清中文字幕完整版| 国产高清视频在线观看不卡v| 日韩高清毛片| 被两根巨大同时进去高H| 欧美亚洲另类热图| 第一会所欧美无码原创| 色噜噜2017最新综合| 国产精品99久久久久久AV色戒| 一本道高清码v京东热| 狠狠色香婷婷久久亚洲精品| 伊人成综合网伊人222| 久久亚洲AV成人无码国产漫画| 在线观看永久免费网址| 久久re视频这里精品免费1| 在线中文高清资源免费观看| 日本久久精品毛片一区随边看| 国产成人亚洲精品无广告| 亚洲 日韩经典 中文字幕| 国产亚洲欧美在线观看三区| 亚洲国产免费观看视频| 免费看午夜高清性色生活片| 把极品白丝老师啪到腿软| 我半夜摸妺妺的奶C了她软件| 国产乱妇乱子在线播视频播放网站| 亚洲 欧美 视频 手机在线| 麻豆精品传媒2021网站入口| 999zyz色资源站在线观看| 欧美四虎精品二区免费| 国产在线精品亚洲视频在线| adc影院欢迎您大驾光临入口| 色欲色香天天天综合| 好爽别插了无码视频| xxxxhd17欧美老师| 性色AV一区二区三区V视界影院|