单片机移植教程—恩智浦RT1052移植中景园屏幕

本文章可以作为单片机移植代码的入门

因为使用的是软件SPI,比较简单,只要两步就能移植成功:
文件下载:https://wwi.lanzoup.com/ivAfY04el1ef
中景园官方源文件:https://pan.baidu.com/s/1wMQckYIXUWlyOZ6CDWl-9g 提取码:8888

1.修改指定的引脚和头文件

把中景园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"

2.替换delay延时函数

因为中景园用的是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);

你可能感兴趣的:(stm32学习,单片机,stm32)