搜索
bottom↓
回复: 10

51驱动修改为STM32驱动不成功

[复制链接]

出0入0汤圆

发表于 2012-5-15 22:58:42 | 显示全部楼层 |阅读模式
最近对液晶屏感兴趣,在冯大侠手里买了一块,到手之后在51上面可以驱动正常显示各种画面,但是 我把驱动程序修改 移植到STM32的开发环境下面,程序不工作了 十分郁闷,忘高手指点一二,不胜感激!
备注:keilV4开发环境,修改的地方为
//DP_L = j;                  //DP_L为8位单片机里面的P1端口
//DP_H = j>>8;          //DP_H为8位单片机里面的P2端口
DATAOUT(j);           //#define DATAOUT(x) GPIOB->ODR=x; //数据输出  

我的方法是将原来P1、P2两个端口的地方 全部修改为 dataout()输出,但是 到最后不行。        

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-5-15 23:03:26 | 显示全部楼层
你能保证时钟和GPIO初始化是正确的么  

出0入0汤圆

发表于 2012-5-15 23:04:34 | 显示全部楼层
代码太少
什么型号的stm32,有fsmc不

出0入0汤圆

 楼主| 发表于 2012-5-16 07:49:43 | 显示全部楼层
型号是STM32F103RBT6,现在的目标仅仅是把他当成一个单片机来用 行不通 郁闷啊
代码结构是参考  正点原子 的例程:
#include <stm32f10x_lib.h>
#define CS    PCout(0)
#define RS    PCout(2)
#define WRITE PCout(3)
#define READ   PCout(10)
#define REST  PCout(13)

#define DATAOUT(x) GPIOB->ODR=x; //数据输出
#define DATAIN     GPIOB->IDR;   //数据输入

void LED_Init(void)
void dis_color2(unsigned int j)

int main(void)
{               
          Stm32_Clock_Init(9);//系统时钟设置
        delay_init(72);//延时初始化
          while(1)
        {                                  
                dis_color2(0x0fe0);
                delay_ms(1000);       
        }                                                                                            
}

以上的大致的代码


出0入0汤圆

发表于 2012-5-16 07:54:00 | 显示全部楼层
速度太快了吧?

出0入0汤圆

发表于 2012-5-16 07:56:27 | 显示全部楼层
GPIO还没有初始化  

出0入0汤圆

发表于 2012-5-16 08:03:46 | 显示全部楼层
控制信号部分也得修改。

出0入0汤圆

 楼主| 发表于 2012-5-16 08:31:12 | 显示全部楼层
刚才粘贴的代码只是部分,下面是全部的
#include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"               
#include "delay.h"       

//指示程序运行的led
#define LED0  PAout(8)// PA8
#define LED1  PDout(2)// PD2       

//各个控制端
#define CS    PCout(0)
#define RS    PCout(2)
#define WRITE PCout(3)
#define READ   PCout(10)
#define REST  PCout(13)


//PB作为数据输出端口
#define DATAOUT(x) GPIOB->ODR=x; //数据输出
#define DATAIN     GPIOB->IDR;   //数据输入

                          

/*************************************************
//初始化名字是LED,里面包含lcd各个端口的初始化
************************************************/
void LED_Init(void)
{
        RCC->APB2ENR|=1<<2;    //使能PORTA时钟
        RCC->APB2ENR|=1<<3;    //使能PORTB时钟
        RCC->APB2ENR|=1<<4;    //使能PORTC时钟                    
        RCC->APB2ENR|=1<<5;    //使能PORTD时钟

       
        GPIOA->CRH&=0XFFFFFFF0;
        GPIOA->CRH|=0X00000003;//PA8 推挽输出            
    GPIOA->ODR|=1<<8;      //PA8 输出高
                                                                                          
        GPIOD->CRL&=0XFFFFF0FF;
        GPIOD->CRL|=0X00000300;//PD.2推挽输出
        GPIOD->ODR|=1<<2;      //PD.2输出高
       

        GPIOC->CRL&=0XFFFF00F0;
        GPIOC->CRL|=0X00003303;//PC0.2.3 推挽输出
       

        GPIOC->CRH&=0XFF0FF0FF;
        GPIOC->CRH|=0X00300300;        //PC10.13推挽输出
        GPIOC->ODR=0XFFFF;           //PC上拉

        GPIOB->CRH&=0X00000000;
        GPIOB->CRH|=0X33333333;//PB 推挽输出            

                    
        GPIOB->CRL&=0X00000000;
        GPIOB->CRL|=0X33333333;//PB 推挽输出

        GPIOB->ODR=0XFFFF;        //PB上拉
}


/*************************************
//写命令
************************************/

