本帖最后由 sky.sun.zz 于 2015-10-9 10:31 编辑
STM32F446RE由于没有FSMC,用来驱动TFT液晶有点小麻烦,加上一开始没有仔细阅读原理图,导致走了一段弯路,费力不少时间。原先一看原理图,发现GPIOA,GPIOB,GPIOC的16条引脚都引出,拿来做TFT数据端口的驱动应该都没问题。就先把PA拿来驱动数据端口,结果花了不少时间,TFT都无法常工作。其实在开发板上:
1。PC14和PC15已经用来驱动32K晶振,PC13用做复位输入端,C15并接PC13到地。
2。PA13,PA14是TMS,TCK,接ST_LINK。
3。PB3是SWO,PB11是VCAP。
因此,要想找到一个可用的16位IO口来驱动TFT数据口,实际上是不可能的。现在只能用2个不同IO口来拼接这个16位端口了:
驱动TFT的硬件连接
最底层的驱动代码,16位数据口的拼接:
void wr_cmd(uint16_t cmd)
{
RS_L;
CS_L;
WR_L;
GPIOC->ODR &=0XE000;
GPIOC->ODR |= cmd&0X1FFF;
GPIOB->ODR &=0XFF8F;
GPIOB->ODR |= (cmd>>9)&0X0070;
__nop();
__nop();
WR_H;
__nop();
CS_H;
}
void wr_data(uint16_t dat)
{
RS_H;
CS_L;
WR_L;
GPIOC->ODR &=0XE000;
GPIOC->ODR |= dat&0X1FFF;
GPIOB->ODR &=0XFF8F;
GPIOB->ODR |= (dat>>9)&0X0070;
__nop();
__nop();
WR_H;
__nop();
CS_H;
}
TFT终于能够正常工作了。我们知道,在嵌入式系统中TFT显示图像大都是显示BMP位图,一幅图像文件要占用不小存储器空间,要想减小存储器空间的占用,最好使用JPG格式来显示,而采用JPG格式显示速度是个瓶颈。现在有了STM32F446,用它来显示JPG图片速度将会改善,是个不错的选择。JPEG解码需要进行大量的浮点运算,因此在MDK5中需要启用STM32F446的浮点运算功能。
接下来要下载一个JPEGDECODE.C软件加入项目中,JPG图片需要使用320x240的JPG图片并下载BIN2C.EXE进行处理得到图片数据(例:img_a)
。
启用FPU
#include "arm_math.h" //浮点运算库
main(){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
lcd_initialize();
LoadJpegFile(img_a); //(文件:img_a.h储存了1幅320*240的jpg图像数据)
while(1)
{
}
}
img_a.h显示的图片
STM32F446显示JPG图片
本例中装入7幅320x240JPG图像,编译后所占存储器空间是相当小的:
图3 内存占用情况
|