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

查看: 2980|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版