初级会员

- 积分
- 157
- 金钱
- 157
- 注册时间
- 2014-5-15
- 在线时间
- 8 小时
|
5金钱
各位大哥大姐高手们好,向大家请教几个问题。想用TFT显示图片,由于刷屏速度太慢,就把图片用Ima2Lcd转换成二进制数据再开窗显示图片。但是由于一张320*240的图片转换完后大概有153K的大小,想显示多张图片,CPU内部flash不够,想先把转换后的图片数据一张一张写入W25X16里,然后用STM32读出来再显示,请问这样可以吗?
但是我把例程里的代码改后下载到mini版里运行不了,一直都是黑屏,请各位大侠帮忙指教一下。
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "lcd.h"
#include "image2lcd.h"
#include "spi.h"
#include "flash.h"
extern const u8 gImage_image1[];//图片数据(包含信息头),存储在image1.c里面.
#define SIZE 60008
int main(void)
{
u8 datatemp[SIZE];
u16 i=0;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
LCD_Init();
SPI_Flash_Init(); //SPI FLASH 初始化
while(SPI_Flash_ReadID()!=FLASH_ID)//检测不到W25X16
{
i=SPI_Flash_ReadID();
printf("ID:%d",i);
LCD_ShowString(60,130,"W25X16 Check Failed!");
delay_ms(500);
LCD_ShowString(60,130," Please Check! ");
delay_ms(500);
LED0=!LED0;//DS0闪烁
}
LCD_ShowString(60,130,"W25X16 Ready!");
delay_ms(1000);
LCD_Fill(0,0,240,320,WHITE);
LCD_ShowString(60,170,"Start Write W25X16....");
SPI_Flash_Write((u8*)gImage_image1,1000,SIZE);//从1000字节处开始,写入SIZE长度的数据
LCD_ShowString(60,170,"W25X16 Write Finished!");//提示传送完成
delay_ms(1000);
LCD_Fill(0,0,240,320,WHITE);
LCD_ShowString(60,170,"Start Read W25X16.... ");
SPI_Flash_Read(datatemp,1000,SIZE);//从1000地址处开始,读出SIZE个字节
LCD_ShowString(60,170,"The Data Readed Succeeded!");//提示传送完成
delay_ms(1000);
image_display(0,0,(u8*)datatemp);//在指定地址显示图片
while(1);
}
还有就是当我这样写下面这条语句的时候就出现错误,这是为什么?
#define SIZE sizeof(gImage_image1)
然后就是下面这条语句
u8 datatemp[SIZE];
当SIZE大于65536时,就会出现
main.c(39): warning: #69-D: integer conversion resulted in truncation,整数转换导致截断
这是为什么呢?难道是定义数组时,里面的元素不能大于65536吗?
请各位热心人帮忙给我指点一下迷津,谢谢!
|
最佳答案
查看完整内容[请看2#楼]
(1)局部数组变量这么大会有问题的。。。最大不可能大于堆栈大小。。一般就几百。
(2) 你可以试试用全局变量。。大数组不要用局部变量。
(3)这种做法是可以的。。。你要去调试看问题出在哪里。。先弄一张小图片。。。。
|