Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
Hi, I have a doubt. I made some changes in the secure bootloader to achieve certain functionality, but I am unsure whether the code in the secure bootloader is developed by ST (such as drivers or APIs), or if it is intended for user modifications. Specifically, I modified the sfu_interface_crypto_scheme.c file to achieve my functionality.As far as I understand, apart from the Secure Engine project and the we can't modify Bootloader project HAL and LL APIs, CMSIS APIs, and middleware like Secure Engine, KMS, and Crypto. Please correct me if I am wrong.For reference, I am using the STM32WLE5CC controller.
When connecting via USB to a STM32 board in DFU mode, it is possible to read a serial number from the instance path.However, in runtime, the serial number exposed via USB must be programed by the user... It would be nice then if ST provided the algorithm they used to create this string.We do have some hints though. When generating a STCube project, by default a `Get_SerialNum` function is generated in usbd_desc.c.However, it does not produce the same string as the bootloader does. Can anyone please tell us what is the algorithm stored in ROM of each type STM32 to generate the USB serial number string based on the 96-bit UID?On STM32F76/STM32F77, I have found that this function outputs a string that matches the one produced in ROM:`static void Get_SerialNum(void){ uint32_t deviceserial0, deviceserial1, deviceserial2; deviceserial0 = *(uint32_t *)DEVICE_ID1; deviceserial1 = *(uint32_t *)DEVICE_ID2; deviceserial2 = *(uint32_t *)DEVI
Being fairly new to the STM32 architecture I find the following statement in the STM32F103 reference manual really confusing ... "..., this means that only one request must be enabled at a time." (the same also applies to the DMA2 controller). I think this statement should read as follows.... "..., this means that only one request can be serviced at a time." From my understanding (correct me if I am wrong) each DMA channel has its own interrupt vector (and their own addr\counter registers) , so even if every channel on DMA1 was enabled & signaled a request simultaneously the processor would be able to service each request deterministically based on the built-in channel priority order.
have a STM32F429I-DISCO board, start to a new touchgfx project from cubeide,run part file to completed touchgfx setup, cubeide compile project OK, debugging -> white screen! want to konw how to setup LTDC(double buffer -> by address, by allocate single buffer ->by address, by allocate)
Hi, I am using Touch GFX 4.26.0 and the EWARM9 compiler.It was announced that libcpp support was available from 4.25.0 onwards.I have confirmed that IAR9.x\touch_core_libcpp.a for cortex-m7 is supported. (STM32H7)However, I cannot build touch_core_libcpp.a for other cores, such as cortex-m33(STM32U5).As a temporary measure, I am using cortex-m7\IAR9.x\touch_core_libcpp.a for cortex-m33.Could there be a mistake in the compile switch when generating the library?I had the same issue with 4.25.0, and was hoping it would be fixed in 4.26.0, but it wasn't.エラー[Li009]: runtime model conflict: Module Font.o(touchgfx_core_libcpp.a) specifies that '__CPP_Library' must be 'DLib', but module AnalogInThread.o has the value 'libc++'
Hello All, I am working on the touchgfx project and have an application where I have created some screens and performing the different operations while button pressed.I am writing and reading the data content to external EEPROM, eg, some 10-15 parameters while button is pressed and reading it while other button is pressed. Before adding the Eeprom operation My Screens and operations were working fine and fluently, but after adding the code for writing the parameters to eeprom, the screens started to flicker between screens and the GUI is getting distorted. This is not normal behavior, Can any one suggest how shall I take care of it or what would be the best way to perform external Eeprom read write operations, without interrupting the GUI ? Regards,Shi
Hardware: STM32H743, SPI2, DMA, TFT: 320×320, RGB565, DMA transfer, MX correctly configured SPI2 interface, CRC, MPU, DMA, touchGFX component...When creating a new project in Designer, how do I select a template? Or guide me step-by-step to correctly start a HELLO interface. *This post has been translated from Chinese to comply with the ST Community guidelines.
Hi,I am trying to get USBPD running. I need a simple example code without RTOS. So I used CubeMX. As far as I see it should be easy. All I need to do is:- Turn on the UCPD1 under Connectivity. Here I set "Source". - Turn on the UCPD1 Interrupt- Turn on USART1 - Set the DMA settings of UCPD1 and USART1 (here I have used the settings of the working CubeH5 project)- Turn on USBPD under middlewares- Enable TRACER under utilities- Enable TRACER in USBPD under middlewares- Enable GUI_INTERFACE under utilities This config should work, but it is not working. There is no event handling.Now I need help. The ioc file is included. RegardsRoman
Post edited by ST moderator to be inline with the community rules for the code sharing. In next time please use </> button to paste your code. Please read this post: How to insert source code. HI ALL: In my project, I use AWD1 to monitor ADC3_CHN1, then set the high and low threshold, it works very well. However, when I switch to AWD2 and AWD3, there is no interrupt triggered, the setting codes are below: The configuration for AWD1: AnalogWDGConfig.WatchdogNumber = ADC_ANALOGWATCHDOG_1; AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_SINGLE_REG; AnalogWDGConfig.Channel = ADC_CHANNEL_1; // output1 current AnalogWDGConfig.HighThreshold = 800; AnalogWDGConfig.LowThreshold = 500; / AnalogWDGConfig.ITMode = DISABLE; HAL_ADC_Stop(&hadc3); if (HAL_ADC_AnalogWDGConfig(&hadc3, &AnalogWDGConfig) != HAL_OK) { Error_Handler(); } HAL_ADC_Start(&hadc3); LL_ADC_ClearFlag_AWD1(hadc3.Instance); LL_ADC_EnableIT_AWD1(hadc3.
Hello ST Community,I have two NUCLEO-H753ZI boards and I want to use Board 1's on-board ST-Linkto program Board 2's MCU through the CN5 (MIPI-10) connector.My Setup:- Board 1 (Programmer): Connected to PC via USB, will provide ST-Link- Board 2 (Target): Connected via 10-pin ribbon cable to Board 1's CN5- Both boards are NUCLEO-H753ZI (MB1549 or MB1940)My Questions:1. Which jumpers need to be removed on Board 2 to disconnect its on-boardST-Link from the target MCU?- I see several connectors with jumpers in the ST-Link section (CN2, JP4, JP5, etc.)- Which specific jumpers control the SWD connection (SWDIO/SWCLK)?2. Should jumpers remain installed on Board 1 (the programmer board)?3. What is the correct CN5 pinout for the MIPI-10 connector on NUCLEO-H753ZI?- I want to verify my ribbon cable connections are correct4. For power, should I:- Power Board 2 through CN5 Pin 3 (VCC) from Board 1?- Or use separate USB power for Board 2?5. In STM32CubeIDE, I'm getting "Multiple ST-LINKs detected" e
Hello,Is there is any board delivered by STM32 with WiFi capabilities?BR
Greetings,There is a post explaining how the aci_gatt_write_char_desc() function should be used to enable notification events for a characteristic that may be notified by the server/peripheral. The opcode, defined asrq.ogf = 0x3f;rq.ocf = 0x121;is the 16 bit opcode 0xFD21. The September 2025 release of AN5270 (revision 32) omits this command.Can we get an update to the AN5270 with an explanation of this command?Cheers
Hello,I'm using STM32H75x and NOR flash e.g. IS29GL064. I get the NOR demo running but I'd like to do modifications in order to get rid of all the polling stuff.According to the demo, the FMC is configured like this hnor1.Init.NSBank = FMC_NORSRAM_BANK3; hnor1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; hnor1.Init.MemoryType = FMC_MEMORY_TYPE_NOR; hnor1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16; hnor1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; hnor1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW; hnor1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS; hnor1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE; hnor1.Init.WaitSignal = FMC_WAIT_SIGNAL_ENABLE; hnor1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE; hnor1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_ENABLE; hnor1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE; hnor1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ASYNC; hnor1.Init.WriteFifo = FMC_WRITE_FIFO_ENABLE; hnor1.Init.
Hello everyone,I'm currently working on a custom board with an STM32H735AGI6, and I'm trying to create the external loader for the MX25LM51245g NOR flash on it. I use the OCTOSPI1 for the communication. I first created a basic project using STM32CubeIDE in version 1.18.1 to validate the OCTOSPI communication and hardware of my board. And I'm able read/write the register of the external flash, as well as erasing block or full chip, and writing data into it.Then I tried to create the external loader fallowing this tutorial : https://controllerstech.com/w25q-flash-series-part-10-qspi-ext-loader-in-h750/ adapting it to my needs.My problem is that when I test my external loader, through the STM32CubeIDE or the STM32CubeProgrammer, by erasing the first block and writing into it, the erase goes well, but I next get the error log 'failed to download sector[0].I debug my external loader project directly from the RAM (0x24000004) address using STM32CubeIDE, and I'm able to erase a
Has anyone been able to implement the MCP in python or C code? I've been trying to figure it out in Python for a while now. It's really disappointing ST doesn't provide a .c/.h file for this protocol as I've wasted a ton of time trying to re-implement what Motor Pilot does. This is really low quality support from ST to say "go read the documentation and re-implement this complex protocol". Here's a link to a post I made previously with some other good links and info:https://community.st.com/t5/stm32-mcus-motor-control/aspep-mcp-protocol-implementation/m-p/727572#M10997
Hello. I've been struggling to flash a simple TouchGFX application through the STM32 VS Code extension. I am using the Nucleo-G071RB dev board with the GFX01M2 display board. My project was initially created using the TouchGFX designer, then generated the CMake project in CubeMX. In VS Code, I added the SPI_FLASH section in STM32G071RBTX_FLASH linker file, and the cmake/touchgfx sub directory in the CMakeLists. This allowed me to build the project with no errors. However, whenever I try to flash, I get the following:I suspect this has something the do with the external flash. I am aware of an external loader file that you have to select in STM32CubeIDE, but I'm not too sure what would be the equivalent in VS Code.
Hello, I have an STM32F777ZIIT which is being used to gather SPI data in receive-only mode on four SPI channels and using DMA to buffer this data. The DMA buffers are 70 half-words long, configured for circular mode, and half the half-full and full interrupts set up. Using hardware timers, the external SPI devices are being triggered to transmit 35 samples every 1ms. This is being done on four SPI channels, with one of them (channel "D") being phase-delayed by 500 microseconds. Note that this is running on bare-metal.The expected behavior is to see all four channels receive the half-full interrupt after 1ms (D last), then the full interrupt after another 1ms.In a consistent fashion, I am seeing this pattern in the half full and full ISRs per channel. All four should have the same DMA configuration.Time (microseconds)Channel AChannel BChannel CChannel D758Half 768 Half 778 Half 788 Half2717Full 2727
Hi,I am working with an STM32 microcontroller (STM32 C0 & STM32H5 series) and want to implement Modbus communication without using FreeRTOS . Most examples I found are based on FreeRTOS, but I need to handle Modbus protocol in a non-RTOS environment.Are there any recommended Modbus libraries that can work without an RTOS?
Hi. I designed a stm32 board an am trying to program it with a stm32 development board. i am having issues with programming it. This is my board design and my programming setup. I have connected the stm32f4 to my laptop to program it and the Integrated Circuit I'm using on my board is the stm32 g431. I know i have not pulled boot0 to low which is a problem i tried to resolve using option bytes where i set the nBoot1 byte to 0. But i have my boards boot up and then after clearing flash storage, they are usually stable. The board isn't dead since current is being drawn but the stm32 status LED is blank and when i try to connect to it with the stm32 programmer, i get ' Unable to detect Core ID. No stm32 target found. If your product uses debug authentication, please enable debug authentication. Please help me figure out what is wrong. This is the second board that has gone this way. I only have 3 more left.
Hello, I'm having problems with a simple task: receive blocks of data from UART. The blocks are sequences of 1-300 bytes, that are receiveid with a 1 second interval. The value is stored in one buffer of 350 bytes.When I send a big block of 270 bytes after other blocks(of 60 bytes by example) in that 1s interval, the Stm32 RESETS! But if the interval is longer, like 5 seconds, it doesn't reset and receive the data correctly. I tried with pooling and interruption, the result is the same. I'm using 115200 baud. Lowering the baud rate also reduces the interval that doesn't cause a reset, but I can't use this solution.WatchDog is already disabled. By this moment, the code doesn't do anything more.
I am trying to program my custom board with STM32WB15CCU6E on it in Arduino IDE. I always upload the code to my nucleo-wb15 board to verify if it is working before uploading it to the custom board. The main difference between the chip used on nucleo-wb15 and STM32WB15CCU6E is that my custom board has no external 32.768 kHz crystal installed, so it mainly relies on HSE or LSI.However, I could not make my BLE module advertise on my custom board while it is working fine on the nucleo-wb15. I am suspecting except the Arduino code, I probably need to change something in the variant file. Anyone knows how to do it? thanks.
Hello, I have managed to generate a IP through the LWIP in the STM32 IDE and establish a connection via Ethernet, although now when I upload the files from hasseb/stm32h7_atsame70_ptpd: IEEE 1588 PTP daemon for STM32H7 and ATSAME70 (github.com) I seem to have a large portion of the code in the main.c file greyed out. As well, I'm not sure if it is concerning that there is a warning saying "_gettimeofday is not implemented and will always fail". I found some documentation stating this is not too much of a concern, as it's only a warning and not an Error. Furthermore, I have tried getting an output using this function just as a test and no luck: https://stackoverflow.com/questions/42747128/does-hal-gettick-return-ticks-or-milliseconds-and-how-to-measure-in-microsec/42749284#42749284 __weak HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) { /*configuring the SysTick to have an interrupt in 1ms time basis*/ HAL_SYSTICK_Config(SystemCoreClock /1000); /*Configure
Hi ST Team,I’m working with an STM32F303VET6 and need help with EEPROM emulation. I’m looking for guidance on the correct Flash setup, example code for read/write, and best practices for reliability.Any ready examples or tips for integrating this into STM32CubeIDE/EWARM would be really helpful.Thanks in advance for your support!
Hi,Im new to STM and trying to use ADC with DMA in circular mode but the value of my ADC remains at 0. I also tested it with Polling, which works.ICache and DCache : Enable void menu_adc(void) uint32_t adc_buffer[1]; uint16_t adc0; uint8_t flag_adc; void menu_adc(void) { char buf[30]; HAL_ADC_Start_DMA(&hadc1, adc_buffer, 1); while(1){ if (flag_adc == 1) { flag_adc =0; int len = snprintf(buf, sizeof(buf), "ADC0: %u\r\n", adc0); HAL_UART_Transmit(&huart1, (uint8_t*)buf, len, HAL_MAX_DELAY); HAL_Delay(200); } if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) { uint32_t adc_value = HAL_ADC_GetValue(&hadc1); int len = snprintf(buf, sizeof(buf), "ADC0: %lu\r\n", adc_value); HAL_UART_Transmit(&huart1, (uint8_t*)buf, len, HAL_MAX_DELAY); } } } void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if(hadc->Instance == ADC1) { adc0 = adc_b
Hello everyone,I'm a beginner in embedded systems and I'm trying to flash my LVGL UI resources to the external QSPI flash (a W25Q64) on an STM32H743IIT6 using OpenOCD. I'm running into some issues with OpenOCD detecting the flash.Here is what I have done so far:Linker Script (.ld): I have defined the external flash memory region in my linker script and created a section named .lvgl_assets that points to this external flash address.Data Placement: I'm using __attribute__((section(".lvgl_assets"))) in my code to place the UI resource data into this specific section.Binary File: I have successfully generated a separate .bin file that contains only the data from the .lvgl_assets section.My goal is to flash this .bin file to the W25Q64.My OpenOCD Problem:I am using the stm32h7x.cfg target file provided by OpenOCD. I saw that it contains a QSPI driver, so I added the following line to my config:set QUADSPI 1I then run OpenOCD with:openocd -f interface/cmsis-dap -f target/stm32h7x.cfgAfter it
ST Community highlights – April to June 2026
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.