OpenEdv-开源电子网

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

菜鸟求助各位大神,stm32f207配置ssd1963问题

[复制链接]

7

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2014-1-24
在线时间
4 小时
发表于 2014-1-24 09:32:42 | 显示全部楼层 |阅读模式
如图,不知道哪里出错了,想刷屏一直刷不了。求各位大神给个意见。
/*
控制线:RS<->FSMC_A0; WR<->FSMC_NWE<->D5; RD<->FSMC_NOE<->D4; CS<->FSMC_NE4<->G12; REST<->A1 ;LED_A<->C1


+-------------------+--------------------+------------------+------------------+
+                       SRAM pins assignment                                  +
+-------------------+--------------------+------------------+------------------+
| PD0  <-> FSMC_D2  | PE0  <-> FSMC_NBL0 | PF0  <-> FSMC_A0 | PG0 <-> FSMC_A10 |
| PD1  <-> FSMC_D3  | PE1  <-> FSMC_NBL1 | PF1  <-> FSMC_A1 | PG1 <-> FSMC_A11 |
| PD4  <-> FSMC_NOE | PE7  <-> FSMC_D4   | PF2  <-> FSMC_A2 | PG2 <-> FSMC_A12 |
| PD5  <-> FSMC_NWE | PE8  <-> FSMC_D5   | PF3  <-> FSMC_A3 | PG3 <-> FSMC_A13 |
| PD8  <-> FSMC_D13 | PE9  <-> FSMC_D6   | PF4  <-> FSMC_A4 | PG4 <-> FSMC_A14 |
| PD9  <-> FSMC_D14 | PE10 <-> FSMC_D7   | PF5  <-> FSMC_A5 | PG5 <-> FSMC_A15 |
| PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8   | PF12 <-> FSMC_A6 | PG12<-> FSMC_NE4 |
| PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9   | PF13 <-> FSMC_A7 |  
| PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10  | PF14 <-> FSMC_A8 | 
| PD14 <-> FSMC_D0  | PE14 <-> FSMC_D11  | PF15 <-> FSMC_A9 | 
| PD15 <-> FSMC_D1  | PE15 <-> FSMC_D12  |------------------+
+-------------------+--------------------+
*/




#include "ssd1963.h"



#define LCD_RAM    *(__IO uint16_t *) (0x6c000001)     //地址寄存器
#define LCD_REG    *(__IO uint16_t *) (0x6c000000) //指令寄存器

unsigned int  HDP=799;
unsigned int  HT=1000;
unsigned int  HPS=51;
unsigned int  LPS=46;
unsigned char HPW=20;

unsigned int  VDP=479;
unsigned int  VT=625;
unsigned int  VPS=22;
unsigned int  FPS=23;
unsigned char VPW=3;



void write_reg(unsigned short reg)
{
LCD_REG = reg;
}
void write_data(unsigned short dat)
{
LCD_RAM = dat;
}
void write_cmd(unsigned short reg,unsigned short dat)
{
LCD_REG = reg;
LCD_RAM = dat;
}
unsigned short read_reg(void)
{
return LCD_REG;
}
unsigned short read_data(void)
{
return LCD_RAM;
}
static delay(unsigned int dl)
{
unsigned int i,y;
for(i = 0; i < dl; i++)
{
for(y = 0; y < 1000; y++);
}
}
void lcd_set_colpage_addr(unsigned int colS,unsigned int colE,unsigned int pageS,unsigned int pageE)
{
/* set column address */
write_reg(SSD1963_REG_SET_COL_ADDRESS);
/* start column */
write_data(colS >> 8);
write_data(colS & 0x00ff);
/* end column */
write_data(colE >> 8);
write_data(colE & 0x00ff);

/* set page address */
write_reg(SSD1963_REG_SET_PAGE_ADDRESS);
/* start page */
write_data(pageS >> 8);
write_data(pageS & 0x00ff);
/* end page */
write_data(pageE >> 8); 
write_data(pageE & 0x00ff);

}

