Skip to main content
nsabo.1
Associate III
January 8, 2023
Question

USART1 and dynamic graph

  • January 8, 2023
  • 5 replies
  • 1765 views

Hi, I want to receive 20 bytes.

I want to receive them every 2 milliseconds and simultaneously.

To show data, I am working with TOUCHGFX. I use dynamic graphs to show them.

The problem is, I want to show 12 bits on each graph.

I debugged my code , it seams I don't loose data.

but my graph is not fed correctly.

I have 2 signs in my data packets, first is 240 and last is 180.

here is the code:

  void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){

   if(Sign[0]==240){

   HAL_UART_Receive(&huart1,(uint8_t*)RxBuf,19,100);

  

    FlagFinsh=1;

  

   HAL_UART_Receive_IT(&huart1,(uint8_t*)Sign,1);

   }else {

   HAL_UART_Receive_IT(&huart1,(uint8_t*)Sign,1);

  HAL_GPIO_TogglePin(RED_GPIO_Port, RED_Pin);

   }

  

    

  }

and in my touchgfx screen in handletickevent function , I just extern and add data to graph:

  void Screen2View::handleTickEvent()

{

  tickCounter++; 

if(FlagFinsh==1){

FlagFinsh=0;

if(++i > 120) i=0;

     Data= (((RxBuf[3] >> 4)*256)+RxBuf[1])- 1700;

  

dynamicGraph1.addDataPoint(Data);

  }

Thanks.

This topic has been closed for replies.

5 replies

MM..1
Super User
January 8, 2023

If your code do nothink more, then maybe can work, but place into interrupt callback pool blocking func, that receive 19 bytes is very ugly.

Next mistake is use RxBuf in handleTick event. For Example RxBuf[3] is old received and [1] new overwriten, because flagfinish dont stop RX and cant...

How type is RxBuf ???

Touch GFX #5. Display UART data on the Screen using MVP (Model View Presenter) - YouTube

in video same mistake if next RX start soon as model tick executed.

nsabo.1
nsabo.1Author
Associate III
January 9, 2023

Hi, I just configured USART1 is receiving all my data correctly.

I have a problem while the dynamic graph wants to show my data.

RxBuf is uint8_t form.

exactly as you said, it seems old one is still displaying while new data is received and my buffer has not been updated, so graph is displaying false data.

Is touch GFX able to display my project?

I am working on a real data and it is important for me to display them every packets in 2 milliseconds I am so confused...

MM..1
Super User
January 9, 2023

Primary you need understand what you do. Handletick event is based on screen refresh clock and repeat every XXms that is more as 2ms.

Seconary your USART cant work with one RxBuf for this idea or you need next buff in RXcallback where you store valid datapoints for graph.

Your callback maybe receive all data but block MCU against do other things.

Rewrite your code ... callback IT receive ... in calbacka store into point array FIFO.

In GUI get from FIFO and show/add available points in one handletick.

And yes TouchGFX is able , but you ?

Piranha
Principal III
January 8, 2023
nsabo.1
nsabo.1Author
Associate III
January 9, 2023

Hi, yes I wanted to delete it but it did not let me... thanks