2024-03-13 07:45 AM
Dear Team,
I am interfacing Nucleo-h743zi2 board with LCM display(GUI) through UART using Interrupt method.
I can transmit the data to LCM and it is displaying properly on the LCM display.
Now I am trying to send the commands from LCM display to STM controller.
I tried to press the button for many times on LCM display and observed sometimes it is triggering and sometimes not triggered). I think there is a problem with synchronisation for receiving from LCM display to STM controller. I can see the events are triggered sometimes in debugging steps.
I tried to change the system clock to different values but it did not worked. Also I tried to increase the delays, decreasing delays at different places did not worked.
I tried to copy the receiving buffer into the other buffer and cleared the buffer. But this also does not worked.
Please find the below Receive function for your reference:
extern uint8_t data_u[100];
uint8 j, max;
It is mentioned in LCM document as follows:
your serial receive function should timeout after 0.1s (= SERIAL_ATOMIC_TIMEOUT defined in "config.master.h").
All other timeouts must be multiples of this (see "config.master.h" again):
#define SERIAL_ATOMIC_TIMEOUT 1 /*!< in tenth of seconds (default 0.1s); the
timeout of the serial port should be
configured to the same time (0.1s) */
#define SERIAL_NORMAL_TIMEOUT 20 /*!< in tenth of seconds (default 2s), must
be a multiple of the
SERIAL_ATOMIC_TIMEOUT */
#define SERIAL_FLASH_TIMEOUT 600 /*!< in tenth of seconds (default 60s), must
be a multiple of the
SERIAL_ATOMIC_TIMEOUT */
For every "normal" command you should receive a response package after 2s (= SERIAL_NORMAL_TIMEOUT).
You have to wait for the response befor sending the next command.
Please guide me to know how we can resolve the synchronisation issues by using above LCM information .
Do I need to use timer for 0.1sec to receive function. If yes could you please help me to know how we can write it in code.
Solved! Go to Solution.
2024-03-14 12:55 AM
Thank you for your reply.
I think, There is request - response pair in serial communication. I tried with clearing the buffer. but, It did not worked.
Please let me know whether It will be a good idea to implement my own ring/fifo buffering methods in this case.
2024-03-14 03:31 AM
@sushma wrote:Could you please help me to know how we can check the actual speeds on the wires?
Measure the bit widths on your oscilloscope
2024-03-14 03:36 AM - edited 2024-03-14 03:37 AM
@sushma I mean the normal default HAL 1ms timer tick, often it is the ARM systick but can be one of STM32 timers. You just call HAL_GetTick to get the wait start time, then repeat HAL_GetTick in the main loop to detect timeout (for example, if (HAL_GetTick() - start_time > 2000) { /*timeout! */ }
No need to be precise there.
2024-03-19 12:40 AM
Dear All,
Thank you so much for your Guidence.
I tried with polling method and receiving each byte for 100ms timeout instead of receiving with interrupt method. It worked for me.
Now, I do not have synchronisation issues.
Regards,
Sushma