你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2974|回复: 16

[STM32F412] 在NUCLEO_F412ZG开发板上实现图片显示

[复制链接]

59

主题

1666

回帖

17

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2016-10-4 10:26:45 | 显示全部楼层 |阅读模式
对于其它的开发板,若不借助SD卡要显示图片是较为困难,因为通常的MCU其程序存储空间是相对较小的,只能借助外部存储单元来存放图片数据。由于NUCLEO_F412ZGT6具有1 MB 闪存256KBSRAM,使用在存放程序之余是有空间来存放图像数据的。以一幅320*240像素的16位色彩的图片为例,它要占用153.6KB 存储空间,是完全可以将图像数据存放到程序的。
NUCLEO_F412ZG开发板上,要显示图像的显示需要具备以下的条件:
1)具有相应的TFT显示屏来支持图像显示,为了有效地减少连线数量,这里是采用2.2寸的串行TFT屏来显示图像。
2)配有相应的工具软件来辅助进行图片的处理,主要处理的任务是裁剪图片使之符合TFT显示屏的尺寸规格及压缩图片的数据量,对于24位色的位图文件*.bmp,可以通过辅助工具将其转为16位色*.C文件,这样就可以在保证图像质量的情况下,是图像数据量缩减三分之一。
3)编写相应的TFT屏驱动程序及图像显示函数。
以显示图1的内容为例,为了适应TFT屏的显示形式需将图片旋转90度,使之成为纵向的放置的图片。然后再使用工具软件Image2Lcd v2.9来进行文件格式的转换,相关参数的设置如图2所示。
图片1.png
图1  图片内容
所生成的数据文件其数据格式如下:
  1. const unsigned char gImage_gq1[153600] =
  2. {
  3. /* 0X10,0X10,0X00,0XF0,0X01,0X40,0X01,0X1B, */
  4. 0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,0XDF,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  5. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XF7,0XBE,0XF7,0XBE,0XF7,0XBE,0XF7,0XBE,
  6. 0XF7,0XBE,0XF7,0XBE,0XF7,0XBE,0XF7,0XBE,0XF7,0XBE,0XF7,0XBE,0XFF,0XBE,0XFF,0XBE,
  7. 0XFF,0XFF,0XFF,0XDF,0XF7,0XBE,0XF7,0XBE,0XFF,0XDF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
  8. 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XDF,0XFF,0XDF,0XFF,0XDF,
  9. 。。。
  10. };
复制代码
图片2.png
2参数设置界面
CS   --PB.4
    SCK  --PB.3
    SDI   --PB.5
    DC   --PB.1
    REST --PB.0
TFT屏输出高、低电平的语句定义如下:
  1. #define LCD_CS_High()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_SET);}
  2. #define LCD_CS_Low()              { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, GPIO_PIN_RESET);}
  3. #define LCD_SCK_High()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);}
  4. #define LCD_SCK_Low()     { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);}
  5. #define LCD_SDI_High()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);}
  6. #define LCD_SDI_Low()     { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);}
  7. #define LCD_DC_High()             { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);}
  8. #define LCD_DC_Low()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);}
  9. #define LCD_REST_High()           { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);}
  10. #define LCD_REST_Low()    { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);}
复制代码
配置GPIO引脚实现输入、输出的函数如下:
  1. static GPIO_InitTypeDef  GPIO_InitStruct;
  2. void GPIO_Configuration(void)
  3. {
  4.         __HAL_RCC_GPIOB_CLK_ENABLE();  
  5.   GPIO_InitStruct.Pin   = GPIO_PIN_4|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_1|GPIO_PIN_0;
  6.   GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;   
  7.   GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;
  8.   GPIO_InitStruct.Pull  = GPIO_PULLUP;
  9.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  10. }
复制代码
实现图片显示的函数为:
  1. void showimage(unsigned int x,unsigned int y)
  2. {  
  3.         unsigned int i,j,k;
  4.         unsigned int da;
  5.         k=0;
  6.         for(i=0;i<320;i++)
  7.         {        
  8.                 LCD_SetCursor(x,y+i);
  9.                 LCD_WriteRAM_Prepare();                                    
  10.                 for(j=0;j<240;j++)
  11.                 {
  12.                         da=gImage_gq1[k*2];
  13.                         da<<=8;
  14.                         da|=gImage_gq1[k*2+1];
  15.                         LCD_WR_DATA(da);                                       
  16.                         k++;         
  17.                 }
  18.         }
  19. }
复制代码
图片3.png
3 显示效果





评分

参与人数 1ST金币 +20 收起 理由
zero99 + 20

查看全部评分

回复

使用道具 举报

64

主题

744

回帖

23

蝴蝶豆

实习版主

最后登录
2020-12-8
发表于 2016-10-4 11:21:57 | 显示全部楼层
刷新速度如何
回复 支持 反对

使用道具 举报

47

主题

1210

回帖

5

蝴蝶豆

论坛元老

最后登录
2020-8-13
发表于 2016-10-4 16:43:19 | 显示全部楼层
楼主牛X刷起图来了!
mcust.png
回复 支持 反对

使用道具 举报

0

主题

1277

回帖

30

蝴蝶豆

金牌会员

最后登录
2020-7-4
发表于 2016-10-4 20:39:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

1182

主题

3785

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-3-17
发表于 2016-10-4 20:54:57 | 显示全部楼层
厉害厉害
回复 支持 反对

使用道具 举报

1

主题

468

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-11-9
发表于 2016-10-4 23:34:06 | 显示全部楼层
学习了!
回复 支持 反对

使用道具 举报

59

主题

1666

回帖

17

蝴蝶豆

论坛元老

最后登录
2020-12-9
 楼主| 发表于 2016-10-5 09:29:45 | 显示全部楼层
多谢打赏!
回复 支持 反对

使用道具 举报

13

主题

695

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-6-7
发表于 2016-10-5 22:23:23 | 显示全部楼层
回复 支持 反对

使用道具 举报

6

主题

446

回帖

0

蝴蝶豆

金牌会员

最后登录
2017-5-24
发表于 2016-10-6 11:29:52 | 显示全部楼层
093005q7ij347qmdqxln3x.jpg
sdfhreeq.png
回复 支持 反对

使用道具 举报

0

主题

253

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-10-28
发表于 2016-10-6 13:00:50 | 显示全部楼层
效果不错
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版