Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
Hello STM Community,I am a beginner working with the STM32H7B3I-EVAL evaluation board based on the STM32H7B3LIH6Q MCU, and I am currently setting up my development environment on Ubuntu 24.04.3 LTS.I installed STM32CubeIDE 1.18.0 using the following installer:st-stm32cubeide_1.18.0_24413_20250227_1633_amd64.sh.zipI am facing a few issues and would really appreciate your guidance.1. Need existing demo codes for STM32H7B3I-EVALI would like to get the existing/demo example codes available for this board, especially the examples related to the firmware version currently flashed on my board, which shows:Firmware Version: V1.0.1Could anyone please guide me on where to find the exact demo code corresponding to the factory-flashed board behavior, if available?I am specifically looking for separate demo examples for:LEDADCGPIOUARTSPII2CTFT/LCDTouchCameraWi-Fiother onboard peripheralsI am using Linux Ubuntu 24.04.3 LTS, so Linux-compatible steps would be very helpful.At the moment, I mainly need
Hello,I am currently working on a schematic featuring 3x STM32H753ZIT6 MCU , and I have a few questions regarding the JTAG implementation:(1) From what I’ve gathered from various sources, the NJTRST signal is a JTAG ENABLE, meaning that in normal operation mode it must be tied to GND and driven to '1' only for JTAG debug. However, in some implementations on internet i've actually seen it connected to a pull-up resistors.What is correct? (2) I need to daisy-chain the JTAG between three components for debugging via an external channel. Does the NJTRST synchronize the three components for this purpose? In other words, should it be connected in parallel? (3) And what about the NRST signal? Is it also used to synchronize the three components during JTAG debugging, or is it unrelated to this chain? ThanxEli
Hello, What HAL2 API can I use to turn on/off the output of a timer? In HAL (ver 1) this could have been done like this:TIMx->CCER &= ~TIM_CCER_CC1E; // Example for Channel 1: ~TIM_CCER_CC1E // or __HAL_TIM_MOE_DISABLE(&htimx); Thank you,-Gil
Hello.I am trying to implement RFID using NXP's NT3H2211W0FT1. The microcontroller I am using is the STM32C031F6.After powering on the board, the first thing I do is read the data from the NT3H2211W0FT1 via I2C, but sometimes I can read it and sometimes I can't.I tried leaving a wait of more than one second after powering it on, but that didn't change the situation.The program for the I2C part is below.while(icdata_flg==0){ HAL_GPIO_WritePin(GPIOA, ANNTENA_SW_Pin,GPIO_PIN_SET); HAL_Delay(10); tdata[0]=0x01;//Read HAL_I2C_Master_Transmit(&hi2c1,0xaa,tdata,1,100); HAL_Delay(10); HAL_I2C_Master_Receive(&hi2c1,0xab,rdata,8,100); HAL_Delay(10); HAL_GPIO_WritePin(GPIOA, ANNTENA_SW_Pin,GPIO_PIN_RESET); } I would appreciate any advice you could give me regarding I2C communication.
Hello,I am working with an STM32F407VGT on the Discovery board using bxCAN.I can communicate successfully at 125 kbps, but when I switch to 250 kbps or 500 kbps, communication completely fails:No messages are transmitted or receivedPCAN shows Bus Heavy / error framesSetup:MCU: STM32F407VGTCAN interface: bxCANTransceiver: PCA82C251Tool: PCAN-USBTermination: 2 x 120Ω (verified ~60Ω between CANH and CANL)Cabling: short wires, common GND connectedObservations:125 kbps works reliablyAt 250 kbps and 500 kbps:No TX/RX activityPCAN reports Bus HeavySame wiring and hardware used for all speedsAdditional checks:Filters configured to accept all messagesCAN1 clock enabledGPIO configured as AF9, very high speedTested with single node + PCANQuestion:What could cause CAN to work at 125 kbps but completely fail at higher bitrates on STM32F407?Any suggestions or known hardware limitations on the Discovery board?Thank you.
Hi,I took reference for calulating the timing / cycles for my MT29F1280AJAAA (I'm using STM32H745ZIT3) In Asynchronous mode - 5, which is saying ~50Mhz in the datasheet. But I'm running FMC at 131MHz clcok, what ever the calculation I have calculated are as per this knowledge notes, https://community.st.com/t5/stm32-mcus/how-to-configure-the-fmc-peripheral-to-interface-an-stm32-mcu/ta-p/705805So help me debug the issue using CRO hardware or Software timing calculation, What I'm observing is that in middle some pages data integrity is failing, after writing page 25m sec delay I'm reading back. its failing what ever the content I have written on to that page.Running FMC at 131MHz, and sysTick HCLK = 396MHzMy calculations, I also tried changing values by incrementing then, last or first byte is coming 0xFFTCLRSETUPTIME = 3TARSETUPTIME = 3STEUPTIME = 2WAITSETUOTIME = 3HOLDSETUPTIME = 2HIZSETUPTIME = 4Question : Is Common space timing and Attribute space timing should be same&nbs
Hi, I'm relatively new to STM32 series and so far have experience with STM32F103 only. My current goal is to learn and work on master-slave system, with master being an embedded linux (IMX6ULL), and the slaves are (supposingly) STM32 boards. Cameras modules and some sensors will be connected to STM32 boards. The STM32 will proess the camera stream and sensor readings locally, and send the processed/estimated results to the IMX6ULL. Some prior serach and local technical support recommend me STM32F104 series, which some sources suggest its image processing capacities are limited. I'm a bit lost in the sea of choosing appropraite hardware setup, and would like to hear some further comments on hardware choice. By far my conditions on board choice are the following: (1) Has DCMI camera interface (2) Hardware has sufficiently capacity to process VGA image stream around 5-10 fps. (3) Can execute STM32 image processing library (https://github.com/STMicroelectronics/stm32-mw-ipl) There may be f
Hello, I have 2 boards an STM32F407 disco and an STM3F746DISCO and i want to create a project that implements an external LCD screen to the board however when the project runned well with the F746 the screen didnt work with the F407 any guidelines?
I've been using a nucleo l476rg with a LIS2DUX12 sensor and I need to use the SPI protocol, but came as a surprise that the MISO line is not working. When it's not getting 0xFF (should be 0x47), gets inconsistent values. Tried changing CPHA, CPOL, prescale and none of that is working.// 1. Tx and Rx arrays uint8_t tx_wakeup[2] = {0x3E, 0x01}; // Register 0x3E, value0x01 (Soft Power-Down) uint8_t tx_whoami[2] = {0x8F, 0x00}; // Read 0x0F (WHO_AM_I) uint8_t rx_buffer[2] = {0x00, 0x00}; char msg[50]; HAL_Delay(100); // Wake up sequence HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, tx_wakeup, 2, 100); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); // Read who_am_i HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET); //HAL_SPI_TransmitReceive(&hspi1, tx_whoami, rx_buffer, 2, 100); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET); // print data sprintf(msg, "WHO_AM_I = 0x%02X\r\n", rx_buffer[1]); HAL_UART_Transmit(&huar
I designed my own PCB based on the EVSTSPIN32G4 evaluation board and created a project in STM32Cube IDE. When testing the STSPIN32G4’s internal driver, I encountered an issue: no matter what I do, the GHS voltage remains at 5.8V, the GLS voltage is 0V, and the OUT voltage is also 5.8V. I have tried setting PE8 to high or ground, as well as using PWM, but the voltage on GHS1 never rises. Reading the I²C register values does not trigger any protection; the STBY value is 0 and does not enter low-power mode; the nFAULT pin remains low regardless. As far as I can tell, there are no errors. Could an expert please provide some guidance? Thank you.The ST Community moderator has translated the post to comply with the language of the Community which is English. For more information, see: ST Community Terms and Conditions - STMicroelectronics CommunityTranslated with DeepL.com (free version)
Hello my friends, I hope you are doing great.I am trying to create a custom driver for UART peripheral with CMSIS register header files.I have created a build system using the board files and linkers and make. So far I have been able to make drivers for the GPIO pins.Now I am trying to create my own driver for the UART peripheral via the CMSIS. So far I have created this: int uart_params_init(uart_t *uart){ if (!uart) return -1; // defualt configs: uart->tx_pin = 9; uart->rx_pin = 10; uart->baudrate = 115200; uart->tx_port = GPIOA; uart->rx_port = GPIOA; uart->instance = USART1; uart->tx_af = 1; uart->rx_af = 1; return 0; } int uart_init(uart_t *uart) { if (!uart || !uart->tx_port || !uart->rx_port) return -1; if (uart_initialized) return 0; // Enable GPIO clocks for the port: if (uart->tx_port == GPIOA || uart->rx_port == GPIOA){ RCC->IOPENR |= RCC_IOPENR_GPIOAEN; } else if (uart->tx_port == GPIOB || uart->rx_po
Hi,I have a question regarding STiRoT provisioning on the STM32H573.As I understand, during the Secure Boot provisioning process, the public key hash is injected into the OBKeys area of the device to establish the root of trust. However, I would like to clarify where the original public key itself is stored and how it is handled during runtime verification.Based on our current design, we are planning the following approach:The firmware image is signed using our own external HSM, not STM32HSM.The corresponding public key hash is provisioned into the device OBKeys during manufacturing.At boot time, STiRoT checks that the public key contained in the firmware image matches the provisioned public key hash, and then uses that public key to verify the firmware signature.From this perspective, our understanding is that the device does not store the full public key in its internal non-volatile memory (e.g., OBKeys or other secure areas), but instead relies on the provisioned public key hash in
Hi, I am using the STM32N6570-DK development kit and I want to flash my FSBL and Application firmware into external flash using USB. Currently, I am able to flash the firmware using ST-LINK, but I want to perform flashing through USB as well. I configured the boot pins as mentioned in the datasheet: BOOT0 = High BOOT1 = Low Current behavior The device is detected in STM32CubeProgrammer when connected via USB. USB connection is successful. Partitions such as FSBL, RSSE_FW, RSSE_BLOB, RSSE_PLUGIN, etc., are visible. However, the Download / Erasing & Programming option is disabled. Questions Is flashing external flash through USB supported on STM32N6570-DK? Do I need to configure any OTP boot source or BOOTROM settings to enable USB flashing? Any guidance or examples on how to enable external flash programming via USB would be very helpful.Thank you.
Hey ST-Community,I’m working with an STM32H7S78-DK board and trying to get Ethernet running. TouchGFX and FreeRTOS are working fine, but I’m stuck with lwIP. The task starts, but DHCP never succeeds (the printed IP is always 0.0.0.0). I also tried with a static IP, but I still can’t ping the board. Deactivating TouchGFX didn't help.I've followed this video: STM32 : How to Get an IP Address via DHCP on STM32H7S78-DK with LwIP using IAR EWARMLwIP has the following memory settings:MEM_SIZE = 14*1024BytesTCPIP_THREAD_SIZE = 4 * 1024BytesI've configured the MPU as well following the given Video.I’m not sure where to look next – maybe I’m missing some configuration step? Has anyone successfully used lwIP with this board and could give me a hint?Thanks a lot in advance!
I am trying to understand SMiRoT and SMuRoT for product development based on the STM32H573 and Secure Manager, but from the public documentation they both look mostly like black boxes.Since they seem to be built on top of STiRoT / STuRoT, I am currently trying to understand STuRoT first.For STiRoT, AN6007 Appendix A / Figure 11 is very useful because it provides a clear high-level startup sequence.It helps explain the logic of reset, runtime protection activation, secure firmware update handling, uRoT image verification, bootloader fallback, and jump to uRoT.But for STuRoT, I cannot find any equivalent public document that shows its internal startup sequence or high-level state flow.At the moment I can only infer that after STiRoT verification, STuRoT runs in HDPL2 secure mode, reconfigures its secure context/MPU, verifies the user application, and then executes it. But I have not found an official flowchart or sequence description.So I would lik
I am currently working on an STM32-based project using UART for continuous data transmission between the microcontroller and a PC application. The system works fine initially, but I am facing intermittent data loss and incomplete packets during long-running communication. The issue becomes more noticeable when the baud rate is increased or when multiple interrupts are active in the system. What I have already tried: Verified baud rate and clock configuration in STM32CubeMX Enabled UART interrupt-based receiving Increased buffer size for RX handling Checked wiring and physical connection stability Despite this, the problem still occurs randomly after some time of operation. I would like to ask the community: What are the best practices for stable UART communication in STM32 under continuous data flow? Should I switch to DMA-based UART instead of interrupt mode for better reliability? Are there any known issues with buffer overflow or interrupt priority that could cause this behavior?
I am generating a PWM signal using timer1 register and use it in Center aligned mode. I want to to know if i can modify the timer counter register TIMx_CNT register with some "x" value in the timer interrupt instead of resetting it to 0.
Hello I am trying to implement I²C slave on a STM32U385RGTxQ in non-blocking mode, on I2C2.To match I²C standard I tried to use the Address macthed interruption but the interruption is never trigged. I used the function HAL_I2C_EnableListen_IT(&hi2c2) to enabled it; My issue is, I don't reach neither the I2C2_EV_IRQHandler(void), the I2C2_ER_IRQHandler(void) or the HAL_I2C_AddrCallback() when sending the slave address. Please found attached my project. And bellow some pictures of my I2C2 init, an oscilloscope capture and my I2C2 register when I am in debugger : Best Regards Thibaud HABRAND
Hello,I've just received my fresh new SMT32H747I-DISCO dev board and I wanted to try some samples.I have some experience deveolping on embedded Liuxes, but this is my second MCU (the first one was a Raspberry PICO, don't know if this counts). I am using a MacBookPro with Apple silicon (M3) and MacOS 14.4What I have done:read the specs, configured the board to get power and STLink from CN2 (as is by factory)installed every tool available:STM32CubeProgrammerSTM32CubeIDE (which also installed a SMTLink server nstall ,st-stlink-server.2.1.1-2, installed successfully ) even STM32CubeMXconnected the board to a USB-C port on my Mac via a USB-C to USB-B mini cable2 times out of three the main led (LD10?) starts red, then flashes red/green then stays green. The other times the board LED stays red. In either case, nothing on the LCD display. to me the board seems waiting.On the former occurrences, MacOS then asks me for permission to connectbut that's it. I wanted to install the Tutti Fruit
I am not able to erase a section of internal flash of the NUCLEO-H633RE.Using the debugger I see the Flash is all 0x00 before I try to erase. I verify that Flash is not locked i.e.if (*FLASH_NSCR && LOCK) { *FLASH_NSKEYR = 0x45670123; *FLASH_NSKEYR = 0xcdef89ab; }then I try to erase a section of Flash i.e./* ************************************************************************* */ /* */ /* EraseFla - Erases 8K page of Flash, Waits for Flash not busy. */ /* Inputs: uint32_t page holds the page to erase. */ /* Outputs: None */ /* */ /* ************************************************************************* */ void EraseFla(int EraPage) { while (*FLASH_NSCR && BSY){}; n = *FLASH_PRIVCFGR; // just testing n = EraPage >> 7; if (n && 0x0800) { n &= 0x07C0; n |= 0x80000004;} // BKSEL and SER else { n &= 0x07C0; n |= 0x00000004;} *FLASH_NSCR |= n; *FLASH_NSCR |= STRT; while (*FLASH_NSCR && BSY){}; } With the debugg
English language:STM32H7 Ethernet + DMA + Cache Explained + LwIP (EN) One of the most common sources of confusion when working with STM32H7 microcontrollers and Ethernet (via LwIP + HAL ETH) is data cache (D-Cache) behavior.When using DMA (like Ethernet MAC DMA), if D-Cache is enabled (which it is by default in STM32H7 projects), you must manage cache coherency manually. Otherwise, the DMA peripheral and the CPU will not agree on what data is in RAM.I encountered this exact issue myself and spent significant time identifying the root cause. Since many others using STM32H7 are likely to face this same problem, I'm sharing this explanation to help save your time and effort.Problem:If you fill a pbuf->payload buffer with data and send it using HAL_ETH_Transmit() without cleaning the D-Cache, the CPU will still be holding the most recent data in its cache, but the DMA will read stale or uninitialized data from RAM.Result: corrupted Ethernet frames, broken ping replies, UDP iss
Hi all, Thank you for looking at my thread.I have started a proof of concept project that runs ThreadX and TouchGFX on a custom QSPI display on STM32F7. I noticed from the documentation at https://support.touchgfx.com/docs/development/touchgfx-hal-development/scenarios/scenarios-configure-rtos that the following warning is highlighted.Now indeed when I generate the code from CubeMX the MX_TouchGFX_Init is not getting called from anywhere, and in the documentation it suggests to call it from app_azure_rtos.c in the tx_application_define method.However in such method the main thread is already been initialized.If i replace App_ThreadX_Init with MX_TouchGFX_Ini, I am getting a TX_POOL_ERROR.What am I supposed to do to initialize TouchGFX?Thank you
Hi everyone,I'm experiencing a very specific bus/clock issue on a custom board using the STM32U5G9ZJ (and also tested on STM32U5F9ZJ).The Problem: My display (320x240, RGB565 via LTDC) only works if the HSPI1 peripheral is enabled in CubeMX. As soon as I disable HSPI1 (which I need to do to free the PH9 pin for power management reasons), the screen turns grey, even though the LTDC settings remain unchanged.Key Technical Details:Data Location: All assets (images/fonts) are stored in Internal Flash memory. The HSPI/OctoSPI bus is NOT used during the display process.Memory Status: In Debug mode, I can confirm via the Memory Browser that the Frame Buffer (located at 0x20025800) is correctly populated with pixel data.LTDC Behavior: Despite the RAM being correct, the LTDC fails to output data to the panel when HSPI1 is OFF.Configuration: Pixel Clock (PLL3R) is at 200MHz, GPIOs are "Very High Speed", and the Frame Buffer is placed to avoid conflicts with the RTOS (ThreadX) heap.The Mystery: W
Hello,I want to know the DAC output buffer maximum safe output current before damaging the output buffer. I know that it's not possible to get the output swing mentioned in the datasheet under this condition.The datasheet maximum ratings doesn't state it for the DACs, and from the normal ratings only the current to keep the maximum output voltage around VREF+ can be calculated. So, either I wasn't able to locate the information in the datasheet (which is hopefully the case) or it isn't mentioned there at all.I'm using a STM32U083 device, datasheet https://www.st.com/resource/en/datasheet/stm32u083kc.pdfRegards
I created the project in TouchGFX 4.26.0 Designer, modified pins with CubeMX_17, and attempted to debug the project in STM32CubeIDE 2.1.1. The example I used was Flex Button Example.Kit is STM32U5G9J-DK2.When I attempt to set up a debug configuration in CubeIDE, I am unable to select a project. This project compiles and works when I flash it to my kit through TouchGFX. Could there something wrong with my project structure? Thank you.
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.