如何使用TouchGFX在LCD屏幕上显示ADC值?

时间:2019-11-03 19:57:36

标签: c++ stm32f7

我想在 stm32f746G-DISCO 板上的LCD屏幕上显示adc值。主要挑战来自集成TouchGFX软件。这将生成输出窗口小部件和通配符所需的模型,视图和演示者文件。我相信我已经正确设置了ADC引脚PF10,因为我可以使用以下方法在main.cpp中获取ADC值:

while (1)
   {
      HAL_ADC_Start(&hadc3);
      HAL_ADC_PollForConversion(&hadc3, 500);
      hullVoltage = HAL_ADC_GetValue(&hadc3)*0.00080586;
      HAL_Delay(1000);
   }

但是我的主要目标是在LCD屏幕上显示它。我有touchGFX设置,可以在View.cpp中向通配符输入浮点数。例如:

void Monitor_ScreenView::handleTickEvent()
{
     Unicode::snprintfFloat(textArea2Buffer, 4, "%f", 3.14f);
     textArea2.invalidate();
}

我将向您展示我的模型,视图和演示者cpp文件,以演示问题所在。

model.cpp

#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>

#ifndef SIMULATOR
#include "stm32746g_discovery.h"
#endif

void Model::getHullVoltage()
{
    HAL_ADC_Start(&hadc3);
    HAL_ADC_PollForConversion(&hadc3, 500);
    hullVoltage = HAL_ADC_GetValue(&hadc3);
}

View.cpp

#include <gui/monitor_screen_screen/Monitor_ScreenView.hpp>
#include <gui/model/Model.hpp>

#ifndef SIMULATOR
#include "stm32746g_discovery.h"
#endif

void Monitor_ScreenView::handleTickEvent()
{
     Unicode::snprintfFloat(textArea2Buffer, 4, "%f", presenter->getHullVoltage());
     textArea2.invalidate();
}

presenter.cpp


#include <gui/monitor_screen_screen/Monitor_ScreenView.hpp>
#include <gui/monitor_screen_screen/Monitor_ScreenPresenter.hpp>

// my functions
float Monitor_ScreenPresenter::getHullVoltage()
{
    return(model->hullVoltage);
}

我从此版本中获得的唯一错误是来自model.cpp的“ hadc3未在此范围内声明”。

如果能从我的代码中获得任何见解,我将非常感激。除此之外,我的代码还可以工作,因为我可以通过触摸屏上的按钮打开和关闭LED,可以在屏幕上的所需位置打印浮点,并且可以获得adc值在main.cpp中。我只需要它在每个刻度上显示在屏幕上。

3 个答案:

答案 0 :(得分:1)

如果您使用HAL库,则可以使用#ifndef SIMULATOR

答案 1 :(得分:0)

我相信我已经找到了解决我问题的方法。在View.cpp中,我将hadc3声明为外部类型:

void Monitor_ScreenView::handleTickEvent()
{
    extern ADC_HandleTypeDef hadc3;
    float hullVoltage;


     HAL_ADC_Start(&hadc3);
     HAL_ADC_PollForConversion(&hadc3, 500);
     hullVoltage = HAL_ADC_GetValue(&hadc3)*0.00080586;

     Unicode::snprintfFloat(textArea2Buffer, 4, "%f", hullVoltage);
     textArea2.invalidate();
}

我认为不需要任何其他文件!欢呼ProXicT和堆栈溢出。

答案 2 :(得分:0)

在TouchGFX应用程序的视图类中编写的代码应该是可移植的,以使其能够在模拟器或目标上运行。例如。如果要通过Windows上的TouchGFX设计器使用gcc运行应用程序,则HAL_ADC_会有未解析的符号。通过先调用视图展示者再调用模型来替换代码,可以提高可移植性,并且可以更好地封装功能,而不是将其保留在事件处理程序中。

在模型中保留目标特定的代码并用#ifdef SIMULATOR保护它,将使您能够从键盘事件,滴答事件或硬件的外部事件中触发模拟器和目标版本的代码。