void lcd_clear(unsigned int color)
{
uint32_t index = 0;
lcd_set_colpage_addr(0, TFT_WIDTH-1, 0, TFT_HEIGHT-1);
write_reg(SSD1963_REG_WR_MEM_START);

while( index < (TFT_WIDTH * TFT_HEIGHT) )
{
//write_data(color);
write_data(color >> 8);
write_data(color & 0x00ff);
index++;
}
}
/*
控制线:RS<->FSMC_A0; WR<->FSMC_NWE<->D5; RD<->FSMC_NOE<->D4; CS<->FSMC_NE4<->G12; REST<->A1 ;LED_A<->C1


+-------------------+--------------------+------------------+------------------+
+                       SRAM pins assignment                                  +
+-------------------+--------------------+------------------+------------------+
| PD0  <-> FSMC_D2  | PE0  <-> FSMC_NBL0 | PF0  <-> FSMC_A0 | PG0 <-> FSMC_A10 |
| PD1  <-> FSMC_D3  | PE1  <-> FSMC_NBL1 | PF1  <-> FSMC_A1 | PG1 <-> FSMC_A11 |
| PD4  <-> FSMC_NOE | PE7  <-> FSMC_D4   | PF2  <-> FSMC_A2 | PG2 <-> FSMC_A12 |
| PD5  <-> FSMC_NWE | PE8  <-> FSMC_D5   | PF3  <-> FSMC_A3 | PG3 <-> FSMC_A13 |
| PD8  <-> FSMC_D13 | PE9  <-> FSMC_D6   | PF4  <-> FSMC_A4 | PG4 <-> FSMC_A14 |
| PD9  <-> FSMC_D14 | PE10 <-> FSMC_D7   | PF5  <-> FSMC_A5 | PG5 <-> FSMC_A15 |
| PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8   | PF12 <-> FSMC_A6 | PG12<-> FSMC_NE4 |
| PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9   | PF13 <-> FSMC_A7 |  
| PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10  | PF14 <-> FSMC_A8 | 
| PD14 <-> FSMC_D0  | PE14 <-> FSMC_D11  | PF15 <-> FSMC_A9 | 
| PD15 <-> FSMC_D1  | PE15 <-> FSMC_D12  |------------------+
+-------------------+--------------------+
*/

void LCD_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
    FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; 
FSMC_NORSRAMTimingInitTypeDef  writeTiming;

    RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); //使能FSMC时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PA1 推挽输出 复位
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;      //PC1 推挽输出 背光
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);

  //PORTD复用推挽输出  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15; // //PORTD复用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //复用推挽   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
 
//PORTE复用推挽输出  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; // //PORTD复用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //复用推挽   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
//PORTF福永推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //复用推挽   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOF, &GPIO_InitStructure);  
 
    //PORTG复用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //复用推挽   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOG, &GPIO_InitStructure); 
 
readWriteTiming.FSMC_AddressSetupTime = 0x01; //地址建立时间(ADDSET)为2个HCLK 1/96M=21ns
    readWriteTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到
    readWriteTiming.FSMC_DataSetupTime = 0x0f; // 数据保存时间为16个HCLK
    readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
    readWriteTiming.FSMC_CLKDivision = 0x00;
    readWriteTiming.FSMC_DataLatency = 0x00;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A 
    

writeTiming.FSMC_AddressSetupTime = 0x00; //地址建立时间(ADDSET)为1个HCLK  
    writeTiming.FSMC_AddressHoldTime = 0x00; //地址保持时间(ADDHLD)模式A未用到
    writeTiming.FSMC_DataSetupTime = 0x04; ////数据保存时间为5个HCLK
    writeTiming.FSMC_BusTurnAroundDuration = 0x00;
    writeTiming.FSMC_CLKDivision = 0x00;
    writeTiming.FSMC_DataLatency = 0x00;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A; //模式A 

 
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  使用NE4 
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM; //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    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_Enable; // 读写使用不同的时序
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读时序
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1

GPIO_SetBits(GPIOG,GPIO_Pin_12); // 置位cs
GPIO_SetBits(GPIOA,GPIO_Pin_1); // 置位REST
delay(10);
GPIO_ResetBits(GPIOA,GPIO_Pin_1); //复位REST
delay(10);  
GPIO_SetBits(GPIOA,GPIO_Pin_1);  //置位REST
GPIO_SetBits(GPIOD,GPIO_Pin_4);  //置位RD
GPIO_SetBits(GPIOD,GPIO_Pin_5);  //置位WR
delay(10);
GPIO_SetBits(GPIOG,GPIO_Pin_12);   //复位CS