void wr_comm(unsigned int index)
{  

   RS = 0;
   delay_us(2);
   CS = 0;
   //DATAOUT(0);
   DATAOUT(index);
   //DP_L = index;
   //DP_H = index>>8;
  delay_us(2);
   WRITE = 0;
   delay_us(2);
   WRITE = 1;
   delay_us(2);
   CS = 1;
}
/*************************************
//写数据
************************************/
void wr_dat(unsigned int dat)
{  

   RS = 1;
   delay_us(2);
   CS = 0;
   DATAOUT(dat);
delay_us(2);
   WRITE = 0;
delay_us(2);
   WRITE = 1;
delay_us(2);
   CS = 1;
}


/*************************************
//lcd初始化
************************************/
void lcd_int(void)
{


        wr_comm(0x0011);
        delay_ms(20);
        wr_comm(0x00D0);
        wr_dat(0x0007);
        wr_dat(0x0042);
        wr_dat(0x001C);
       
        wr_comm(0x00D1);
        wr_dat(0x0000);
        wr_dat(0x0028);
        wr_dat(0x0016);
       
        wr_comm(0x00D2);
        wr_dat(0x0001);
        wr_dat(0x0011);
       
        wr_comm(0x00E4);
        wr_dat(0x00a0);
       
        wr_comm(0x00F3);
        wr_dat(0x0000);
        wr_dat(0x002A);
       
       
       
        wr_comm(0x00C0);
        wr_dat(0x0010);
        wr_dat(0x003B);
        wr_dat(0x0000);
        wr_dat(0x0002);
        wr_dat(0x0011);
       
        wr_comm(0x00C5);
        wr_dat(0x0002);
       
        wr_comm(0x00C8);
        wr_dat(0x0000);
        wr_dat(0x0035);
        wr_dat(0x0023);
        wr_dat(0x0007);
        wr_dat(0x0000);
        wr_dat(0x0004);
        wr_dat(0x0045);
        wr_dat(0x0053);
        wr_dat(0x0077);
        wr_dat(0x0070);
        wr_dat(0x0000);
        wr_dat(0x0004);
       
        wr_comm(0x0036);
        wr_dat(0x000A);
       
        wr_comm(0x003A);
        wr_dat(0x0055);
       
        wr_comm(0x002A);
        wr_dat(0x0000);
        wr_dat(0x0000);
        wr_dat(0x0001);
        wr_dat(0x003F);
       
        wr_comm(0x002B);
        wr_dat(0x0000);
        wr_dat(0x0000);
        wr_dat(0x0001);
        wr_dat(0x00E0);

  delay_ms(20);
  wr_comm(0x0029);

}

//=================================单色画面======================================//
void dis_color2(unsigned int j)                  
{       
   unsigned int i,m;
   wr_comm(0x002C);
   delay_us(2);
   RS = 1;
   delay_us(2);
   CS = 0;  
   for(i=0;i<480;i++)
    for(m=0;m<320;m++)
      {
        //DP_L = j;                  //DP_L为8位单片机里面的P1端口
        //DP_H = j>>8;          //DP_H为8位单片机里面的P2端口
                DATAOUT(j);           //#define DATAOUT(x) GPIOB->ODR=x; //数据输出
                 
        WRITE = 0;
                delay_us(10);
        WRITE = 1;
               
      }
   CS = 1;      
}
/*************************************
//主函数
************************************/
int main(void)
{               
          Stm32_Clock_Init(9);//系统时钟设置
        delay_init(72);                //延时初始化
        LED_Init();
           REST = 1;
           delay_ms(10);
           REST = 0;
           delay_ms(20);
           REST = 1;
           delay_ms(10);
                  lcd_int();
        delay_ms(100);                
          while(1)
        {                                  
                dis_color2(0x0fe0);
                delay_ms(1000);
                LED0=~LED0;       
        }                                                                                            
}

出0入0汤圆

 楼主| 发表于 2012-5-16 09:59:10 | 显示全部楼层
程序太长 ,大致意思就是:时钟配置,端口初始化,TFT端口初始化,延时,然后就是主循环显示一个画面纯色的。就这么多。
但是屏幕始终是灰屏。

出0入0汤圆

发表于 2012-5-16 10:57:28 来自手机 | 显示全部楼层
xuxer110 发表于 2012-5-16 09:59
程序太长 ,大致意思就是:时钟配置,端口初始化,TFT端口初始化,延时,然后就是主循环显示一个画面纯色的 ...

不是白屏,说明已经驱动起来了。

出0入0汤圆

 楼主| 发表于 2012-5-21 11:27:51 | 显示全部楼层
谢谢各位的关注,问题纠结我了好几天已经解决! 原因是是JTAG调试没有关闭,所以才有个别管脚拉高不成功
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 01:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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