本帖最后由 jinyi7016 于 2022-8-26 10:00 编辑
@21小跑堂
开发板上的屏是带的电容触摸功能的。当添加的控件,是有交互属性的控件时,会自动与触摸驱动关联。
我们使用开发板模版建的工程,触摸屏的驱动都是已经生成好的。不过对于自己设计的板子,还是有必要了解一下触摸驱动的实现的。
开发板上的触摸驱动使用的芯片是:FT5336
相应的源码有:ft5336_reg.c、ft5336.c、stm32h750b_discovery_ts.c
在stm32h750b_discovery_ts.c中的函数BSP_TS_GetState来读取并获取触摸的相应的状态,
而这个函数与C++的关联,是在STM32TouchController类中的sampleTouch方法。
如果使用其他的触摸芯片,也是要在这个方法中添加相应的代码实现。
而STM32TouchController的调用,是在ToucGFXConfiguration.cpp中。
tc作为hal的一个参数,传递到TouchGFXHAL的初始化程序。
把这个界面,直接烧写到开发板上,当按下这些button时,会有相应的按下的反馈。
其实,当我们新建工程,选择我们的开发板型号时,相应的底层驱动的代码与关联就已经生成了。那当是另外自己项目中的板子时,是不会自动生成相应的驱动的。所以,有必要分析一下TouchGFX的触摸驱动。
开发板上的是电容触摸屏,使用IIC4接口进行通讯。
当打开ico文件时,发现并没有在ico的配置文件中看到对IIC4的配置
那触摸数据是从哪里来的呢?
其实这里的配置是在FT5336_Probe函数内的。
也就是与BSP_TS_Init的配置在一起,而没有单独进行配置。
而相应的定义,是在stm32h750b_discovery_bus.c中的。
最上层,就是void STM32TouchController::init()调用的了。
这就又回到了文章最开始的STM32TouchController类那里的调用了。
可以看到整个工程的代码结构是分层处理的。C++算上应用层,调用底层的C文件中的函数。TouchGFX完全使用C++实现。
|