OpenEdv-开源电子网

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

显示屏画点程序无法通过

[复制链接]

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
发表于 2014-11-14 10:37:54 | 显示全部楼层 |阅读模式
5金钱
驱动显示屏,屏幕已点亮,一直显示白屏!尝试画点,但是屏幕显示还是白屏,用串口调试,发现程序没有通过画点的那个程序。整个程序调试运行没有错,郁闷啊!我后面包括画线和设置字体等程序全部都没有通过,整个程序就在画点前的那个清屏程序结束了。清屏程序也怪怪的,虽然串口显示已通过,但是不管我写什么颜色出来的都是白色!!!程序为什么过不去?画点的程序是参考原子哥的,原子哥的书也看了,当初用mini做实验也木有问题,但是为什么换了其他板子调程序就出问题了呢?我现在用的是103VE,用RA8875驱动4.3寸显示屏
希望原子哥和各路大神帮忙,我看书+思考+上网找,都没有找到答案
衷心感谢!

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

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12086
金钱
12086
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-11-14 10:50:52 | 显示全部楼层
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2014-11-14 12:08:51 | 显示全部楼层
画点程序
lcd_drawpoint(200,200,color_red);
printf("lcd_drawpoint   ");
定义
void lcd_drawpoint(u16 x, u16 y, u16 color)
{
XY_Coordinate(x,y);
LCD_CmdWrite(0x02);//MRWC
LCD_DataWrite(color);
}
编译通过,在串口调试助手那里也打出了“lcd_drawpoint   ”,但是屏幕就是没有显示
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2014-11-14 14:41:15 | 显示全部楼层
[mw_shl_code=c,true]int main(void) { u8 h; u8 i; /* System Clocks Configuration */ RCC_Configuration(); delay_init(72); //input system clock for delay initial USART_Configuration();//set BaudRate GPIO_Configuration(); NVIC_Configuration(); SPI_Peripheral_Init(); EXTI_Configuration(); /*RTC?ì©l¤?*/ RTC_Config(); time_now = Time_GetCalendarTime(); if (time_now.tm_year<2011) { time_now.tm_year = 2011; time_now.tm_mon = 10;// time_now.tm_mday = 16; time_now.tm_hour = 23; time_now.tm_min = 59; time_now.tm_sec = 55; Time_SetCalendarTime(time_now); } /* Configure FSMC Bank1 NOR/PSRAM */ FSMC_LCD_Init(); /*RA8875 controller reset*/ //lcd_rst(); /*RA8875 controller initial with PLL setting*/ RA8875_LCD_Initial(); printf("LCD_Initial! "); //????RA8875 GPIO?????????ò?? GPO_data(0x09); /*setting RA8875 display on*/ LCD_CmdWrite(0x01); // LCD_DataWrite(0x80); // delay_ms(20); /*RA8875 TP controller initial*/ Touch_Panel_Interrupt_Enable();// demo code using Auto mode + polling 8Fh to confirm touch TP_auto_mode(); //enable auto mode //TP_manual_mode(); LCD_CmdWrite(0x71);//set TP sample time & ADC clock LCD_DataWrite(0x04);// LCD_CmdWrite(0x70);//set TP sample time & ADC clock //LCD_DataWrite(0xb3);// LCD_DataWrite(0xc3);// Enable_TP(); //Enable_Touch_WakeUp(); /*RA8875 DMA function setting*/ SROM_CLK_DIV(0); //set serial interface clock rate Serial_ROM_select1(); Select_Serial_Waveform_mode3(); SERIAL_ROM_Read_Cycle_5bus(); SERIAL_ROM_DMA_mode(); SERIAL_ROM_Signal_mode(); //SERIAL_ROM_Dual_mode0(); DMA_Block_mode(); /*setting RA8875 memory clear with active window*/ Clear_Active_Window(); /*setting backlight on RA8875 PWM1 control*/ PWM1_enable(); PWM1_fnuction_sel(); PWM1_clock_ratio(0x02); //bit0~3 58KHZ PWM1_duty_cycle(0xff); // ???G //Brightness_level=10; LcdClear(color_red); printf("LcdClear!"); ///////////????///////////////////////// lcd_drawpoint(200,200,color_red); printf("lcd_drawpoint "); //////////????//////////////////////////// LCD_DrawLine(100,100,50,Horizontal); printf("LCD_DrawLine "); // LCD_DrawLine1(200, 300, 200, 350); // printf("LCD_DrawLine111 "); //LCD_Clear(0xf800);// //LCD_DisplayStringLine(Line0,"test FSMC OK...",White,Blue); //printf("\r\n test FSMC OK...\r\n"); [/mw_shl_code]
[mw_shl_code=c,true]void LcdClear(u16 color) { Text_color(color); // ?è?¨???? Geometric_Coordinate(0,479,0,271); // ?è?¨????×?±ê LCD_CmdWrite(0x90); LCD_DataWrite(0xB0); //RA8875_WAITSTATUS(); }[/mw_shl_code]

[mw_shl_code=c,true]void lcd_drawpoint(u16 x, u16 y, u16 color) { // XY_Coordinate(x,y); // LCD_CmdWrite(0x02);//MRWC // LCD_DataWrite(color); } [/mw_shl_code]
[mw_shl_code=c,true]void LCD_DrawLine(u16 Xpos, u16 Ypos, u16 Length, u8 Direction) { u32 i = 0; LCD_SetCursor(Xpos,319 - Ypos); if(Direction == Horizontal) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ for(i = 0; i < Length; i++) { LCD_DataWrite(color_black); } } else { for(i = 0; i < Length; i++) { LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ LCD_DataWrite(color_black); Xpos++; LCD_SetCursor(Xpos, 479 - Ypos); } } }[/mw_shl_code]
入门不深,希望原子哥和各路大神帮忙,程序貌似通不过去,编译没错,串口有输出,但是屏幕上却没有显示,一直是白屏。头文件什么的都放进去了。

回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-14 21:07:24 | 显示全部楼层
回复【4楼】thmcgkl:
---------------------------------
先尝试下读写RA8875的寄存器正不正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2014-11-15 14:09:58 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这个,检查寄存器读写是否正确,额,原子哥,我入门两个星期,前两个星期是在看你的《例说STM32》和原子教你玩那两本书,做了一些简单的实验,因为项目要用到所以学得比较匆忙。结果这几天就开始改程序了。我不太清楚这个检查怎么操作,你能举个例子吗?(好吧,这个问题有点白痴)真是不好意思,原始级菜鸟一只,理科女伤不起!求原子哥指教!
下面我根据我的理解写了一个,那个 printf("RA8875_PLL_ini! ")打得出来,最后一句,串口打印不出数值。这一部分是RA8875寄存器初始化,程序太长,只黏贴了一点
void RA8875_LCD_Initial(void)


    RA8875_PLL_ini();
    printf("RA8875_PLL_ini! ");
    LCD_CmdWrite(0x10);  //SYSR   bit[4:3]=00 256 color  bit[2:1]=  00 8bit MPU interface
    //LCD_DataWrite(0x000c);   // if 8bit MCU interface   and 65k color display       
    LCD_DataWrite(0x0F); // if 16bit MCU interface   and 65k color display  
delay_us(1); 
  #ifdef 480x272
    LCD_CmdWrite(0x04);    //set CLK invers
    LCD_DataWrite(0x82); 
    delay_ms(1);

    //Horizontal set
    LCD_CmdWrite(0x14); //HDWR//Horizontal Display Width Setting Bit[6:0]                   
    LCD_DataWrite(0x3B);//Horizontal display width(pixels) = (HDWR + 1)*8                   
    LCD_CmdWrite(0x15); //Horizontal Non-Display eriod Fine Tuning Option Register (HNDFTR)
    LCD_DataWrite(0x00);//Horizontal Non-Display eriod Fine Tuning(HNDFT) [3:0]            
    LCD_CmdWrite(0x16); //HNDR//Horizontal Non-Display eriod Bit[4:0]                      
    LCD_DataWrite(0x01);//Horizontal Non-Display eriod (pixels) = (HNDR + 1)*8             
    LCD_CmdWrite(0x17); //HSTR//HSYNC Start osition[4:0]                                   
    LCD_DataWrite(0x00);//HSYNC Start osition(PCLK) = (HSTR + 1)*8                         
    LCD_CmdWrite(0x18); //HPWR//HSYNC olarity ,The period width of HSYNC.                  
    LCD_DataWrite(0x05);//HSYNC Width [4:0]   HSYNC ulse width(PCLK) = (HPWR + 1)*8        
    printf(LCD_DataWrite(0x05));  
    ……
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-15 23:09:17 | 显示全部楼层
回复【6楼】thmcgkl:
---------------------------------
你可以先不用搞这么多代码,仅仅读写一个寄存器,就可以测试你的硬件是否正常。
比如:
  LCD_CmdWrite(0x14);                  
    LCD_DataWrite(0x3B);
这里应该是往寄存器0X14写入0X3B,执行完之后,你可以读取0X14这个寄存器,看看是不是你写入的0X3B
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2014-11-16 15:11:46 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
非常感谢原子哥!!!不知道我这样写对么?……我真是物理系的菜鸟,原子哥,不好意思

 /*RA8875 controller initial with LL setting*/
    RA8875_LCD_Initial();      //main文件里面的
  printf("LCD_Initial! ");

void RA8875_LCD_Initial(void)    /////lcd文件里的

    u8 aa;
    RA8875_PLL_ini();
    LCD_CmdWrite(0x10);  //SYSR   bit[4:3]=00 256 color  bit[2:1]=  00 8bit MPU interface     
    LCD_DataWrite(0x0F); // if 16bit MCU interface   and 65k color display 
  aa=LCD_DataRead();
printf("aa=%x",aa);
delay_us(1); 
……
结果aa=fLCD_Initial!  如果我输入aa=LCD_DataRead(0x10);则显示出错。
我要怎么办,虽然是很简单的问题,请求原子哥不吝赐教,我查资料和看书都没有解决。主要是刚入门,C也刚入门,所以很多知识还不太清楚,项目又着急用,真是抱歉啊!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-16 17:54:38 | 显示全部楼层
回复【8楼】thmcgkl:
---------------------------------
说明你读数据有问题。。。
另外你的读是不是这么读啊?得看RA8875的数据手册了。
这芯片我没搞过
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2014-10-28
在线时间
11 小时
 楼主| 发表于 2014-11-17 13:57:20 | 显示全部楼层
原子哥,非常感谢你的无私帮助!
我还有一个问题,现在纠结于此。我在看《原子教你玩STM32》那里,有关于FSMC介绍,讲得很详细。我在做8875的时候,想把针对F407的改成F103VE。100脚。我片选信接在FSMC_NE1上,接PD7(资料显示该引脚功能是FSMC_NE1/FSMC_NE2),RS接在A16(PD11)上,是16位数据总线的。那么我使用的是FSMC存储器1的第1区,地址就是60020000。但是在FSMC初始化那里就出现问题了。
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);  
正常来说,应该是这么设置的。但是这样设置的话,液晶屏就不显示了。
之前粗心,忘了修改这一部分,即:
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  
液晶屏居然就亮了,改回NE1就不亮了,这是神马情况?
线没有连错,其他都是正常,但是这样,虽然屏亮了,但我觉得FSMC的初始化是有问题的,也难怪读出的数据有问题了,画点什么操作无法进行下去了。这个问题要怎么解决呢?想了老半天,查资料和看书也无进展。请原子哥指教,衷心感谢!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-17 20:29:24 | 显示全部楼层
回复【10楼】thmcgkl:
---------------------------------
这我也不晓得了,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-29 00:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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