Get ready for the STM32 Summit 2026 | Online, November 3
Ask questions and discuss STM32 wireless solutions and their implementation for running Bluetooth LE, Zigbee, LoRaWAN applications.
Most recent activity
Hello everyone,I wonder if it is possible to develop and run a custom coprocessor firmware on the Cortex-M0 of the chip. From what I understood so far, the FLASH and RAM portions dedicated to FUS, Safeboot, and Wireless Stack are locked from the factory, with the FUS being the only possibility to write anything to it. And since the FUS appears to perform a digital signature check for any firmware sent to it, there isn't an easy way to flash your own. So, is there an official way to do it?From what I understand about the boot process of CPU2 (i.e., the Cortex-M0), it gets started by the CPU1, but its start offset from the secured option bytes. The manuals (and my own unsuccessful attempt) tell me that the secured option bytes can only be written by the CPU2, so any normal attempt to write to them (e.g., with the STM32CubeProg tool) will fail. But shouldn't I be able to, in principle, create a program for the Cortex-M0, write it so some designated portion of the flash, disable all the se
Hi all,I have my own customized board based on STM32WB55RGV6. The board has HSE of 32 MHZ but don't have LSE. I am using LSI or (HSE/32) as RTC clock and HSE/1024 as RF wakeup clock. I am facing two different problems.Case 1: First I tried with examples of BLE including BLE_P2P_Server, BLE_Custom and BLE_HeartRate from CubeMX. (Only change I did is disabled the LSE and hence LPM (low power mode) and relevant clock source setting). When I downloaded and tried to run the application, I always get HardFault from MX_APPE_Process(); more specifically when executing following /* Execute the task */ TaskCb[CurrentTaskIdx]( );Case 2: Then after I tried to develop a project on CubeMX from scratch by selecting STM32WB55RGV6 chip (Not Nucleo board). I just made bare minimum settings with HeartRate sensor service just to see if it runs or not.After downloading and running, I can see my device in ST BLE Toolbox android app but when I try to connect it with board, it doesn't get connected
I've seen that it's support Bluetooth 5.2 which added LE Audio feature.Is it possible to make SSTM32WB55-based sound device (i.e. BLE to 3.5 mm jack converter)?And how if so?
Hello,My firmware sends data to TTN when I double push on the button of my board. When the first push is detected, the board wakes up from low power mode and a timer is launched to detect if there is a second push. At the end of the countdown, if there was another push, the board sends data. Then, the counter of pushs variable is reset and the board goes in low power mode.I configured the Timer2 in order that it makes cycles of 500 ms : clock source : internal clock (48 MHz) prescaler : 1000 counter period : 24000 auto-reload preload so time interval is : (1 000 * 24 000) / 48 000 000 Hz = 0.5 seconds My problem is no matter what the value of counter period x prescaler (I tried with 12 000 000, 24 000 000, 4 800 000, 48 000 000), the timer counts cycles of 1min30 (I toggle a LED when a new cycle begins).Do you have any idea what I did wrong or miss in my firmware ? I can add the source code if ne
I am using the STM32WB55 Series for my application. I am using BLE and Zigbee on this MCU. I am registering my devices for FDA/CDSCO certification. The department is asking for ETA certificate. DO we have ETA Certificate for Controller?
I already got it: CPU2 is not accessible by customer (at least, using official SDK).Anyway, we have an WB-based project that will hugely benefit from offloading some resource-consuming tasks to CPU2. They are not related to radio, we're not using any kind of wireless stuff at all. WB was chosen because of price and compact QFN package.My first question: is that an SDK-level limitation, or is it possible to extend SDK with proper register definitions, IRQ vector tables, linker scripts etc (using SDK for WL series as a reference, where for some reason CPU2 is fully unlocked) to be able to build custom binaries for CPU2?My second question: if I'm not interested in radio-related applications at all, is it possible to wipeout FUS completely and unlock access to protected flash regions? Even if FUS 'self-destruction' will be irreversible.This CPU2 access restriction in WB series in non-radio applications is a bit artificial to me, given that WL series offers no such restriction (alas doublin
I'm working with STM32WL and trying to be able to generate PWM signal after wake up from STOP2 to control RGB LED. Before going to STOP2 I deinitialize PWM channel pin and disable timer clock. MCU wakes up on button press. After wake up timer clock is beeing enabled and channel pin is reinitialized. Despite that the LED is off. What else should I do to make it work or what I've done wrong? /* USER CODE BEGIN 2 */ GPIO_InitTypeDef GPIO_InitStruct = {0}; /* Green LED on */ HAL_TIMEx_PWMN_Start(&htim16, TIM_CHANNEL_1); __HAL_TIM_SET_COMPARE(&htim16, TIM_CHANNEL_1, 1000); HAL_Delay(500); /* DeInit of LED pin, disable TIM16 clock */ HAL_TIMEx_PWMN_Stop(&htim16, TIM_CHANNEL_1); HAL_GPIO_DeInit(LED_G_CH_GPIO_Port, LED_G_CH_Pin); __HAL_RCC_TIM16_CLK_DISABLE(); /* Enter STOP2 */ HAL_SuspendTick(); HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI); /* Wake up from STOP2 on button press */ SystemClock_Config(); HAL_ResumeTick();  
Hi,I am using Zegbee messaging cluster on STM32WB55 to send messages between some Zigbee end devices and a coordinator.Each end device measures the temperature via I2C sensor and sends a message with the temperature value to the coordinator and then goes to sleep mode for 5 seconds. The software works well.But when I try to also measure the reference voltage to send its value with the temperature value in the message, the software freezes!In app_zigbee.c:static void APP_ZIGBEE_InitMsg(void){ APP_DBG("APP_ZIGBEE_InitMsg"); uint8_t buf22[59]; memset(buf22, '\0', sizeof(buf22)); char buf0[]="TM+1+"; strcat(buf22, buf0); // Adding some text to the meassage uint8_t buf2[3]; memset(buf2, '\0', sizeof(buf2)); float temp_c2 ; temp_c2 = TMP117_get_Temperature2(hi2c3); // measuring the temperature sprintf((char*)buf2,"+%d", ((int)temp_c2 / 100)); strcat(buf22,buf2); /
I had one STM32 debugger (ST-LINK-v2). how to learn the STM32 debugger and how to connect the stm32 chip to the debugger. give any solution or tutorial.I will be waiting for your replays. Thank you.
If I call SUBGRF_SetRx() with a timeout of, let's say 100 ticks in LoRa mode, I don't get an RX timeout IRQ at the end of the timeout.I have checked the radio status with SUBGRF_GetStatus(). The radio goes to RX then back to standby.I have cross-checked that SUBGRF_SetDioIrqParams() is called so RX timeout IRQ is enabled.I have cross-checked that SUBGHZ_Radio_IRQHandler is enabled (indeed it is called after a TX).In the datasheet the RX/TX timeout IRQ is indicated as valid for GFSK and LORA mode.I realize that the drivers manage the radio timeouts in LoRa mode with timers, not with the radio abilities. So what I am trying to do is not covered by the examples.Do I miss something?
Hi,I have build a custom application from end_node project example on LoRa-E5 board.All works fine with comissioning from CubeMX.But now I want to use values loaded from flash.So I added 3 variables :uint8_t device_eui[8];uint8_t app_eui[8];uint8_t app_key[16];I can read/write values from flash.But now : how to use this values for LoRa-Wan OTAA joining ???!!!!How could this be sooooo hard to do ???!!!!!Thanks for help.
Hello ST,Below function need for Unprovising from network ::void Appli_Unprovision(void){ if(!ProxyFlag) { /* No GATT connection */ BLEMesh_StopAdvScan(); PalNvmErase(NVM_BASE, 0); PalNvmErase(NVM_BASE, 0x1000); PalNvmErase(APP_NVM_BASE, 0); PalNvmErase(PRVN_NVM_BASE_OFFSET, 0); TRACE_M(TF_PROVISION,"NVM erased\r\n"); BLEMesh_Unprovision(); AppliNvm_ClearModelState(); TRACE_M(TF_PROVISION,"Device is unprovisioned by application \r\n"); BLEMesh_Process(); NVIC_SystemReset(); }}We don't want to reset the system but without NVIC_SystemReset(); system behave will change and Transport layer become busy.Please provide the solution for this. We have already spent too much time in STM32WB Mesh network development and our project dead lin
Hi,So for a project I'm working on I'm using an STM32WB55RG nucleo board. For my tests I've powered the board fine before using either usb port and through the VBAT pin when using a DC power supply. An aspect of my project is that it needs to be battery powered so I ran a 9V battery through a voltage divider to ~3.4V and sent it into the VBAT pin. Now LED 5 lights up showing it's being powered but LEDs 1-3 aren't lighting up as they would if the board ran my program. To debug I connected it via ST-Link to my computer but now it refuses to run the debug stating "no device found on target". I'm thinking I somehow screwed the pooch on this board and am wondering if it's savable?I suspect it has something to do with the current but I can say that after measuring it it used about 30 mA and I figured it would have trouble at ~100 mA.Side note: I'm now aware of just connecting the 9V directly into the VIN arduino port and I have my program running fine on a separate board powered that way.
Good day,As an extension of this discussion, I'm having trouble updating the BLE stack using the BLE_Ota code.From the linked discussion, I should be downloading my new stack to 0x0809D000 (I'm also going from an older, smaller stack at 0x080CB000 to 1.13.X). However, I'm having the following issue:The STM BLE Sensor app does not allow me to enter 0x0809D000 as a valid address (see image), so I can't test if the address is the issue. In the context of the app, it would be 0x9D000.Using another address (say 0x08060000 or 0x08080000) does not work - SHCI_C2_FUS_GetState return with error code FUS_STATE_ERROR_IMG_NOT_FOUND. To my understanding the FUS should find the firmware automatically by looking for some magic word. If this were true, then there is no reason why it should not find the image at 0x08060000 or 0x08080000.Any thoughts as to what is going wrong i.e. why is the image not found?More information:I've verified that the image does get programmed to flash memory (using STM32Cub
I'm trying to use printf with SWV.I'm using a nucleo-wl55jc1 board (stm32wl55). I have soldered SB8 to connect SWO to stlink.I have made all the config but the it doesn't show any trace.this is my setup:Create an empty STM32 project for the NUCLEO-WL55JC1Initialize all peripherals with their default configuration: NoIn CubeMX: Set Debug/Trace: JTAG and Trace: Trace asynchronous swCLK config:debug config:SWV settings:and i click on the red button after thatCODE:override write function:and then printf in main functionAnd ITM_sendchar(*ptr) is being executed, but no printf ouput in console.also i checked with the oscilloscope the signals while debugging : I can see that SWDIO and SWCLK toggle and SWO is at 3.3V
Hello,I would like to disable the LPUART in my project to save power consumption. I am programming a point to point network with LoRa modem. My project is based on the ping pong subghz example.Curently, my board consumes around 107 µA in sleep with the stop mode 2 enabled. I would like to reach a consumption in the range of 1 µA.I think the excessive consumption comes from the LPUART I use to debug. But when I disable the LPUART in CubeMX in the .ioc file and I generate the code, I get compilation errors in stm32_lpm_if.c with vcom_Resume function because usart_if.c does not exist yet.In fact in .ioc file in the subghz phy middleware section, in platform settings tab, the VCOM section is still present with USART Undefined and No solution. So is this middleware configurable without UART ?I am using a custom board with the LoRa E5 STM32WL5EJC module embedded and the STM32WL package.Thanks you in advanceRegardsEDIT : problem solved but I can't delete my post
This uplink frame count increment error frequently occur when we reducing tx duty cycle. Please give me any solution this happen so many times in a day.
I am building ble application on stm32wb and below is the RTC configuration via cubemx.I am trying to implement a scan timeout using the timeserver. Basically, I start a scan procedure and continue scanning until the time-out callback is invoked which terminates the scan procedure. However, for some reason, the timeout callback is never invoked. Below is my API usage./** * @brief callback to timeout if dut wasn't found */ static void scan_timeout_cb(void) { printf("ble: scan timed out\r\n"); // terminate the scan procedure aci_gap_terminate_gap_proc(GAP_GENERAL_DISCOVERY_PROC); } static struct { uint32_t process_id; uint8_t id; HW_TS_Mode_t mode; HW_TS_pTimerCb_t cb; bool created; } scan_timer = { .process_id = 0, .mode = hw_ts_SingleShot, .cb = scan_timeout_cb, .created = false }; // create a timer if (!scan_timer.created) { HW_TS_ReturnStatus_t tmr_ret = HW_TS_Create(scan_timer.process_id, &scan_timer.id, scan_timer.mode, scan_timer.cb); if (tm
Hi,I get GPS time from lorawan network using "DevicetimeReq" command. There is an example how to convert UNIX epoch time to calender time in UM2073 application note. But it uses only second field of system, doesn't benefit from sub-second information. I need better accuracy in my application. Is it possible? typedef struct SysTime_s{uint32_t Seconds;int16_t SubSeconds;}SysTime_t;
Anyone can explain me where do the following constants come from and what is their function in the RTC? I am starting my own application and I would like to know if these values suit my own application.
Hello, A corner case has been recently identified with FUS v1.2.0. It is not possible to upgrade back-to-back a wireless firmware with a new version that is exactly one sector bigger than the installed version. This limitation applies only when the running wireless firmware is not deleted before an upgrade is requested to the FUS (this is the default implementation case for all OTA applications). When using CubeProgrammer, there is no issue since the tool, by default, first delete the existing wireless stack before installing the new one. From v1.14.1 Cube Firmware Release, the size of the wireless firmware binaries will be controlled to guarantee at least 2 sectors size difference between all generated binaries to work around the limitation.The following wireless firmware from v1.14.0 do not comply with the rules that will be implemented to work around the limitation and should not be used in production if it is required to support the upgrade back-to-back of the wireless firmware wit
I designed my custom board based on STM32WB55CCU6 and I am using an ST-Link programmer for the process (not DUF mode).I am trying to read The FUS version and update FUS.The steps that I am following :1.Delete the existing wireless stack: STM32_Programmer_CLI.exe -c port=swd mode=UR –fwdeleteResult: 2. Read The FUS version STM32_Programmer_CLI.exe -c port=swd mode=UR -r32 0x20030030 1Result: To ensure this, I've checked the address 0x20030030 with STM32Cube Programmer, it is 00000000. My question is why after fwdelete I got -> 0x20030030 : 00000000 ?
I designed a custom board with STM32WB55 with a USB connection to update the BLE stack in DFU mode.When I connected the board to my laptop's USB port, it appeared in the device manager and was detected as a USB device, however since yesterday when I was trying to update the BLE stack on STM32WB55, all of the sudden, my laptop can't detect the board anymore.I can program the board with the ST-link programmer and MCU is functioning, but I can't use DFU mode.What would be the problem? Why the MCU is not detected by the laptop? Would it be possible that I remove DUF bootloader by mistake?
Hi,I have a problem when I try to develop a program with STM32IDE for my NUCLEO STM32WB15. I want to use the BLE with a custom template but unfortunately, after launching the program I get a HardFault Error (I guess from the RTC).According to my research, there are a lot of bugs in STM32IDE for this kind of development.Can you help me?Here my version:STM32IDE -> 1.10.1My config :
**English is not my natural language, sorry for my poor English.Hi, I'm beginner to STM32.I use WB55 boards to connect ble mesh. I used the example code in STM32 CubeIDE (BLE_MeshLightingPRFNode). However, application in phone(ST BLE Mesh) rarely finds the boards. There are no problems with the boards, cause I checked the bluetooth with other codes.Are there any solutions to get better connection? Or can there be any error in example code?Thanks, and have a good day.
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.