创建一个bootlader工程
![](https://img-blog.csdnimg.cn/img_convert/3b944c870c4c4152d08b533f0362b13d.png)
![](https://img-blog.csdnimg.cn/img_convert/0b99b978f28639828a7e7f1103a33ecf.png)
编译bootlader工程后烧写到板子中,用于使用外挂Falsh存储代码时 初始化外挂的Flash、映射物理地址及地址跳转
创建一个demo工程命名mStm32H750V1.1.0 我用的BSP1.1.0版本
![](https://img-blog.csdnimg.cn/img_convert/d7ddc8fc204bc803ea4fb59059224240.png)
从原理图看到使用的I2C1通道,使能打开
![](https://img-blog.csdnimg.cn/img_convert/266f2afc8bee26e48b874a976177ab27.png)
![](https://img-blog.csdnimg.cn/img_convert/77aaa2449e9d98d98632cf021b78c756.png)
配置中添加GT9147驱动、打开TouchGFX库、LCD、C++库,使能相关宏
![](https://img-blog.csdnimg.cn/img_convert/924be373c16e5ca2544493bef051cfa9.png)
编译后烧写进板子,串口中看到会死掉,提示硬件错误
![](https://img-blog.csdnimg.cn/img_convert/4e2cfaf97565c24d6808266c4eaceb4c.png)
通过排查,删掉触摸屏驱动后程序跑起来正常,查代码以及GT9147手册发现
触摸屏规格书写的最大5个点,而代码中初始化触摸屏后,直接读取到info.point_num为10个点,导致后面读屏幕触摸点直接按10个点去读。
![](https://img-blog.csdnimg.cn/img_convert/d7147516733e02e93f2ad30d025b65d3.png)
解决办法,仍然在STM32TouchController.cpp文件,触摸屏初始化函数中,添加上限判断,如果读到的点数大于5个则就按5个来
![](https://img-blog.csdnimg.cn/img_convert/bd326883cf8aaafe6723b708f1f69448.png)
修改后重新编译烧写进去板子验证ok,但还有个问题就是坐标跟ui的反了,仍然是在STM32TouchController.cpp文件中,sampleTouch函数中读取点坐标修改如下:
![](https://img-blog.csdnimg.cn/img_convert/053c5aa74863be8195d53ee8c2e11044.png)
重新编译烧写进去板子验证ok
![](https://img-blog.csdnimg.cn/img_convert/ca0954091ec92d6b9cb094bec24c28b8.png)
UI上添加一个按钮,来设置板子上LED灯开关
注MVP框架:
# View层负责界面的显示,和界面显示效果的切换
# Model层负责操作底层硬件
# Presenter负责沟通两者,并负责逻辑部分。沟通体现在View接收到用户的输入信息后,不直接调用硬件,而是上报给Presenter,Presenter通知Model,Model最终完成硬件的处理。而View要获得传感器数据等信息,也是通过Presenter来调用Model读取硬件相关信息。而Presenter负责逻辑部分,可以在改变视图的同时不改变逻辑
在TouchGFX工具中添加开关按钮如下,修改需要的命名
![](https://img-blog.csdnimg.cn/img_convert/ef0796db8ed85ff9c38f9feb9ff4656c.png)
我们编译后在RT-Thread Studio中刷新下code,看到MainViewBase中会自动生成如下的代码,该文件为只读,我们修改不了
![](https://img-blog.csdnimg.cn/img_convert/d49f5ab879f7a6e30aea5834e3c4dc7b.png)
![](https://img-blog.csdnimg.cn/img_convert/2f1b634c38957a13db0d7ea4dc52d488.png)
我们可以看到MainView 继承MainViewBase
![](https://img-blog.csdnimg.cn/img_convert/bd4a3d64f9b087a407c2b0d8bd5f8a29.png)
因此我们需要在MainView中添加如下,而setLED 方法也是没有的,我们需要进一步添加以下逻辑如下。
![](https://img-blog.csdnimg.cn/img_convert/fc694bfcd973ea30620dd9f6845d2f46.png)
![](https://img-blog.csdnimg.cn/img_convert/1603fb9556fbcbf0f1048af61cc11c90.png)
![](https://img-blog.csdnimg.cn/img_convert/bca81aee3eba62a0cbe83598912861b9.png)
![](https://img-blog.csdnimg.cn/img_convert/71c8bba572bf12bcc23d36385d012f90.png)
![](https://img-blog.csdnimg.cn/img_convert/6fd4c4f8bb9eb0bcd67d2a0f29d75155.png)
添加完编译后烧写进去板子验证,在触摸屏上点开关,查看串口中输出以及LED灯效果按预期效果
![](https://img-blog.csdnimg.cn/img_convert/05e620578a2c9d6ca18f9937e3362499.png)
![](https://img-blog.csdnimg.cn/img_convert/73649f3cacb1a0646431f9d564b75da6.png)
![](https://img-blog.csdnimg.cn/img_convert/1a862ee826a05a96a7b3e9b190b189a1.png)