【STM32H7S78-DK】测评+TouchGFX显示曲线
本帖最后由 dql2016 于 2024-11-4 20:16 编辑<p>TouchGFX带有丰富的曲线控件,十分方便展示数据动态过程,通过曲线的高速刷新显示,也能体现STM32H7S78强大的图形性能。如下图,选中动态曲线控件,添加到屏幕中:</p>
<div style="text-align: center;"></div>
<p> </p>
<p>动态曲线行为选择向左滚动刷新,点数100,数据范围0~3300,ADC采集模拟电压的范围:</p>
<div style="text-align: center;"></div>
<p>打开水平、垂直分割线的显示:</p>
<p> </p>
<div style="text-align: center;"></div>
<p> </p>
<p>再添加一个文本显示区域用于显示实时数据:</p>
<div style="text-align: center;"></div>
<p> </p>
<p>文本显示采用通配符形式<value>,这样在程序中能够动态的更新显示内容:</p>
<div style="text-align: center;"></div>
<p> </p>
<p>添加wildcard,添加初始显示值和缓存大小:</p>
<div style="text-align: center;"></div>
<p> </p>
<p>同样的方法再添加几个文本显示区,adc用于显示ADC实时采集电压,rms用于显示采集1024点计算的均方根值,time用于显示计算rms值消耗的时间,RMS计算采样CMSIS-DSP库,这样评估STM32H7S78的DSP性能:</p>
<div style="text-align: center;"></div>
<p> </p>
<p>通过TouchGFX官网资料可以知道TouchGFX使用的是MVP框架,在MVP框架中所有数据仅能保存在称为 Model 的类对象中,Presenter是视图(View)与Model之间的纽带,View只能通过Presenter来读取数据。MVP框架所有需要保存的数据必须再Model 的类对象。View不能直接读写Model中的数据,必须得通过Presenter来操作,所以先要在Presenter中实现对数据的读写,在ScreenPresenter.hpp中添加读写函数。</p>
<p>在Model.cpp tick中添加模拟产生正弦曲线数据:</p>
<pre>
<code class="language-cpp">void Model::tick()
{
static uint32_t cnt = 0;
static time_t raw_time = 1671459593;
++cnt;
if (cnt % 60 == 0)
{ /* Simple counter increase */
++raw_time;
}
if (raw_time != last_time)
{
last_time = raw_time;
current_dt = *gmtime(&raw_time); /* Simple gmtime calculation */
/* Notify active presenter */
modelListener->notifyNewDateTime(&current_dt);
}
{
double temp;
//if (cnt % 2 == 0)
{
/* Calculate temperature manually */
temp = 0;
for (size_t i = 1; i <= this->sinus_count; i += 2)
{
temp += sin(2.0 * 3.1415 * (20 * i) * cnt * 20) * (48 / i) + (i == 1 ? 50 : 0);
}
temp=temp*10+500;
modelListener->notifyNewTemp((float)temp);
}
}
}</code></pre>
<p>在Screen1Presenter.cpp中添加实现:</p>
<pre>
<code class="language-cpp">void
Screen1Presenter::notifyNewTemp(float temp) {
view.setTemp(temp);
}</code></pre>
<p>在Screen1View.cpp中添加刷新数据到曲线,更新文本显示:</p>
<pre>
<code class="language-cpp">void Screen1View::setTemp(float temp)
{
dynamicGraph1.addDataPoint((int)temp);//更新曲线点数据
Unicode::snprintfFloat(textArea1Buffer, TEXTAREA1_SIZE, "%2.3f", float(12.556));
textArea1.invalidate();//更新文本显示区1
Unicode::snprintfFloat(textArea2Buffer, TEXTAREA2_SIZE, "%2.1f", float(12.5));
textArea2.invalidate();//更新文本显示区2
Unicode::snprintf(textArea3Buffer, TEXTAREA3_SIZE, "%d", 123);
textArea3.invalidate();//更新文本显示区3
}</code></pre>
<div style="text-align: center;"></div>
<p>效果:</p>
<p>9e1a9d54f0856446dce6e68d43db7dd3<br />
</p>
<p>文本显示区是问号,有没有懂的大佬指点一下,这是啥情况?</p>
<p>版本是TouchGFX 4.24.1 Designer</p>
页:
[1]