打印

急求解STM32F107 驱动拓普微的LM2068R 的问题RA8803

[复制链接]
3680|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yueqiang32|  楼主 | 2011-10-3 17:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STM32F107 驱动拓普微的液晶屏LM2068R 控制器为RA8803 ,调了好几天了,一直调不出来都快崩溃!
问题:
1、读出来的忙信号一直是高电平,而用万用表测其引脚却是低电平。
2、液晶屏一直是白得,什么都不显示。
3、数据输出,都能万用表在其引脚上测出 是正确的。
4、开始用单片机驱动能过正常显示,没有什么问题。
我考虑到的是:是不是STM32的速度和屏的速度不匹配?读取忙引脚有问题?
希望,那位好人能给我一些建议!如何去解决这些问题,非常感谢!
看看源程序:
//主程序
#include"stm32f10x.h"
#include"LCM.H"
ErrorStatus HSEStartUpStatus;

void RCC_Configuration(void)
{
// SystemInit();
  RCC_DeInit();
  RCC_HSEConfig(RCC_HSE_ON);
  HSEStartUpStatus = RCC_WaitForHSEStartUp();
  if(HSEStartUpStatus == SUCCESS)     //SUCCESS:HSE晶振稳定且就绪
  {
      /*设置AHB时钟(HCLK)*/
      RCC_HCLKConfig(RCC_SYSCLK_Div1);  //RCC_SYSCLK_Div1--AHB时钟 = 系统时钟
  
  
      /* 设置高速AHB时钟(PCLK2)*/
      RCC_PCLK2Config(RCC_HCLK_Div8);     //RCC_HCLK_Div8--APB2时钟 = HCLK
  
  
      /*设置低速AHB时钟(PCLK1)*/   
  RCC_PCLK1Config(RCC_HCLK_Div2);      //RCC_HCLK_Div2--APB1时钟 = HCLK / 2
  
  
      /*设置FLASH存储器延时时钟周期数*/
      FLASH_SetLatency(FLASH_Latency_2);    //FLASH_Latency_2  2延时周期
     
  /*选择FLASH预取指缓存的模式*/  
      FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  /*设置PLL时钟源及倍频系数*/
      RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);   
  // PLL的输入时钟 = HSE时钟频率;RCC_PLLMul_9--PLL输入时钟x 9
     
    /*使能PLL */
      RCC_PLLCmd(ENABLE);
  
  
      /*检查指定的RCC标志位(PLL准备好标志)设置与否*/   
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)     
         {
         }
  
  
      /*设置系统时钟(SYSCLK) */
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  //RCC_SYSCLKSource_PLLCLK--选择PLL作为系统时钟
  
  
      /* PLL返回用作系统时钟的时钟源*/
      while(RCC_GetSYSCLKSource() != 0x08)     //0x08:PLL作为系统时钟
         {
         }
     }
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
}

void Init(void)
{
RCC_Configuration();
LCM_GPIOConfiguration(GPIOE);
Init_LCM(GPIOE);
delay(10);
Init_LCM(GPIOE);
delay(10);
LcmClear(GPIOE);
}
int main(void)
{
Init();                                                                                
   WriteCmd(GPIOE,0xf1); WriteCmd(GPIOE,0x1f);
WriteCmd(GPIOE,0x60); WriteCmd(GPIOE,0x0a);
WriteCmd(GPIOE,0x70); WriteCmd(GPIOE,0x50);
   ShowText(GPIOE,"拓普微 LM2068R");

while(1)
{
  
}
}
//LM2068R  驱动程序
#include"LCM.H"
  //向数据口送一个八位的数据
void Send8Bit(GPIO_TypeDef* GPIOx,uint8_t data)   
{
   uint16_t pin=0x0001;
  uint8_t x,y=0x01;
  for(x=0;x<8;x++)
  {
   y=y&data;
   if(y==1)
   GPIO_WriteBit(GPIOx,pin,Bit_SET);
   else
   GPIO_WriteBit(GPIOx,pin,Bit_RESET);
   y=0x01;
   pin=pin<<1;
   data=data>>1;
  }
}
//读取忙碌信号
uchar Get_BusyBit()
{
uchar k;
   
k=GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10);
return k;
}

