OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9077|回复: 6

STM32F103VET6 FSMC控制LIL9341 8位彩色液晶屏 为什么不显示呢

[复制链接]

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2013-5-9
在线时间
4 小时
发表于 2013-5-9 11:33:41 | 显示全部楼层 |阅读模式

#include "tft.h"
#include "stm32f10x_fsmc.h"
#include "time.h"
#include "stm32f10x_bkp.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_pwr.h"
#define Bank1_LCD_D    ((uint32_t)0x60020000)    //disp Data ADDR
#define Bank1_LCD_C    ((uint32_t)0x60000000)  //disp Reg ADDR
uint16_t  a1;
void Delay1(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

//************************************写寄存器地址函数************************************//
void LCD_WR_REG(uint8_t index)
{
 *(__IO uint8_t *) (Bank1_LCD_C)= index;
}
//***********************************写寄存器数据函数************************************//
void    LCD_WR_Data(uint8_t val)
{  
 *(__IO uint8_t *) (Bank1_LCD_D)= val;  
}

void LCD_WR_DATA(uint8_t val)
{
 *(__IO uint8_t *) (Bank1_LCD_D)= val;
}

void GPIO_Configuration(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;         //LED1控制--PB5
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);    

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;             //USART1 TX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       //复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);         //A端口

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;            //USART1 RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //复用开漏输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);             //A端口
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;             //USART2 TX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       //复用推挽输出
  GPIO_Init(GPIOA, &GPIO_InitStructure);         //A端口

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;              //USART2 RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //复用开漏输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);             //A端口
          
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ;   //LED2, LED3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 |
                                GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* NE1 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
  /* RS */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
 
   GPIO_SetBits(GPIOD, GPIO_Pin_7);   //CS=1
  //GPIO_SetBits(GPIOD, GPIO_Pin_14| GPIO_Pin_15 |GPIO_Pin_0 | GPIO_Pin_1);   
 // GPIO_SetBits(GPIOE, GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10);  
 // GPIO_ResetBits(GPIOE, GPIO_Pin_0);
  //GPIO_ResetBits(GPIOE, GPIO_Pin_1);  //RESET=0
  GPIO_SetBits(GPIOD, GPIO_Pin_4);      //RD=1
  GPIO_SetBits(GPIOD, GPIO_Pin_5);   //WR=1
  GPIO_SetBits(GPIOD, GPIO_Pin_13);   //LIGHT

 
 }
//**************************FSMCINIT*********************************************//
void FSMC_LCD_Init(void)
{
  FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
  FSMC_NORSRAMTimingInitTypeDef  p;

  p.FSMC_AddressSetupTime = 0x10;
  p.FSMC_AddressHoldTime = 0x00;
  p.FSMC_DataSetupTime = 0x05;
  p.FSMC_BusTurnAroundDuration = 0x00;
  p.FSMC_CLKDivision = 0x00;
  p.FSMC_DataLatency = 0x00;
  p.FSMC_AccessMode = FSMC_AccessMode_B;

   FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
 
    FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
 
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
 
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
 
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
 
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
 
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
 
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
 
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  
 
   
    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
   
    /* 使能 FSMC Bank1_SRAM Bank */
 
    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE); 
}

//***********************************TFT 复位操作***************************************//
void lcd_rst(void)
{
 GPIO_ResetBits(GPIOE, GPIO_Pin_1);   
  Delay1(0xAFFFFf);         
  GPIO_SetBits(GPIOE, GPIO_Pin_1 );   
 Delay1(0xAFFFFf); 
}

