本帖最后由 jobszheng 于 2024-10-29 02:45 编辑
【STM32H7S78-DK测评】数码相框的基本实现
前言
数码相框,在当年还是属于高端数码产品。做为一名80后,数码相框的流行期正值我大学本科阶段,看着自己家人的照片可以一张一张的在写字台,在茶几,在电视柜上播放,那高级感特别的自豪。可是,当年一款飞利浦的640x480分辨率的白色数码相框要800多元,七寸显示大小吧!画图的细腻程度较现在的差距还是蛮大的!当年虽然有万般喜爱,但苦于生计,也只是在电子商场的展台远远地看看而已。
数码相框的功能
- 数码相框首先要显示图片
- 数码相框可显示与切换多张图片
- 数码相框可有音乐背景播放功能
寥寥几字把数码相框的功能说了一个大概。其实,当年的数码相框产品要比这个出色的多,只是今天我们时间有限,挑重点的功能特性来说罢了。
项目实现功能
- 显示图片的功能实现。在本次评测阶段,我们使用STM32H7的LTDC外设功能来驱动液晶显示器,并显示我们经过格式化转储后的图片数据。主要目的还是对图片进行压缩大小,以尽可能多的保存图片;
- 对图片的切换实现。我们采用DMA2D功能,在2个图层之间做变换切换。充分利用STM32H7的硬件对2个图层的处理达到图片切换的自然,丝滑处理;
- 对于背景音乐来说,STM32H7S78,则直接支持I2S外设接口,可以轻松连接音频设备。为后续我们播放音乐提供硬件支持;
项目软件代码
我们将图片保存到外围的NorFlash之中,然后,在主程序中按顺序调用。数码相框的软件代码实现并不难:
相关的核心代码如下:
void pic_show(const uint8_t **pic_ptr) {
LTDC_LayerCfgTypeDef pLayerCfg1 = { 0 };
pLayerCfg1.WindowX0 = 0;
pLayerCfg1.WindowX1 = 800;
pLayerCfg1.WindowY0 = 15;
pLayerCfg1.WindowY1 = 465;
pLayerCfg1.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
pLayerCfg1.Alpha = 200;
pLayerCfg1.Alpha0 = 0;
pLayerCfg1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
pLayerCfg1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
pLayerCfg1.FBStartAdress = (uint32_t) pic_ptr;
pLayerCfg1.ImageWidth = 800;
pLayerCfg1.ImageHeight = 480;
pLayerCfg1.Backcolor.Blue = 0;
pLayerCfg1.Backcolor.Green = 0;
pLayerCfg1.Backcolor.Red = 0;
if (HAL_LTDC_ConfigLayer(&hltdc, &pLayerCfg1, 1) != HAL_OK) {
Error_Handler();
}
}
while (1) {
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(5000);
pic_show(&image_01);
HAL_Delay(5000);
pic_show(&image_02);
HAL_Delay(5000);
pic_show(&image_03);
HAL_Delay(5000);
pic_show(&image_04);
HAL_Delay(5000);
pic_show(&image_05);
HAL_Delay(5000);
pic_show(&image_06);
}
/* USER CODE END 3 */
}
项目展示
感谢我家已经2.5岁的虎虎小宝宝的出镜。
项目后期改进
本次原计划增加SD卡的文件读写功能。这样,更新图片就更加方便了。不过,当年也只有高端的数码相框才支持从SD卡读取图片并显示的功能。
项目总结
STM32H7RS-DK评估板做为宇宙最强开发板在上手时还是有些难度,发挥其优秀的性能,还是需要研发人员认真,仔细,详实的了解芯片,阅读芯片,读懂芯片。
本次试用评测暂告一段落,待我参加完考试后,再来给大家继续分享。欢迎大家关注21ic论坛,关注我。
谢谢大家^_^
|