# RTT-H7 **Repository Path**: llb560/RTT-H7 ## Basic Information - **Project Name**: RTT-H7 - **Description**: 基于STM32H745的网络天气数码相框 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://bbs.eeworld.com.cn/thread-1223372-1-1.html - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-06-26 - **Last Updated**: 2024-06-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 知心相框——基于STM32H745的网络天气数码相框 ## 项目简介 宣传语: > 是相框,也是日历; > 可以放在床头,也可以摆在桌上; > 记录你的欢乐,也懂得你的冷暖~ 正式点的介绍: 电子相框是显示数码照片而非纸质照片的相框。与传统的纸质相框相比,它具有可自由打印,易于更新和可回收的优点。 在本项目中,我在STM32H745开发板上实现了基于RT-Thread和LVGL的网络天气数码相框。天气查询使用了高德的云服务,服务端是高德提供的开放接口,客户端是自己开发的。由于ST和RT-Thread官方均没有对STM32H745上运行RT-Thread做支持,为此本项目移植了RT-Thread,不只是内核,还有板子上的各种外设驱动(LCD、触摸、eMMC、SDRAM等)。因此,对于其他想在STM32H745上运行RT-Thread的同学,**本项目也可以作为一个在STM32H745上运行RT-Thread的基础版本**。由于RT-Thread和LVGL的轻量性,该项目可以很容易地移植到类似的成本较低的硬件方案上。 本项目是 **【赋能物联网——2022得捷创新设计大赛】** 参赛项目,大赛链接:http://www.eeworld.com.cn/huodong/digikey_iot_contest_2022/?sid=102 作品帖首发于电子工程师世界论坛EEWorld.com,详情请移步论坛的大赛专区:http://bbs.eeworld.com.cn/forum-275-1.html ## 系统框图 ### 硬件框图 ![](https://gitee.com/swxu/pics/raw/master/imgs/STM32H745-photo-frame.png) 整个作品中,硬件部分包括: * STM32H745-DISCO开发板,作为主控,同时使用了板上的按键、液晶触摸屏、eMMC、SDRAM等外设; * ESP-01S模组,用于实现Wi-Fi联网; 主控STM32H745片上硬件资源使用了GPIO、UART、I2C、LTDC、SDMMC、FMC,分别用于实现: * GPIO,用于支持用户按键; * UART,和ESP-01S模组连接,用于实现WiFi联网; * I2C,和触摸屏的触摸信号连接,用于支持屏幕触摸; * LTDC,和液晶屏LCD接口连接,用于支持图形用户界面(GUI)显示; * SDMMC,和eMMC存储芯片连接,用于支持文件系统,实现保存图片文件、配置信息; * FMC,和SDRAM芯片连接,用于扩展RAM空间,实现图片文件加载到内存; ### 软件框图 软件主要功能划分如下: ![sw-arch](https://gitee.com/swxu/pics/raw/master/imgs/photo-frame-sw-arch.png) 软件整体基于RT-Thread操作系统,使用了系统自带的一些组件和一些外加软件包。 业务功能通过几个线程实现: * 界面线程 * 按键线程 * 网络线程 * 图片扫描线程(其实不用独立线程也可以,所以图上就没画出来了) 每个线程具体执行的工作如图中的文字描述; ## 功能说明 本节描述相关功能的软件实现原理。 ### 基础软件移植 由于RT-Thread目前还不支持STM32H745芯片,这部分主要开发工作包括: * RT-Thread系统移植; * 基础外设支持(串口、片上SRAM、片上Flash); 本项目中 ,这部分主要工作在于移植了RT-Thread系统最小系统。 ### 图形用户界面 图形用户界面主要基于开源的LVGL,以RT-Thread软件包形式集成到项目上。这部分除了LVGL开源代码外,本项目开发的部分有: * 添加了STM32H745-DISCO开发板的LCD屏幕对接LVGL; * 添加了STM32H745-DISCO开发板的触摸对接LVGL; * 添加了STM32H745-DISCO开发板的SDRAM芯片支持,用于支持显示png图片; * 添加了LVGL测试界面(benchmark、music、widgets); * 添加了作评的两个业务界面代码; 本项目中 ,这部分主要工作在于为LVGL开发了显示、触摸驱动、SDRAM支持,以及完成业务界面代码。 ### 配置和照片保存 配置和照片保存,主要实现方式: * 为STM32H745-DISCO开发板的eMMC添加了RT-Thread块设备驱动; * 将eMMC块设备格式化为FATFS格式; * 添加了开机自动挂载eMMC到/mnt目录; * 添加了FlashDB软件包,用于支持用户配置保存; * 创建了/mnt/kvdb目录,用于保存用户配置的kvdb文件; * 创建了/mnt/img目录,用于保存照片; 本项目中 ,这部分主要工作在于为eMMC开发了RT-Thread驱动,以及实现了业务数据、图片文件的存储。 ### 联网和天气查询 联网和天气查询,主要实现方式: * 添加了搜狐IP查询,实现查询当前公网IP地址; * 添加了高德定位,实现根据公网IP地址定位大概位置(可以精确到行政区县级别); * 添加了高德天气,实现根据所在区县查询当前天气; * 开启了RT-Thread的SAL组件、at_socket组件,用于和at_device对接; * 添加了at_device软件包,用于构造esp8266 AT命令,以及解析esp8266 AT的输出; * 配置了UART2,用于支持ESP-01S模组的输入输出; 本项目中 ,这部分主要工作在于开发了搜狐IP查询、高德定位、高德天气客户端代码,以及实现了WiFi联网等相关业务的实现。 ### 图片上传到设备 图片传到设备,主要实现方式: * 通过WiFi网络,使用TFTP协议; * 设备端使用,RT-Thread的netutils软件包,提供了TFTP服务的实现,只需要打开相应配置即可; * PC端借助已有的TFTP客户端(如Linux的tftp命令,Windows MobaXterm也有tftp命令); 本项目中 ,这部分主要工作在于大量调试工作。 ### 连接ESP-01S模组 #### 开发板硬件修改 **默认情况下:** 开发板的STMOD#2连接的是PB15(通过SB13零欧电阻),STMOD#3连接的是PI2(通过SB11零欧电阻): ![](https://gitee.com/swxu/pics/raw/master/imgs/h745_stmod.png) 需要修改为:去除SB11和SB13两个零欧电阻,短接SB12和SB16两个空位; **修改后实物图:** ![](https://gitee.com/swxu/pics/raw/master/imgs/h745_hw_changes_2.png) #### 模组连接方式 前面已经介绍了,模组用的ESP-01S(很容易买到)。 连接方式如下图: ![](https://gitee.com/swxu/pics/raw/master/imgs/IMG_20221101_234012_1080.jpg) (图中右下角黑色的是ESP-01S模组,蓝色是开发板附赠的STMod扩展板) ## 项目链接 源码仓库: https://gitee.com/STM32H745/RTT-H7.git ## 效果演示 ![](https://gitee.com/swxu/pics/raw/master/imgs/IMG_20221030_202557_800.png) 演示视频: https://www.bilibili.com/video/BV1Re4y127JD/ ## 项目总结 感谢得捷赞助本次大赛。 项目开发初期决定使用RT-Thread实时操作系统(RTOS)和LVGL图形用户界面(GUI)框架,不是ST官方CubeMX工具已经支持的FreeRTOS和STemWin,同时RT-Thread官方也尚未支持STM32H745芯片和开发板。因此,整个开发过程中,底层驱动的支持部分的难度和工作量均比预想的要大。 因为官方的CubeMX工具支持的FreeRTOS中所有片上硬件资源以及板载外设均已经支持了,而且经过了官方开发人员的测试验证。使用RT-Thread和LVGL,所有片上硬件和板上外设驱动需要自己移植、开发、验证。期间因为硬件功能调试,查阅了大量资料,花费了很多时间和精力。 另外,也正是因为使用了RT-Thread和LVGL,这一套非官方支持的基础技术架构。顺便复习了很多硬件相关的知识点,同时实操了RT-Thread的驱动开发,这也是过程中收获或者收益最大的内容。