//**********************************初始化函数*******************************************//
//
void LCD_Init(void)
{
   lcd_rst();  
  LCD_WR_REG(0xCF); 
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0xC1);
  LCD_WR_DATA(0X30);
 
  LCD_WR_REG(0xED); 
  LCD_WR_DATA(0x64);
  LCD_WR_DATA(0x03);
  LCD_WR_DATA(0X12);
  LCD_WR_DATA(0X81);
 
  LCD_WR_REG(0xE8); 
  LCD_WR_DATA(0x85);
  LCD_WR_DATA(0x10);
  LCD_WR_DATA(0x7A);
 
  LCD_WR_REG(0xCB); 
  LCD_WR_DATA(0x39);
  LCD_WR_DATA(0x2C);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x34);
  LCD_WR_DATA(0x02);
 
  LCD_WR_REG(0xF7); 
  LCD_WR_DATA(0x20);
  
  LCD_WR_REG(0xEA); 
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  
  LCD_WR_REG(0xC0);    //Power control
  LCD_WR_DATA(0x1B);   //VRH[5:0]
  
  LCD_WR_REG(0xC1);    //Power control
  LCD_WR_DATA(0x13);   //SAP[2:0];BT[3:0]
  
  LCD_WR_REG(0xC5);    //VCM control
  LCD_WR_DATA(0x30);   //3F
  LCD_WR_DATA(0x30);   //3C
  
  LCD_WR_REG(0xC7);    //VCM control2
  LCD_WR_DATA(0XB7);
  
  LCD_WR_REG(0x36);    // Memory Access Control
  LCD_WR_DATA(0xa8);
  
  LCD_WR_REG(0x3A);  
  LCD_WR_DATA(0x55);
  
  LCD_WR_REG(0xB1);  
  LCD_WR_DATA(0x00);  
  LCD_WR_DATA(0x18);
  
  LCD_WR_REG(0xB6);    // Display Function Control
  LCD_WR_DATA(0x0A);
  LCD_WR_DATA(0xA2);
  
  LCD_WR_REG(0xF2);    // 3Gamma Function Disable
  LCD_WR_DATA(0x00);
  
  LCD_WR_REG(0x26);    //Gamma curve selected
  LCD_WR_DATA(0x01);
  
  LCD_WR_REG(0xE0);    //Set Gamma
  LCD_WR_DATA(0x0F);
  LCD_WR_DATA(0x2A);
  LCD_WR_DATA(0x28);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x0E);
  LCD_WR_DATA(0x08);
  LCD_WR_DATA(0x54);
  LCD_WR_DATA(0XA9);
  LCD_WR_DATA(0x43);
  LCD_WR_DATA(0x0A);
  LCD_WR_DATA(0x0F);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  
  LCD_WR_REG(0XE1);    //Set Gamma
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x15);
  LCD_WR_DATA(0x17);
  LCD_WR_DATA(0x07);
  LCD_WR_DATA(0x11);
  LCD_WR_DATA(0x06);
  LCD_WR_DATA(0x2B);
  LCD_WR_DATA(0x56);
  LCD_WR_DATA(0x3C);
  LCD_WR_DATA(0x05);
  LCD_WR_DATA(0x10);
  LCD_WR_DATA(0x0F);
  LCD_WR_DATA(0x3F);
  LCD_WR_DATA(0x3F);
  LCD_WR_DATA(0x0F);
  
  LCD_WR_REG(0x2B);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x01);
  LCD_WR_DATA(0x3f);
  
  LCD_WR_REG(0x2A);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0xef); 
  
  LCD_WR_REG(0x11); //Exit Sleep
  LCD_WR_REG(0x29); //display on
    LCD_WR_REG(0x2c);    
}
////全屏填充
void fullfull(uint16_t color)
{
   uint16_t i;
    uint8_t color1;
   uint8_t color2;
   color1=(color>>8)&0x00ff;
    color2=color&0x00ff; 
 /*LCD_WR_REG(0x2B);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x01);
  LCD_WR_DATA(0x3f);
 
   LCD_WR_REG(0x2A);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0x00);
  LCD_WR_DATA(0xef); */
   LCD_WR_REG(0x2c);//开始写数据
  for(i=0;i<7680;i++)
 {
     LCD_WR_DATA(color1);
     LCD_WR_DATA(color2);  
  }
}
void TFT_Draw_Point(u16 x,u8 y,u16 color)
 {
    uint8_t color1;
   uint8_t color2;
   color1=(color>>8);
    color2=color&0x00ff; 
    /*LCD_WR_REG(0X2A);
    LCD_WR_DATA(x>>8);
    LCD_WR_DATA(x&0xFF);
 
    LCD_WR_REG(0X2B);
    LCD_WR_DATA(0x00);
    LCD_WR_DATA(y);*/
 
    LCD_WR_REG(0x2C);//开始写
    LCD_WR_DATA(color1);
   LCD_WR_DATA(color2);
 }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-9 15:21:10 | 显示全部楼层
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2013-5-9
在线时间
4 小时
 楼主| 发表于 2013-5-9 16:33:51 | 显示全部楼层
下载上你的程序能读到ID
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2013-5-9
在线时间
4 小时
 楼主| 发表于 2013-5-9 16:34:17 | 显示全部楼层
但是你的程序是16位的啊!
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2013-5-9
在线时间
4 小时
 楼主| 发表于 2013-5-15 15:30:17 | 显示全部楼层
问题已解决!!如有需要帮助的话可以给我发邮件 weilongyouxiang@163.com
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-3-28
在线时间
0 小时
发表于 2013-5-29 16:39:58 | 显示全部楼层
回复【5楼】飞翔龙:
---------------------------------
楼主能说说问题出在哪不?
回复 支持 反对

使用道具 举报

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2013-5-9
在线时间
4 小时
 楼主| 发表于 2013-6-27 16:30:41 | 显示全部楼层
你现在解决了吗? 问题出在了延时上?液晶屏有一个rst复位管教那需要很大的延时!需要的话可以加我QQ837078464
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 10:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表