//写数据
void WriteData(GPIO_TypeDef* GPIOx,uchar m)
{
// while(Get_BusyBit()==1) ;
delay(10);
   Send8Bit(GPIOx,m);
      delay(2);
  LCM_CS_0;
    delay(2);
  LCM_RS_1;
   delay(2);
  LCM_RD_1;
    delay(2);
  LCM_WR_0;
    delay(10);  
  LCM_WR_1;
    delay(2);
     LCM_RS_0;
    delay(2);
  LCM_CS_1;
    delay(2);
// while(Get_BusyBit()==1) ;

}
//写命令
void WriteCmd(GPIO_TypeDef* GPIOx,uchar m)
{
//    while(Get_BusyBit()==1) ;
  delay(10);
Send8Bit(GPIOx,m);
    delay(2);
  LCM_CS_0;
     delay(2);
  LCM_RS_0;
    delay(2);
     LCM_RD_1;
     delay(2);
  LCM_WR_0;
      delay(10);
  LCM_WR_1;
     delay(2);
     LCM_RS_0;
    delay(2);
  LCM_CS_1;
      delay(2);
// while(Get_BusyBit()==1) ;
}
  //写字符串
void ShowText(GPIO_TypeDef* GPIOx,uchar *text)
{
while(*text>0)
  {
   WriteData(GPIOx,*text);
   text++;
   delay(10);
}
}
//初始化函数
void Init_LCM(GPIO_TypeDef* GPIOx)
{
Send8Bit(GPIOx,0xff);
delay(2);
LCM_CS_1;
delay(2);
LCM_WR_1;
delay(2);
LCM_RS_1;
delay(2);
LCM_RES_0;
delay_1ms(300);
LCM_RES_1;
delay_1ms(150);
WriteCmd(GPIOx,0x00); WriteCmd(GPIOx,0xcd);
WriteCmd(GPIOx,0x11); WriteCmd(GPIOx,0x00);
WriteCmd(GPIOx,0x81); WriteCmd(GPIOx,0x40);
WriteCmd(GPIOx,0xf0); WriteCmd(GPIOx,0xa0);
WriteCmd(GPIOx,0x01);WriteCmd(GPIOx,0xf2);
WriteCmd(GPIOx,0x90);WriteCmd(GPIOx,0x04);
WriteCmd(GPIOx,0x20); WriteCmd(GPIOx,0x27);
WriteCmd(GPIOx,0x30); WriteCmd(GPIOx,0xef);
WriteCmd(GPIOx,0x40); WriteCmd(GPIOx,0x00);
WriteCmd(GPIOx,0x50); WriteCmd(GPIOx,0x00);
WriteCmd(GPIOx,0x21); WriteCmd(GPIOx,0x27);
WriteCmd(GPIOx,0x31); WriteCmd(GPIOx,0xef);
WriteCmd(GPIOx,0x41);WriteCmd(GPIOx,0x00);
WriteCmd(GPIOx,0x51);WriteCmd(GPIOx,0x00);
WriteCmd(GPIOx,0xa0);WriteCmd(GPIOx,0x11);
WriteCmd(GPIOx,0x02);WriteCmd(GPIOx,0x10);
}
  //LCM GPIO口的配置
void LCM_GPIOConfiguration(GPIO_TypeDef* GPIOx)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|
       GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOx,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;  //测忙引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
   //清屏函数
void LcmClear(GPIO_TypeDef* GPIOx)
{
uint8_t j,i;
  WriteCmd(GPIOx,0x60); WriteCmd(GPIOx,0x00);
WriteCmd(GPIOx,0x70); WriteCmd(GPIOx,0x00);
for(i=0;i<40;i++)
  for(j=0;j<240;j++)
  {
   WriteData(GPIOx,0x00);
   delay(100);
  }
}


void delay(uint32_t n)
{
uint32_t x,y;
for(x=0;x<n;x++);
  for(y=0;y<109;y++)
  {;}
}
void delay_1ms(uint m)
{
uint32_t x,y;
for(x=0;x<m;x++);
  for(y=0;y<7200;y++)
  {;}
}

相关帖子

沙发
starlu163| | 2012-8-10 11:27 | 只看该作者
Hi,好。
我也遇到拓普微的屏,调一天了,也一直白屏。不知道你的屏怎么调好的。
qq 362545714
谢谢

使用特权

评论回复
板凳
1527820835| | 2013-8-15 12:44 | 只看该作者
我也遇到了,调了一天多了,依然白屏,调节电位器,对比度没变,不知道那里出问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

18

帖子

1

粉丝