0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32模块使用 3.5寸ILI9488彩色触摸屏

CW32生态社区 来源:CW32生态社区 作者:CW32生态社区 2025-05-12 15:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、模块来源


资料下载链接:
http://www.lcdwiki.com/zh/3.5inch_SPI_Module_ILI9488_SKU:MSP3520

wKgZPGggZg2Ac0SBAAEgiGyZ_nU829.jpg

产品实物展示

二、规格参数

工作电压:3.3V
工作电流:20MA
模块尺寸:56.34(H) x 98.00(W)
像素大小:320(H) x 480(V)RGB
驱动芯片:ILI9488
通信协议:SPI
使用管脚数量:14 Pin(2.54mm间距排针

wKgZO2ggZg6AB0TQAACvMpz_vKE155.jpg

尺寸参数

三、移植过程

我们的目标是将例程移植至立创·CW32F030C8T6开发板上。按照以下步骤,即可完成移植。

将源码导入工程;

根据编译报错处进行粗改;

修改引脚配置;

修改时序配置;

移植验证。

3.1 查看资料

打开厂家资料例程(例程下载见例程下载)。具体路径见下图。

wKgZPGggZg6AbPq6AAZ08Z79_fQ480.jpg

3.2 移植至工程

将厂家资料路径下的关于LCD底层的代码,复制到自己的工程中。一共有两次复制。并且自己的工程至少需要有微秒级延时函数。(工程可以参考入门手册工程模板)

wKgZO2ggZg6AW4DoAAfGbUbBxaY165.jpg

复制文件夹1

wKgZPGggZg-ANslfAAzchEj4Yyg869.jpg

复制文件夹2

打开自己的工程,将我们刚刚复制过来的文件导入.c和.h文件。

wKgZO2ggZg-AG_BgAAA3dZ-Pn7Q556.jpg

分别在lcd.h、touch.h 和 spi.h文件中定义三个宏,u32、u16与u

#include "board.h" #ifndef u8 #define u8 uint8_t #endif #ifndef u16 #define u16 uint16_t #endif #ifndef u32 #define u32 uint32_t #endif

wKgZPGggZhKAMOMvAAVFIUcsxjo280.jpg

test.c、lcd.c、touch.c和GUI.c文件中的头文件delay.h 注释掉

wKgZO2ggZhKAf7tpAAh9OmwF6vI425.jpg

wKgZPGggZhOAB0znAAeZCe1fhM8770.jpg

3.3 引脚选择

该屏幕需要设置14个接口,具体接口说明见厂家资料屏幕规格书。 当前厂家源码使用的是软件SPI接口,SPI时序部分厂家已经完成,我们只需要将硬件SPI引脚时序和延时配置好即可。所以对应接入的屏幕引脚请按照你的需要。这里选择的引脚见屏幕接线。

屏幕 开发板
GND GND
VCC 3.3V
SCK PA6
SDI PA7
RST PB1
RS PB0
CS PB10
LED PA5
SDO 不接
T_CLK PA4
T_CS PA3
T_DIN PA2
T_DO PA1
T_IRQ PA0

选择好引脚后,进入工程开始编写屏幕引脚初始化代码。

3.4. 端口修改

为了方便后续移植,我在lcd.h处宏定义了每一个引脚,后续根据需要进行修改即可。

//-----------------LCD端口移植---------------- #define RCC_LCD1_ENABLE() __RCC_GPIOA_CLK_ENABLE() #define RCC_LCD2_ENABLE() __RCC_GPIOB_CLK_ENABLE() //SCK #define PORT_LCD_SCL CW_GPIOA #define GPIO_LCD_SCL GPIO_PIN_6 //MOSI #define PORT_LCD_SDA CW_GPIOA #define GPIO_LCD_SDA GPIO_PIN_7 ////MIS0 //#define PORT_LCD_MIS GPIOB //#define GPIO_LCD_MIS GPIO_PIN_14 //NSS #define PORT_LCD_CS CW_GPIOB #define GPIO_LCD_CS GPIO_PIN_10 //DC #define PORT_LCD_DC CW_GPIOB #define GPIO_LCD_DC GPIO_PIN_0 //RES #define PORT_LCD_RES CW_GPIOB #define GPIO_LCD_RES GPIO_PIN_1 //BLK/LED #define PORT_LCD_BLK CW_GPIOA #define GPIO_LCD_BLK GPIO_PIN_5 //CS2/T_CS #define PORT_LCD_CS2 CW_GPIOA #define GPIO_LCD_CS2 GPIO_PIN_3 //PEN/T_IRQ #define PORT_LCD_PEN CW_GPIOA #define GPIO_LCD_PEN GPIO_PIN_0 //T_CLK #define PORT_LCD_TCLK CW_GPIOA #define GPIO_LCD_TCLK GPIO_PIN_4 //T_DIN #define PORT_LCD_TDIN CW_GPIOA #define GPIO_LCD_TDIN GPIO_PIN_2 //T_DO #define PORT_LCD_TD0 CW_GPIOA #define GPIO_LCD_TD0 GPIO_PIN_1

wKgZO2ggZhSAPR0zAAGskhzI_6k782.jpg

软件SPI引脚宏

将lcd.c源代码中的voidLCD_GPIOInit(void)修改为如下代码。

代码中已经做了引脚SPI的适配,如果没有修改相关引脚,则将宏定义USE_HARDWARE_SPI宏 为1即可。

void LCD_GPIOInit(void) { GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化结构体 RCC_LCD1_ENABLE(); // 使能GPIO时钟 RCC_LCD2_ENABLE(); // 使能GPIO时钟 GPIO_InitStruct.Pins = GPIO_LCD_SCL| // GPIO引脚 GPIO_LCD_SDA| GPIO_LCD_BLK; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; // 输出速度高 GPIO_Init(PORT_LCD_SCL, &GPIO_InitStruct); // 初始化 GPIO_InitStruct.Pins = GPIO_LCD_DC| GPIO_LCD_RES| GPIO_LCD_CS; GPIO_Init(PORT_LCD_CS, &GPIO_InitStruct); // 初始化 }

将lcd.h中的LCD端口定义宏,修改为:

//////////////////////////////////////////////////////////////////// //-----------------LCD端口定义---------------- //液晶控制口置1操作语句宏定义 #define LCD_CS_SET GPIO_WritePin(PORT_LCD_CS, GPIO_LCD_CS, GPIO_Pin_SET) #define LCD_RS_SET GPIO_WritePin(PORT_LCD_DC, GPIO_LCD_DC, GPIO_Pin_SET) #define LCD_SDA_SET GPIO_WritePin(PORT_LCD_SDA, GPIO_LCD_SDA, GPIO_Pin_SET) #define LCD_SCL_SET GPIO_WritePin(PORT_LCD_SCL, GPIO_LCD_SCL, GPIO_Pin_SET) #define LCD_RST_SET GPIO_WritePin(PORT_LCD_RES, GPIO_LCD_RES, GPIO_Pin_SET) #define LCD_LED_SET GPIO_WritePin(PORT_LCD_BLK, GPIO_LCD_BLK, GPIO_Pin_SET) //液晶控制口置0操作语句宏定义 #define LCD_CS_CLR GPIO_WritePin(PORT_LCD_CS, GPIO_LCD_CS, GPIO_Pin_RESET)//CS #define LCD_RS_CLR GPIO_WritePin(PORT_LCD_DC, GPIO_LCD_DC, GPIO_Pin_RESET)//DC #define LCD_SDA_CLR GPIO_WritePin(PORT_LCD_SDA, GPIO_LCD_SDA, GPIO_Pin_RESET)//SDA=MOSI #define LCD_SCL_CLR GPIO_WritePin(PORT_LCD_SCL, GPIO_LCD_SCL, GPIO_Pin_RESET)//SCL=SCLK #define LCD_RST_CLR GPIO_WritePin(PORT_LCD_RES, GPIO_LCD_RES, GPIO_Pin_RESET)//RES #define LCD_LED_CLR GPIO_WritePin(PORT_LCD_BLK, GPIO_LCD_BLK, GPIO_Pin_RESET)

wKgZPGggZhWAb65bAA3RLb_L3vI429.jpg

3.5. 驱动修改

在SPI.c文件中,找到void SPIv_WriteData(unsigned char Data)函数,将其修改如下。

void SPIv_WriteData(u8 Data) { unsigned char i=0; for(i=8;i>0;i--) { if(Data&0x80) LCD_SDA_SET; //输出数据 else LCD_SDA_CLR; LCD_SCL_CLR; LCD_SCL_SET; Data< <=1; } }

wKgZO2ggZhWAfuLCAARgyKGJRRY578.jpg

在spi.h中,厂家定义了关于SPI接口的宏,这里我们将其注释,使用我们自己的方式。

wKgZPGggZhaASP8oAA7FOqn6fIo438.jpg

打开touch.c 文件 修改以下内容:

修改u8TP_Init(void);函数

u8 TP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /* PEN */ GPIO_InitStructure.Pins = GPIO_LCD_PEN; GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP; // 上拉输入 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_Init(PORT_LCD_PEN, &GPIO_InitStructure); /* DOUT*/ GPIO_InitStructure.Pins = GPIO_LCD_TD0; GPIO_InitStructure.Mode = GPIO_MODE_INPUT_PULLUP; // 上拉输入 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_Init(PORT_LCD_TD0, &GPIO_InitStructure); /* TDIN*/ GPIO_InitStructure.Pins = GPIO_LCD_TDIN; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出模式 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_Init(PORT_LCD_TDIN, &GPIO_InitStructure); /* TCLK*/ GPIO_InitStructure.Pins = GPIO_LCD_TCLK; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出模式 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_Init(PORT_LCD_TCLK, &GPIO_InitStructure); /* TCS*/ GPIO_InitStructure.Pins = GPIO_LCD_CS2; GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;//推挽输出模式 GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; GPIO_Init(PORT_LCD_CS2, &GPIO_InitStructure); TP_Read_XY(&tp_dev.x,&tp_dev.y);//第一次读取初始化 return 1; }

注释掉void TP_Save_Adjdata(void);和u8 TP_Get_Adjdata(void);函数.

wKgZO2ggZhiALGBDAAyXXMeRTIg127.jpg

3.找到void TP_Adjust(void);函数将函数里面的TP_Save_Adjdata();和TP_Get_Adjdata();注释掉。

wKgZPGggZhmAPEnoAADY59AosDM317.jpg

我们打开 test.c 文件进行一些修改:找到void Touch_Test(void);函数,将里面的一些语句注释掉,并且将282行括号内的 key==1 改为 1。

wKgZO2ggZhyAL-vCAAgyWKEjYaU673.jpg

4.开lcd.c文件 找到voidLCD_Init(void);函数将里面的LCD_LED=1;替换成 LCD_LED_SET;

wKgZPGggZh2AYY_iAAOe2hXlH6s392.jpg

打开 touch.h 文件 将里面一部分代码改为下面的部分:

#define PEN GPIO_ReadPin(PORT_LCD_PEN,GPIO_LCD_PEN) //INT #define DOUT GPIO_ReadPin(PORT_LCD_TD0,GPIO_LCD_TD0) //MISO #define TDIN(x) GPIO_WritePin(PORT_LCD_TDIN,GPIO_LCD_TDIN,x?GPIO_Pin_SET:GPIO_Pin_RESET) //MOSI #define TCLK(x) GPIO_WritePin(PORT_LCD_TCLK,GPIO_LCD_TCLK,x?GPIO_Pin_SET:GPIO_Pin_RESET) //SCLK #define TCS(x) GPIO_WritePin(PORT_LCD_CS2, GPIO_LCD_CS2, x?GPIO_Pin_SET:GPIO_Pin_RESET) //CS

wKgZO2ggZh2ASCiWAAmG0SA5lYE670.jpg

然后我们打开touch.c 文件将文件中的下列形式的语句换成后面的语句:

TCLK = 1; -----换成-------> TCLK(1); TCLK = 0; -----换成-------> TCLK(0); TDIN = 1; -----换成-------> TDIN(1); TDIN = 0; -----换成-------> TDIN(0); TCS = 1; -----换成-------> TCS(1); TCS = 0; -----换成-------> TCS(0);

例如:

wKgZPGggZh6AJ-_oAALCsLzFgCc268.jpg

到这里就移植完成了,请移步到4节进行移植验证。

四、移植验证

在main.c中输入代码如下

/* * Change Logs: * Date Author Notes * 2024-06-18 LCKFB-LP first version */ #include "board.h" #include "stdio.h" #include "bsp_uart.h" #include "Lcd.h" #include "gui.h" #include "test.h" #include "spi.h" #include "touch.h" int32_t main(void) { board_init(); // 开发板初始化 uart1_init(115200); // 串口1波特率115200 LCD_Init(); //液晶屏初始化 while(1) { main_test(); //测试主界面 Test_Color(); //简单刷屏填充测试 Test_FillRec(); //GUI矩形绘图测试 Test_Circle(); //GUI画圆测试 Test_Triangle(); //GUI三角形绘图测试 English_Font_test(); //英文字体示例测试 Chinese_Font_test(); //中文字体示例测试 Pic_test(); //图片显示示例测试 Rotate_Test(); //旋转显示测试 //如果不带触摸,或者不需要触摸功能,请注释掉下面触摸屏测试项 Touch_Test(); //触摸屏手写测试 } }

上电效果:

wKgZO2ggZh6AIr-JAAdApOaIGS0429.jpg

模块移植成功案例(软件SPI):

链接:https://pan.baidu.com/s/1fVFssmnIdNbN4F0ZdxpwlQ?pwd=LCKF 提取码:LCKF

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 触摸屏
    +关注

    关注

    42

    文章

    2525

    浏览量

    122699
  • CW32
    +关注

    关注

    1

    文章

    326

    浏览量

    1993
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    慧通测控车载触摸屏测试系统,赋能车载触摸屏品质

    当前,汽车电子产业正加速向智能化、网联化升级,触摸屏作为核心交互载体,其品质要求持续提升。慧通测控此次推出的多功能触摸屏测试系统,不仅解决了企业在研发与量产中的测试痛点,更以专业的测试解决方案,为
    的头像 发表于 05-20 10:01 934次阅读
    慧通测控车载<b class='flag-5'>触摸屏</b>测试系统,赋能车载<b class='flag-5'>触摸屏</b>品质

    探索Adafruit 2.8"和3.2"彩色TFT触摸屏开发板v2:功能、使用与调试

    深入探讨一下Adafruit 2.8和3.2彩色TFT触摸屏开发板v2。 文件下载: 1743.pdf 一、产品概述 这款TFT显示尺寸较大,有2.8英和3.2英
    的头像 发表于 05-10 16:20 786次阅读

    1.69电容触摸屏:可靠稳定之选

    1.69电容触摸屏:可靠稳定之选 在电子设备的设计中,触摸屏的选择至关重要,它直接影响到用户体验和产品的整体性能。今天就为大家介绍一款颇具亮点的1.69电容
    的头像 发表于 05-10 14:05 281次阅读

    请问CW32中的CW是啥意思?

    CW32中的CW是啥意思?
    发表于 02-02 07:10

    CW32仿真器是什么?

    CW32仿真器是什么
    发表于 01-05 08:04

    请问CW32芯片有哪些功能模块

    CW32芯片有哪些功能模块
    发表于 12-26 08:11

    CW32 MCU温度监测应用

    监测环境温度,并通过串口将数据发送到PC端进行显示。 硬件连接 CW32 MCU LM35温度传感器 USB转串口模块 代码实现 #include \"cw32f030.h\"
    发表于 12-03 08:03

    cw32 systick怎么用?

    cw32 systick怎么用
    发表于 12-01 08:10

    OBOO鸥柏丨110英国产化麒麟系统触摸屏人才市场信息查询

    OBOO鸥柏100英卧式国产化麒麟系统触摸屏在人才市场招聘查询的应用优势在当今数字化的人才市场,高效准确的招聘查询设备至关重要。OBOO鸥柏(OBOO鸥柏)推出的110卧式国产化麒麟系统
    的头像 发表于 11-28 18:40 642次阅读
    OBOO鸥柏丨110英<b class='flag-5'>寸</b>大<b class='flag-5'>屏</b>国产化麒麟系统<b class='flag-5'>触摸屏</b>人才市场信息查询

    OBOO鸥柏丨65立体式国产化KylinOS麒麟系统触摸屏别墅智能一体机展示智能

    麒麟系统触摸屏一体机,为别墅等高端住宅提供了智能化展示解决方案。产品特点与优势国产化信创[OBOO鸥柏]的65立式触摸屏采用了国产化的麒麟系统(KylinOS)
    的头像 发表于 11-27 16:04 1114次阅读
    OBOO鸥柏丨65<b class='flag-5'>寸</b>立体式国产化KylinOS麒麟系统<b class='flag-5'>触摸屏</b>别墅智能一体机展示智能

    使用芯源CW32CW32L012开发评估板做了spi屏幕驱动

    CW32生态社区以极高的性价比入手了这块CW32L012开发评估板,开发板以底板、核心板、1.77TFT显示构成,所有的IO口都引出了排针,这点好评,使用杜邦线可以非常方便的连接
    的头像 发表于 11-21 11:34 920次阅读
    使用芯源<b class='flag-5'>CW32</b>的<b class='flag-5'>CW</b>32L012开发评估板做了spi屏幕驱动

    CW32 MCU用什么IDE开发?

    推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM则需要安装CW
    发表于 11-12 07:52

    工业智能网关:PLC触摸屏数据采集场景覆盖指南

    针对"能否采集PLC触摸屏数据"问题,本文通过功能模块化拆解,结合真实应用场景,解析工业智能网关在PLC触摸屏数据采集中的技术实现与商业价值。
    的头像 发表于 07-16 10:36 1695次阅读
    工业智能网关:PLC<b class='flag-5'>触摸屏</b>数据采集场景覆盖指南

    CW32模块使用 1.28LCD彩色显示屏

    一、模块来源 产品实物展示:   ​ 资料下载链接:https://pan.baidu.com/s/1lSjp7ISiKhkaXwqJsEOu2g 资料提取码: 8888 二、规格参数 以下信息见
    的头像 发表于 07-01 15:21 790次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>模块</b>使用 1.28<b class='flag-5'>寸</b>圆<b class='flag-5'>屏</b>LCD<b class='flag-5'>彩色显示屏</b>

    昆仑通态物联网触摸屏配置教程

    昆仑通态物联网触摸屏配置教程
    发表于 06-09 14:59 1次下载