BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13003同步于 2013/2/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

[求助]stm32 控制tft液晶屏问题

EastDon
2013/2/17镜像同步6 回复
本人小白一枚...春节前购入奋斗的stm32开发板一枚...还有一块4.3寸的TFT屏幕...兴奋之余做点小东西玩..... 芯片是stm32f103ve系列的... 以下是问题描述 我想在tft液晶上显示多行字... 于是写了一个小的demo int main(void) { unsigned short a; RCC_Configuration(); //系统时钟初始化及端口外设时钟使能 GPIO_Configuration(); //状态LED1的初始化 tp_Config(); //SPI1 触摸电路初始化 FSMC_LCD_Init(); //FSMC TFT接口初始化 LCD_Init(); //LCD初始化代码 TFT_CLEAR(0,0,480,272); //清屏 if (SysTick_Config(720)) //时钟节拍中断时10us一次 用于定时 { /* Capture error */ while (1); } for(i=0;i<19;i++){ TFT_ShowBigString(40,0+15*i,"TIME > 13:30",0x0000); } } 我想让TIME>13:30这个字符串显示19行的时候,就发生了这种情况 但是我把i<19改为18,,它又正常了... 贴上我的显示字符串的代码....(根据奋斗板子的例程改的.) void TFT_ShowBigString(u16 x,u16 y,const u8 *p,u16 color) { while(*p!='\0') { if(x>BIGMAX_CHAR_POSX){x=0;y+=24;}//每个高24 if(y>BIGMAX_CHAR_POSY){y=x=0;TFT_CLEAR(0,0,480,272);} TFT_ShowBigChar(262-x,y,*p,color); x+=14; //每个宽14 p++; } } void TFT_ShowBigChar(u16 x,u16 y,u8 num,u16 color) { #define BIGMAX_CHAR_POSX 466 #define BIGMAX_CHAR_POSY 266 u8 temp; u8 pos,t,hang,pos3,flag; if(x>BIGMAX_CHAR_POSX||y>BIGMAX_CHAR_POSY)return; //设定一个字符所占的窗口大小 flag=0; hang=0; pos3=0; num=num-' '; //得到偏移后的值 for(pos=0;pos<48;pos++) { //每个第二维度数组的项目数为48 temp=bigascii[num][pos]; //获得字模数组的值 hang++; for(t=0;t<8;t++) { if(hang<2){ //每4个换行一次 if(temp&0x80)TFT_DrawPoint2((pos3)+y,x-t-((hang)*8),color); //位为1 用指定颜色写入到像素 }else{ //hang=2时 if(temp&0x80)TFT_DrawPoint2((pos3)+y,x-t-((hang)*8),color); //位为1 用指定颜色写入到像素 flag=1; } temp<<=1; } if(flag==1){ hang=0; pos3++; flag=0; } } } void TFT_DrawPoint2(u16 x,u16 y,u16 color) { LCD_WR_REG(0x002A); LCD_WR_Data(x>>8); //起始地址X LCD_WR_Data(x); LCD_WR_Data(x>>8); //结束地址X LCD_WR_Data(x); LCD_WR_REG(0x002b); LCD_WR_Data(y>>8); //起始地址Y LCD_WR_Data(y); LCD_WR_Data(y>>8); //结束地址Y LCD_WR_Data(y); LCD_WR_REG(0x2c); LCD_WR_Data(color); } 是不是内存不足?该怎么解决呢?用什么方法? 我百度了下是不是用dma模块来解决呢?做个乒乓双缓冲什么的?不过显示屏的双缓冲怎么做啊?我是小白....恳求赐教....
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
wangxiaobupt机器人#1 · 2013/2/17
液晶显示的数据大小是有限制的吧 你试试把18改成20
EastDon机器人#2 · 2013/2/19
试过了... 一直试到了 32. 【 在 wangxiaobupt 的大作中提到: 】 : 液晶显示的数据大小是有限制的吧 : 你试试把18改成20
ArmStrong机器人#3 · 2013/2/21
感觉你这个跟双缓冲没什么关系,双缓冲的意思是显示一个buffer,描画另一个buffer,描画完毕把两个buffer swap过来,避免把描画过程显示出来 【 在 EastDon (【最近厮混在乡版】) 的大作中提到: 】 : [size=4][face=黑体]本人小白一枚...春节前购入奋斗的stm32开发板一枚...还有一块4.3寸的TFT屏幕...兴奋之余做点小东西玩..... : 芯片是stm32f103ve系列的... : 以下是问题描述 : ...................
EastDon机器人#4 · 2013/2/22
【 在 ArmStrong 的大作中提到: 】 : 感觉你这个跟双缓冲没什么关系,双缓冲的意思是显示一个buffer,描画另一个buffer,描画完毕把两个buffer swap过来,避免把描画过程显示出来 那出现这种情况是怎么回事呢…好吧我到学校换块板子试试…总不会是板子问题吧?
tonyjansan机器人#5 · 2013/2/22
void TFT_ShowBigString(u16 x, u16 y, const u8 *p, u16 color) { while(*p != '\0') { if(x>BIGMAX_CHAR_POSX){x=0;y+=24;}//每个高24 //应该是下边这句造成的问题,屏显范围是(0, 0)-(480, 272),当i = 19时,15 * i = 285 > 270, //于是y = x = 0,并且清屏重置输出,于是就出现了第一张图的那个结果了: //if(y>BIGMAX_CHAR_POSY){y=x=0;TFT_CLEAR(0,0,480,272);} TFT_ShowBigChar(262-x, y, *p, color); x += 14; //每个宽14 p++; } } 【 在 EastDon 的大作中提到: 】 : : : 那出现这种情况是怎么回事呢…好吧我到学校换块板子试试…总不会是板子问题吧?
EastDon机器人#6 · 2013/2/26
真是太感谢了...这一段是我从别人了例程里面copy的所以没有细看.... 看来以后写程序还是要细心细心... 【 在 tonyjansan 的大作中提到: 】 : [code=c] : void TFT_ShowBigString(u16 x, u16 y, const u8 *p, u16 color) { : while(*p != '\0') { : ...................