cancel
Showing results for 
Search instead for 
Did you mean: 

Bug for BLE Init in new wb5 firmware 1.15

Lotta
Associate II

I've used BLE for a month now on the wb5mmg with the 1.14.1 firmware with the steval-proteus board. The setup in the .ioc for new projects was always the same:

  • HSEM, IPCC, RCC, RTC, RF, (USART)
  • Activating BLE
  • Using Default P2P Settings or Custom Template

Then I used the ST BLE Toolbox App to look at the services. It was never any trouble and worked already without much user config

Earlier this week I updated the Cube IDE to 1.11 and with it updated the firmware for the wb5 to 1.15.0.

After the update new projects created on the 1.15 firmware would not advertise.

APP_BLE_Init(void) (app_ble.c) was never called because the function where it was called in was registered as a Task but never set.

Function calls were as follows:

  • app_entry.c: appe_Tl_Init(void) was called

0693W00000WKe8SQAT.png

  • In this function shci_user_evt_proc is registered as task for the sequencer
  • Also APPE_SysUserEvtRx is passed as a function pointer
    • This function is important because: APPE_SysUserEvtRx (app_entry.c) -> APPE_SysEvtReadyProcessing (app_entry.c) -> APP_BLE_Init (app_ble.c)
  • In shci_user_evt_proc the passed function pointer of APPE_SysUserEvtRx is called
  • shci_user_evt_proc is registered but never set and therefore never called. In stm32_seq.c: UTIL_SEQ_RegTask() was called UTIL_SEQ_SetTask() was never called

It is important to notice that projects created with firmare 1.14.1 and migrated to 1.15.0 did not have this issue and worked like before.

Just projects created on the 1.15.0 firmware showed this issue. I created mutliple (8) projects and tried different BLE configurations, all with the same issue.

It would have helped a lot if the new IDE version 1.11 would have been still able to change the firmware version of both new projects in the creation dialog and existing projects in the .ioc file in Project Manager.

In the end I deinstalled the IDE and downloaded the 1.10 to work with firmware 1.14.1. Now everything is working again.

13 REPLIES 13
Remy ISSALYS
ST Employee

Hi @Jtron.1​,

Can you describe your issue and what is going wrong? Which stack are you using?

Best Regards

Jtron.11
Senior

As I wrote above,

I am using use stm32wb5x_BLE_Stack_full_fw.bin: V1.15.0 and STM32Cube FW_WB V1.16.0, and STM32CubeMX version 6.8.0 for STM32WB5MMGHx, and I followed exactly the steps from this Videohttps://www.youtube.com/watch?v=i10X4Blr8ns

Just about 15 minutes ago I found the solution, but I don't know exactly understand the reason yet.

If I used the BLE_HeartRate linker file to replace the linker file from CubeMX generated after follow the video or the wiki page you provide to me, my custom app will work. The BLE_HeartRate source code is coming straightly from STM32WB example for STM32WB5MMGHx

These are the differences from the generated custom app linker file

/* Highest address of the user mode stack */

_estack = ORIGIN(RAM1) + LENGTH(RAM1);  /* end of RAM1 */

/* Generate a link error if heap and stack don't fit into RAM */

....

/* Initialized data sections goes into RAM, load LMA copy after code */

 .data :

 {

  . = ALIGN(4);

  _sdata = .;    /* create a global symbol at data start */

  *(.data)      /* .data sections */

  *(.data*)     /* .data* sections */

  *(.RamFunc)    /* .RamFunc sections */

  *(.RamFunc*)    /* .RamFunc* sections */

  . = ALIGN(4);

  _edata = .;    /* define a global symbol at data end */

 } >RAM1 AT> FLASH

...

 .ARM.attributes 0    : { *(.ARM.attributes) }

  MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED

  MB_MEM1 (NOLOAD)    : { *(MB_MEM1) } >RAM_SHARED

  /* used by the startup to initialize .MB_MEM2 data */

 _siMB_MEM2 = LOADADDR(.MB_MEM2);

 .MB_MEM2 :

 {

  _sMB_MEM2 = . ;

  *(.MB_MEM2) ;

  _eMB_MEM2 = . ;

 } >RAM_SHARED AT> FLASH

}

vs.

BLE_HeartRate

/* Highest address of the user mode stack */

_estack = 0x20030000;  /* end of RAM */

/* Generate a link error if heap and stack don't fit into RAM */

...

 /* Initialized data sections goes into RAM, load LMA copy after code */

 .data : 

 {

  . = ALIGN(4);

  _sdata = .;    /* create a global symbol at data start */

  *(.data)      /* .data sections */

  *(.data*)     /* .data* sections */

  . = ALIGN(4);

  _edata = .;    /* define a global symbol at data end */

 } >RAM1 AT> FLASH

...

.ARM.attributes 0    : { *(.ARM.attributes) }

  MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED

  MB_MEM1 (NOLOAD)    : { *(MB_MEM1) } >RAM_SHARED

  MB_MEM2 (NOLOAD)    : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_SHARED

@Remy ISSALYS​  Can you please share with us or help me to understand why there are differences in the linker file one is generate from CubeMX and one provided by BLE_HeartRate example from STM32 repo?

Remy ISSALYS
ST Employee

Hello,

There is an extra dot in auto-generated linker script: *(.MB_MEM2) ; instead of *(MB_MEM2) ;

Due to this typo, the buffers that need to be in SRAM2 are not placed there, so your application doesn't work. For more details, see this post, it will be corrected in the next release.

Best Regards