返回信息流本人小白一枚...春节前购入奋斗的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模块来解决呢?做个乒乓双缓冲什么的?不过显示屏的双缓冲怎么做啊?我是小白....恳求赐教....
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13003同步于 2013/2/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
[求助]stm32 控制tft液晶屏问题
EastDon
2013/2/17镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
感觉你这个跟双缓冲没什么关系,双缓冲的意思是显示一个buffer,描画另一个buffer,描画完毕把两个buffer swap过来,避免把描画过程显示出来
【 在 EastDon (【最近厮混在乡版】) 的大作中提到: 】
: [size=4][face=黑体]本人小白一枚...春节前购入奋斗的stm32开发板一枚...还有一块4.3寸的TFT屏幕...兴奋之余做点小东西玩.....
: 芯片是stm32f103ve系列的...
: 以下是问题描述
: ...................
【 在 ArmStrong 的大作中提到: 】
: 感觉你这个跟双缓冲没什么关系,双缓冲的意思是显示一个buffer,描画另一个buffer,描画完毕把两个buffer swap过来,避免把描画过程显示出来
那出现这种情况是怎么回事呢…好吧我到学校换块板子试试…总不会是板子问题吧?
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 的大作中提到: 】
:
:
: 那出现这种情况是怎么回事呢…好吧我到学校换块板子试试…总不会是板子问题吧?
真是太感谢了...这一段是我从别人了例程里面copy的所以没有细看....
看来以后写程序还是要细心细心...
【 在 tonyjansan 的大作中提到: 】
: [code=c]
: void TFT_ShowBigString(u16 x, u16 y, const u8 *p, u16 color) {
: while(*p != '\0') {
: ...................