首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TouchGFX在液晶屏幕上显示ADC值?

如何使用TouchGFX在液晶屏幕上显示ADC值?
EN

Stack Overflow用户
提问于 2019-11-03 19:57:36
回答 3查看 2.8K关注 0票数 1

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

代码语言:javascript
复制
while (1)
   {
      HAL_ADC_Start(&hadc3);
      HAL_ADC_PollForConversion(&hadc3, 500);
      hullVoltage = HAL_ADC_GetValue(&hadc3)*0.00080586;
      HAL_Delay(1000);
   }

但我的主要目标是在我的液晶屏幕上展示这个。我有touchGFX设置,可以在其中输入View.cpp中的通配符。例如:

代码语言:javascript
复制
void Monitor_ScreenView::handleTickEvent()
{
     Unicode::snprintfFloat(textArea2Buffer, 4, "%f", 3.14f);
     textArea2.invalidate();
}

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

model.cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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与一个按钮在触摸屏上,我能够打印一个浮动在屏幕上,我想,我能够得到的main.cpp的adc值。我只需要它显示在屏幕上的每一个滴答。

EN

回答 3

Stack Overflow用户

发布于 2019-11-14 16:47:02

在TouchGFX应用程序中视图类中编写的代码应该是可移植的,使其能够在模拟器或目标上运行。例如,如果您使用gcc在Windows上通过TouchGFX设计器运行应用程序,则HAL_ADC_的符号将无法解决。将代码替换为对视图演示者的调用,然后调用模型,将提高可移植性,并更好地封装功能,而不是将其保存在事件处理程序中。

将特定于目标的代码保存在模型中并使用#ifdef SIMULATOR保护它将允许您从键盘事件、滴答事件或来自硬件的外部事件触发代码的模拟器和目标版本。

票数 1
EN

Stack Overflow用户

发布于 2020-01-29 17:18:53

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

票数 1
EN

Stack Overflow用户

发布于 2019-11-04 22:33:55

我相信我已经找到了我的问题的答案。在View.cpp中,我将hadc3声明为一种外部类型:

代码语言:javascript
复制
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,堆栈溢出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58684084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档