因为使用的是软件SPI,比较简单,只要两步就能移植成功:
文件下载:https://wwi.lanzoup.com/ivAfY04el1ef
中景园官方源文件:https://pan.baidu.com/s/1wMQckYIXUWlyOZ6CDWl-9g 提取码:8888
把中景园lcd_init.c(.h)官方初始化源文件的引脚
#define LCD_SCLK_Clr() GPIO_ResetBits(GPIOG,GPIO_Pin_12)//SCL=SCLK
#define LCD_SCLK_Set() GPIO_SetBits(GPIOG,GPIO_Pin_12)
#define LCD_MOSI_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_5)//SDA=MOSI
#define LCD_MOSI_Set() GPIO_SetBits(GPIOD,GPIO_Pin_5)
#define LCD_RES_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_4)//RES
#define LCD_RES_Set() GPIO_SetBits(GPIOD,GPIO_Pin_4)
#define LCD_DC_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_15)//DC
#define LCD_DC_Set() GPIO_SetBits(GPIOD,GPIO_Pin_15)
#define LCD_CS_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_1)//CS
#define LCD_CS_Set() GPIO_SetBits(GPIOD,GPIO_Pin_1)
#define LCD_BLK_Clr() GPIO_ResetBits(GPIOE,GPIO_Pin_8)//BLK
#define LCD_BLK_Set() GPIO_SetBits(GPIOE,GPIO_Pin_8)
改成自己板子的引脚,和龙邱的操作方式
(注意自己板子的)
#define LCD_CS_Clr() LQ_PinWrite(D11, 0U)//CS
#define LCD_CS_Set() LQ_PinWrite(D11, 1U)
#define LCD_SCLK_Clr() LQ_PinWrite(D12, 0U) //SCLK=SCL
#define LCD_SCLK_Set() LQ_PinWrite(D12, 1U)
#define LCD_MOSI_Clr() LQ_PinWrite(E12, 0U) //MOSI=SDA
#define LCD_MOSI_Set() LQ_PinWrite(E12, 1U)
#define LCD_RES_Clr() LQ_PinWrite(B13, 0U) //RST
#define LCD_RES_Set() LQ_PinWrite(B13, 1U)
#define LCD_DC_Clr() LQ_PinWrite(E11, 0U) //DC
#define LCD_DC_Set() LQ_PinWrite(E11, 1U)
#define LCD_BLK_Clr() LQ_PinWrite(G11, 0U)//BLK
#define LCD_BLK_Set() LQ_PinWrite(G11, 1U)
并修改LCD_GPIO_Init(void)引脚初始化函数为龙邱的方式:
(这段代码直接去龙邱的lcd文件里复制就行)
void LCD_GPIO_Init(void)
{
//-----端口初始化----//
CLOCK_EnableClock(kCLOCK_Iomuxc); // IO口时钟使能
IOMUXC_SetPinMux(IOMUXC_GPIO_B1_05_GPIO2_IO21,0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_B1_04_GPIO2_IO20, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_B1_10_GPIO2_IO26, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_B0_15_GPIO2_IO15, 0U);
IOMUXC_SetPinMux(IOMUXC_GPIO_B1_03_GPIO2_IO19, 0U);
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_05_GPIO2_IO21,0x10B0u);
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_04_GPIO2_IO20,0x10B0u);
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_10_GPIO2_IO26,0x10B0u);
IOMUXC_SetPinConfig(IOMUXC_GPIO_B0_15_GPIO2_IO15,0x10B0u);
IOMUXC_SetPinConfig(IOMUXC_GPIO_B1_03_GPIO2_IO19,0x10B0u);
//输出口管脚配置结构体
gpio_pin_config_t GPIO_Output_Config = {kGPIO_DigitalOutput, //GPIO为输出方向
1, //高电平
kGPIO_NoIntmode //非中断模式
};
GPIO_PinInit(GPIO2, 21, &GPIO_Output_Config); // CS D12
GPIO_PinInit(GPIO2, 20, &GPIO_Output_Config); // SCL E12
GPIO_PinInit(GPIO2, 26, &GPIO_Output_Config); // SDI B13
GPIO_PinInit(GPIO2, 15, &GPIO_Output_Config); // DC E11
GPIO_PinInit(GPIO2, 19, &GPIO_Output_Config); // RST D11
}
**注意这里:**龙邱的默认结构体写的是0,引脚初始化低电平。要改成高电平才能使能屏幕。不然点不亮
完成后在文件开头加上要用到的.h文件
把stm32自带的定义变量类型的头文件"sys.h"换成"stdint.h"
因为中景园用的是stm32自带的delay.h文件里的delay函数
我们要换成龙邱写法的函数
把开头的include "delay.h"散掉
并把这段代码加到代码的开头
void delay_ms(uint16_t ms) //移植 延时时间
{
volatile uint32_t i = 0;
while(ms--)
{
for (i = 0; i < 20000; ++i)
{
__asm("NOP"); /* delay */
}
}
}
其他主体代码就不用改了
在main.c里输入以下代码试试效果吧:
LQ_PinInit(G11, PIN_MODE_OUTPUT, 1);//初始化BL背光
LQ_PinWrite(G11, 1U);
LCD_Init();
LCD_Fill(0,0,LCD_W,LCD_H,WHITE); //初始化背景为白色
LCD_ShowChinese(40,0,"中景园电子",RED,WHITE,32,0);