以下不懂是怎么写的,复制网上的ssd1963的初始化函数。
#define   LCD_WR_REG write_reg
#define   LCD_WR_DATA write_data
#define   Delay_10ms delay
 /* 命令E2H Set PLL MN*/
    LCD_WR_REG(0x00E2);
    /* 参数1 设置VCO频率
       SSD1963外部晶振频率为10MHz,VCO要求大有250MHz
       36倍频,最后得360MHz*/
    LCD_WR_DATA(0x0023);
    /* 参数2 设置PLL频率
       M=2, PLL=360/(M+1)=120MHz*/     
    LCD_WR_DATA(0x0002);
    /* 参数3 使设置生效*/        
    LCD_WR_DATA(0x0004);

    LCD_WR_REG(0x00E0);     /* Set PLL */
    LCD_WR_DATA(0x0001);   /* PLL enable  */
    Delay_10ms(10);        /* 延时100ms   */
    LCD_WR_REG(0x00E0);  
    LCD_WR_DATA(0x0003);
    Delay_10ms(10);


    LCD_WR_REG(0x0001);   /*  软件复位命令,没有参数 */
    Delay_10ms(10);

    LCD_WR_REG(0x00E6);   /*  Set LSHIFT Frequency */
    LCD_WR_DATA(0x0004);
    LCD_WR_DATA(0x0093);
    LCD_WR_DATA(0x00e0);

    LCD_WR_REG(0x00B0);            /*命令Set LCD Mode */
    LCD_WR_DATA(0x0000);
    LCD_WR_DATA(0x0000);
    LCD_WR_DATA((HDP>>8)&0X00FF);  /*Set the horizontal panel size*/  
    LCD_WR_DATA(HDP&0X00FF);
    LCD_WR_DATA((VDP>>8)&0X00FF);  /*Set the horizontal panel size*/ 
    LCD_WR_DATA(VDP&0X00FF);
    LCD_WR_DATA(0x0000);

    LCD_WR_REG(0x00B4);            /*Set Horizontal Period */
    LCD_WR_DATA((HT>>8)&0X00FF);  //Set HT
    LCD_WR_DATA(HT&0X00FF);
    LCD_WR_DATA((HPS>>8)&0X00FF);  //Set HPS
    LCD_WR_DATA(HPS&0X00FF);
    LCD_WR_DATA(HPW);              //Set HPW
    LCD_WR_DATA((LPS>>8)&0X00FF);  //Set HPS
    LCD_WR_DATA(LPS&0X00FF);
    LCD_WR_DATA(0x0000);

    LCD_WR_REG(0x00B6);            //VSYNC
    LCD_WR_DATA((VT>>8)&0X00FF);   //Set VT
    LCD_WR_DATA(VT&0X00FF);
    LCD_WR_DATA((VPS>>8)&0X00FF);  //Set VPS
    LCD_WR_DATA(VPS&0X00FF);
    LCD_WR_DATA(VPW);              //Set VPW
    LCD_WR_DATA((FPS>>8)&0X00FF);  //Set FPS
    LCD_WR_DATA(FPS&0X00FF);

    LCD_WR_REG(0x00BA);
    LCD_WR_DATA(0x0005);           //GPIO[3:0] out 1

    LCD_WR_REG(0x00B8);
    LCD_WR_DATA(0x0007);    //GPIO3=input, GPIO[2:0]=output
    LCD_WR_DATA(0x0001);    //GPIO0 normal

    LCD_WR_REG(0x0036);       //rotation
    LCD_WR_DATA(0x0008|(0<<5));

    LCD_WR_REG(0x00F0);     //pixel data interface
    LCD_WR_DATA(0x0003);

LCD_WR_REG(0x00F1);     //pixel data interface
    LCD_WR_DATA(0x0003);

/* write_reg(0x0021); //进入图形颜色翻转模式

write_reg(0x00BC);//重要
write_data(0x0080);//对比度
write_data(0x0080);//亮度
write_data(0x0080);//饱和度值  
write_data(0x0001);//处理机允许
*/

    Delay_10ms(50);

lcd_clear(BLACK);
    LCD_WR_REG(0x0029);        //display on

    LCD_WR_REG(0x00BE);        //set PWM for B/L
    LCD_WR_DATA(0x0006);
    LCD_WR_DATA(0x0080);
    
    LCD_WR_DATA(0x0001);
    LCD_WR_DATA(0x00f0);
    LCD_WR_DATA(0x0000);
    LCD_WR_DATA(0x0000);

    LCD_WR_REG(0x00d0);//设置动态背光控制配置 
    LCD_WR_DATA(0x000d);

GPIO_SetBits(GPIOC,GPIO_Pin_1);

}

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 05:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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