cancel
Showing results for 
Search instead for 
Did you mean: 

PROBLEM WITH X-NUCLEO-GNSS1A1 and NUCLEO-F446ZE

gamelk
Associate III

Hi I have connected the GNSS1A1 board and F446ZE boards. When I run the FW (Virtual Com Port) that I set up through STM32CUBE IDE (X-CUBE-GNSS) and start the program, when it enters MX_GNSS_Process() the gnssMsg struct's buffer pointer is pointing at reserved 0x2002 0000 address. 

bufatreserved.png

Then I tried generating the code for FW Updater example program, the Teseo Suit Can not do anything. It stops at Syncing, or if I try to force the update, at around 80% it freezes and recommends recovery mode. That doesn't work either.

bufatreserved.png

 Please help. I tried everything I2C or UART port but it looks like nothing is helping. The GetPos example is running fine, however gets no data. 

bufatreserved.png

@Tesla DeLorean maybe you know something. :)

20 REPLIES 20

There is nothing on the any of the teo buses. jumper setup as described by you. J13 ON.

I was wrong UART6 works, I see the signal.

gamelk_0-1729027477116.png

There is a continous transmission from Teseo to the controller.

gamelk_0-1729028732521.png

this is what being sent

 

And this is what comes trough COM3 

gamelk_0-1729028886573.png

 

Good to know.

If you are running Virtual COM Port example, you should see NMEA data output on the serial terminal.

If you are running GetPos, then you would see the command terminal with the options you had shown in a previous post.

In GetPos, there is a bug on when position is validated.

Could you make the following change in the function,

ParseStatus_t NMEA_ParseGPGGA(GPGGA_Info_t *pGPGGAInfo, uint8_t NMEA[])?

    if (valid_msg == TRUE)
    {
      int32_t valid = strtol((char *)app[6], NULL, BASE);
      //if((valid == 1) || (valid == 0)) //old code
      if(valid > 0)          //new code								
      {
        pGPGGAInfo->valid = (uint8_t)TRUE;
      }

 Also please refer to Known Limitations and Workarounds in Getting Started Guide that is found in X-CUBE-GNSS installer package.

Pay attention to this workaround if you are working on GetPos.

For STM32CubeIDE projects, the floating point for the printf function must be enabled.
From the menu bar select: Project > Properties > C/C++ Build > Settings > Tool Settings and then check Use float with printf from newlib-nano.





In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

Hi,

Looks correct. If your antenna has some visibility to sky you should see satellite data.

If you are completely indoors with no visibility, then you what you have shown is correct.


In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

OK, but I still don't understand why the program code:

 

const GNSS1A1_GNSS_Msg_t* GNSS1A1_GNSS_GetMessage(uint32_t Instance)
{
  const GNSS1A1_GNSS_Msg_t* msg;

  if (Instance >= GNSS1A1_GNSS_INSTANCES_NBR)
  {
    msg = NULL;
  }
  else
  {
    msg =  (GNSS1A1_GNSS_Msg_t *)TESEO_LIV3F_GetMessage(&teseo_liv3f_obj);
  }

  return msg;
}

 

returns msg as NULL . Thanks for the workarounds. 

 

 

on the USART TX (stm32->teseo) there is no data.  

Hi,

To understand where you are, it looks like you are getting output using the Virtual_COM_PORT but not data is seen on GetPost. Is that correct?

 

If you are getting output on Virtual COM Port your project setting (GPIO, UART, Interrupt and Callback setting) should be the same for GetPos as well. 

If you set a breakpoint on the following, is it never getting hit?

msg =  (GNSS1A1_GNSS_Msg_t *)TESEO_LIV3F_GetMessage(&teseo_liv3f_obj);

 Can you try option 8 in GetPos, reading firmware version? If it is communication, you should read firmware version from Teseo module.


In order to give better visibility on the answered topics, please click on 'Accept as Solution' on the reply which solved your issue or answered your question.

I do not get any output over VCP.

The messages I showed you are read from the USART6RX pins from the NUCLEO itself via a serial converter.

 

The 


@GalaxyQuest wrote:

 

msg =  (GNSS1A1_GNSS_Msg_t *)TESEO_LIV3F_GetMessage(&teseo_liv3f_obj);

 


function hits, however:

gamelk_0-1729031274366.png

after 

 

while(rd_buffer_re_try == 1U)

 

teseo_ffs returns 0.


 

static inline int32_t teseo_ffs(uint32_t _w)
{
  int32_t r = 1;
  uint32_t w = _w;
  
  if (w == 0U)
  {
    return 0;
  }​

 

 

The function exits with break;

 

 

and the function: 

const GNSS1A1_GNSS_Msg_t* GNSS1A1_GNSS_GetMessage(uint32_t Instance) returns msg = NULL.

 

gamelk_1-1729031944756.png