| | | | | 要弄清楚第一个问题需要知道touchGFX结构(C++语言)。STM32TouchController.cpp 中的sampleTouch()方法(可以理解成sampleTouch()函数,对象化编程中叫方法)实现了触摸的状态和坐标采集。细心的朋友可能已发现这个函数是每个tick调用一次,是不是tick的问题造成的采集延时?问了touchGFX的专家级人物,给出的方法把触摸状态和坐标采集放到另一个任务中不要放到GUI的任务中,因为这里有两种可能性,第一是触摸采集慢了,第二是刷图慢了,且新建的采集任务的优先级要调为最高。我在触摸采集的任务中放了个闪灯程序让屏每触摸一下灯就闪一下,结果是每次点下屏幕灯都正常闪了下。但还是会看下明显的延时。这下问题定位到了sampleTouch的执行周期上,果断在这个方法里加个闪灯程序,结果发现并不是1/60s执行一次而是1s执行一次。再在Model里有个tick()方法里放一个闪灯程序也是1s执行一次,当时想到的是我这帧率也太低了怎么才一秒一帧?于是各种查LTDC,DMA2D及屏幕的接口,最终确定了系统是开启了LTDC,DMA2D驱动屏不可能一秒一帧这么慢,难道有什么任务阻塞了?各种注释代码发现我在Model::tick()里的一个消息队列的接收函数出的问题。。。我把它的timeout设成了一秒,难怪tick()会一秒执行一次。果断改成0,问题解决了。记住在Model::tick()接收消息队列消息一定要把timeout设成0. |
|
|
| | | | | | | 关于横坚屏的问题查了屏幕驱动芯片的资料说是配置一些寄存器的值没有成功,不过在Designer找到了设置项。 |
|
|
| | | | | | | | | Button的Callback只提供了点击事件。最终用RepeatButton替代Button实现,记得设置它的Delay和Interval。 后续使用遇到问题再分享解决方法。
|
|
|
| | | | | | | | | | | 最近弄好了HAL库SPI从机。功能是STM32touchGFX界面按键触发SPI总线上的WIFI发送数据。STM32touchGFX是从机,WIFI是主机。
一开始遇到的问题是WIFI能收到STM32touchGFX的数据,但STM32touchGFX收不到主机WIFI的数据,后面STM32touchGFX就直接进Hardfault死机!仔细看了下HAL库,发现函数接口接收的发送buffer写的uint8_t但函数主体又把uint8_t转成了uint16_t,于是果断把接收的发送buffer改成了uint16_t,问题依然存在,一通百度有人提到了buffer 4 byte对齐的问题,然后把buffer的长度改成了4的倍数,问题解决。这个应该是HAL库的一个缺陷,对寄存器操作不当造成的。看了官方的例子是把spi接收和发送buffer写成了uint32_t,这样就没有4byte对齐的问题。
|
|
|
| | | | | | | | | | | | | 因为cubuide集成了cubeMX有不少配置文件,如果两个项目内容上很接近可能直接复制工程改个工程名就好。最近就遇到更改工程名的问题,单纯的右击工程名Rename会报cannot find -l:libtouchgfx-float-abi-hard.a的错误。解决方法是右击工程名到时Properties同时更改LIB的路径。
|
|
|
|