网站推广效果的评价指标,购物网站如何做推广,邵阳营销型网站,北京中铁建设集团有限公司前言 在翻翻自己的器件盒的时候#xff0c;发现这块好久之前买的TFT屏了#xff0c;想起还没有用STM32点亮过#xff0c;手头上正好有立创的梁山派STM32F4#xff0c;就试着按照网上的文章教程顺便移植个LVGL看看#xff0c;然后就有了就本文。 代码工程命名的是LvglDemo发现这块好久之前买的TFT屏了想起还没有用STM32点亮过手头上正好有立创的梁山派STM32F4就试着按照网上的文章教程顺便移植个LVGL看看然后就有了就本文。 代码工程命名的是LvglDemo不要奇怪。虽然LVGL8.3移植进去了不知道是不是还没开始优化跑演示文本滚动的时候都一卡一卡的所以LVGL相关代码都注释掉了。本文主要是分享自己编写的CST816T(虽然代码不多)和整个代码工程LCD的显示代码是修改自中景园的。希望能帮助到大家。
材料
模块1.69寸液晶显示屏分辨率240x280驱动ICST7789V触摸ICCST816T。加上立创上打的显示屏驱动板。
开发板立创梁山派·天空星STM32F407VGT
案例的代码环境Keil5STM32CubeMX生成的HAL库硬件I2C硬件SPI
其它事项可能在用I2C与触摸IC建立通信时没反应如读取芯片ID没有回应之类那可能是芯片进入待机模式了可以试着点击屏幕的同时在通信看看有没有反应。
步骤
STM32CubeMX配置简述
SYS上Debug配置成Serial Wire启用USART1调试SPI1对接LCDI2C1对接TOUCH像LCD上的其它引脚都是找普通的GPIO按输出、上拉、快速、推挽模式配置初始状态全部为高电平。
通常1.69IPS240x280(RGB)的引脚定义
序号模块引脚引脚说明1GND液晶屏电源地2VCC液晶屏电源正(3.3V)3SCL液晶屏SPI总线时钟信号4SDA液晶屏SPI总线写数据信号5RES液晶屏复位控制信号 (低电平复位)6DC液晶屏寄存器/数据选择控制信号低电平寄存器高电平数据)7CS液晶屏片选控制信号 (低电平使能)8BLK液晶屏背光控制信号(高电平点亮如不需要控制请接3.3V)
代码 下面仅展示CST816T库和main.c的节选完整的工程文件会放在末尾。因为目前对CST816T没啥应用所以就写了几条基本的功能函数来测试但是手册上所列出来的寄存器都写成宏了有需要的可以自行扩写。 CST816T.H
#ifndef __CST816T_H__
#define __CST816T_H__
// #include stdint.h// I2C相关参数
#define CST816T_I2CAddress_7bit 0x15
#define CST816T_I2CAddress_8bit_Read (CST816T_I2CAddress_7bit 1) | 0x01
#define CST816T_I2CAddress_8bit_Write (CST816T_I2CAddress_7bit 1)// CST816T的寄存器
// 参考于《CST816T通用版本SDK寄存器说明-v1》
#define CST816T_Register_GestureID 0x01 // 手势码
#define CST816T_Register_FingerNum 0x02 // 手指个数
#define CST816T_Register_XposH 0x03 // X坐标高4位
#define CST816T_Register_XposL 0x04 // X坐标低8位
#define CST816T_Register_YposH 0x05 // Y坐标高4位
#define CST816T_Register_YposL 0x06 // Y坐标低8位
#define CST816T_Register_ChipID 0xA7 // 工程编号
#define CST816T_Register_FwVersion 0xA9 // 软件版本号
#define CST816T_Register_FactoryID 0xAA // TP厂家ID
#define CST816T_Register_BPC0H 0xB0 // BPC0值的高8位
#define CST816T_Register_BPC0L 0xB1 // BPC0值的低8位
#define CST816T_Register_BPC1H 0xB2 // BPC1值的高8位
#define CST816T_Register_BPC1L 0xB3 // BPC1值的低8位
#define CST816T_Register_SleepMode 0xE5 // 值为0x03时进入休眠状态无触摸唤醒功能
#define CST816T_Register_ErrResetCtl 0xEA // 复位触摸面积相关
#define CST816T_Register_LongPressTick 0xEB // 长按时间门限默认为100。大约1S
#define CST816T_Register_MotionMask 0xEC // 连续运动手势使能
#define CST816T_Register_IrqPluseWidth 0xED // 中断低脉冲输出宽度
#define CST816T_Register_NorScanPer 0xEE // 正常快速检测周期
#define CST816T_Register_MotionSlAngle 0xEF // 手势检测滑动分区角度控制
#define CST816T_Register_LpScanRaw1H 0xF0 // 低功耗扫描1号通道的基准值的高8位
#define CST816T_Register_LpScanRaw1L 0xF1 // 低功耗扫描1号通道的基准值的低8位
#define CST816T_Register_LpScanRaw2H 0xF2 // 低功耗扫描2号通道的基准值的高8位
#define CST816T_Register_LpScanRaw2L 0xF3 // 低功耗扫描2号通道的基准值的低8位
#define CST816T_Register_LpAutoWakeTime 0xF4 // 低功耗时自动重校正周期
#define CST816T_Register_LpScanTH 0xF5 // 低功耗扫描唤醒门限。越小越灵敏
#define CST816T_Register_LpScanWin 0xF6 // 低功耗扫描量程。越大越灵敏功耗越高
#define CST816T_Register_LpScanFreq 0xF7 // 低功耗扫描频率。越小越灵敏
#define CST816T_Register_LpScanIdac 0xF8 // 低功耗扫描电流。越小越灵敏
#define CST816T_Register_AutoSleepTime 0xF9 // x秒内无触摸时自动进入低功耗模式
#define CST816T_Register_IrqCtl 0xFA // 发出低脉冲的动作
#define CST816T_Register_AutoReset 0xFB // x秒内有触摸但无有效手势时自动复位
#define CST816T_Register_LongPressTime 0xFC // 长按x秒后自动复位
#define CST816T_Register_IOCtl 0xFD // 主控通过拉低IRQ引脚实现触控的软复位功能
#define CST816T_Register_DisAutoSleep 0xFE // 默认为0使能自动进入低功耗模式// 功能函数
void CST816T_Init(void); // 初始化
uint8_t CST816T_GetGestureID(void); // 获取手势码
uint16_t CST816T_GetXpos(void); // 获取点击的X坐标
uint16_t CST816T_GetYpos(void); // 获取点击的Y坐标
uint8_t CST816T_GetChipID(void); // 获取芯片ID
uint8_t CST816T_GetRegisterData(uint8_t reg); // 获取单个寄存器数据#endif
CST816T.C
#include main.h
#include i2c.h
#include CST816T.h// 初始化
void CST816T_Init(void)
{} // 获取手势码
uint8_t CST816T_GetGestureID(void)
{uint8_t reData[1] {0}; // 接收数据uint8_t CMD[] { CST816T_Register_GestureID }; // 命令HAL_I2C_Master_Transmit(hi2c1, CST816T_I2CAddress_8bit_Write, CMD , 1, 1000);HAL_I2C_Master_Receive(hi2c1, CST816T_I2CAddress_8bit_Read, reData , 1, 1000);return reData[0];
}// 获取点击的X坐标
uint16_t CST816T_GetXpos(void)
{uint8_t reData[2] {0}; // 接收数据uint8_t CMD[] { CST816T_Register_XposH }; // 命令HAL_I2C_Master_Transmit(hi2c1, CST816T_I2CAddress_8bit_Write, CMD , 1, 1000);HAL_I2C_Master_Receive(hi2c1, CST816T_I2CAddress_8bit_Read, reData , 2, 1000);return ((reData[0] 0x0F) 8) | reData[1];
}// 获取点击的Y坐标
uint16_t CST816T_GetYpos(void)
{uint8_t reData[2] {0}; // 接收数据uint8_t CMD[] { CST816T_Register_YposH }; // 命令HAL_I2C_Master_Transmit(hi2c1, CST816T_I2CAddress_8bit_Write, CMD , 1, 1000);HAL_I2C_Master_Receive(hi2c1, CST816T_I2CAddress_8bit_Read, reData , 2, 1000);return ((reData[0] 0x0F) 8) | reData[1];
}// 获取芯片ID
uint8_t CST816T_GetChipID(void)
{uint8_t reData[1] {0}; // 接收数据uint8_t CMD[] { CST816T_Register_ChipID }; // 命令HAL_I2C_Master_Transmit(hi2c1, CST816T_I2CAddress_8bit_Write, CMD , 1, 1000);HAL_I2C_Master_Receive(hi2c1, CST816T_I2CAddress_8bit_Read, reData , 1, 1000);return reData[0];
}// 获取单个寄存器数据
// 多用于测试用放入寄存器地址获取数据
uint8_t CST816T_GetRegisterData(uint8_t reg)
{uint8_t reData[1] {0}; // 接收数据uint8_t CMD[] { reg }; // 命令HAL_I2C_Master_Transmit(hi2c1, CST816T_I2CAddress_8bit_Write, CMD , 1, 1000);HAL_I2C_Master_Receive(hi2c1, CST816T_I2CAddress_8bit_Read, reData , 1, 1000);return reData[0];
}
main.c节选
// 串口打印
printf(\r\nCST816T-State:\r\n);
printf(CST816T-ID:%x\r\n,CST816T_GetChipID());
printf(CST816T-Gesture:%x\r\n,CST816T_GetGestureID());
printf(CST816T-XYpos:%d,%d\r\n,CST816T_GetXpos(),CST816T_GetYpos());
// 字符串处理
char string_id[30];char string_gesture[30];char string_xypos[30];
sprintf(string_id,CST816T-ID:%x ,CST816T_GetChipID());
sprintf(string_gesture,CST816T-Gesture:%x,CST816T_GetGestureID());
sprintf(string_xypos,CST816T-XYpos:%d,%d ,CST816T_GetXpos(),CST816T_GetYpos());
// LCD显示
// LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
LCD_ShowString(20,70,CST816T-State:,RED,WHITE,16,0);
LCD_ShowString(20,90,string_id,RED,WHITE,16,0);
LCD_ShowString(20,110,string_gesture,RED,WHITE,16,0);
LCD_ShowString(20,130,string_xypos,RED,WHITE,16,0);
HAL_Delay(50);图片
配置、测试现象以及模块实物的图片 工程
代码工程文件*1 CST816T相关数据手册*2 链接: https://pan.baidu.com/s/1cHRa0DefYNnccHHSQnaHHg 提取码: bvjw