Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
MCU: STM32H753XIH Tool: STM32CubeIDE v1.18.1 FW Pkg: FW_H7_V1.12.1 I have an in-house designed board that has an FPGA connected to the FMC bus. The FPGA uses a simple SRAM interface with Address (7:0), Data (31:0), Chip Select, Read and Write signals. The FPGA has 8 internal 32 bit registers with an address decoder and provides the 8 internal chip selects for these registers from the address bus. I hard Fault every time I attempt to access the FPGA registers. FMC Setup: hsram1.Instance = FMC_NORSRAM_DEVICE; hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE; /* hsram1.Init */ hsram1.Init.NSBank = FMC_NORSRAM_BANK1; hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE; hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM; hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_32; hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE; hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
Hello,I download an example GUI from Touchgfx designer, generate code and run on my STM32H735G-DK board, it works well.Then I open the .ioc of this project and generated code with EWARM, open it and build, it has no errors.When I download it to board, the progress seems stuck and report error several minutes later. Here is the debug log,Touchgfx version: 4.25.0IAR version: 9.40.1
I have recently ordered my custom board from JLCPCB with STM32F070F6P6. When the board arrived to me, I tried to connect the CPU to ST-LINK V2, but it would not connect. I have checked all the connections on the board and everything seems to be good. I have also checked the voltage with an oscilloscope, and again it seems to be good - the voltage is stable 3.3V. I have completely no idea why it can not connect to ST-LINK. I am attaching below the picture of the schematic of my board. I am connecting SWDIO (PA13) and SWCLK (PA14) via J2 01 and 02 pins. The power comes from ST-LINK (3.3V from the voltage regulator). I tried with and without RESET and nothing changed. Am I doing something wrong?
Hello together, i have an application running with TZEN, unfortunately the readings of the internal temperature sensor calibration values are always zero.Is there a secure address where the values are stored ?Or any chance to get the values out in TZEN mode ?As @Jocelyn RICARD knows i had to enable the trust zone to do the embeddeed provisioning Kind regardsMartin
I had made a post about fixing OTM8009A video mode printing an extra frame on screen that I had solved with adjusting porch values even more for the horizontal, you can find the information within this post here:Video mode printing another frame on screen - STMicroelectronics CommunityFor this situation I don't think changing porch values are enough to solve this. I have the ST7701 LCD controller running TouchGFX in video mode on STM32F469I-DISCO, the testing screen in TouchGFX Designer is being printing twice vertically across the horizontal screen rather than printing across the screen horizontally, when I have the OTM8009A screen connected the image is printing in the correct direction and shows the testing screen from TouchGFX Designer, I don't have an image of the OTM8009A screen working correctly but in the post above will show the same testing screen working on the OTM8009A but with the frame printing again, the post has a reply by myself saying I solved the issue by raisin
Any step-by-step guide on how to configure STM32CubeIDE to redirect `printf()` output to a virtual COM port using UART (serial communication), and then monitor that output using the STM32CubeIDE’s built-in Terminal view? I'm using a Nucleo-F411Re on Windows 10 machine.
Hi Mike, Thanks again for your previous support on the SPI interface.I have since moved to using the SDMMC interface instead of SPI for better performance, but I am still facing issues. Current Issue Summary:I can successfully mount the 32GB SDHC FAT32 card and read the capacity using FatFs. However, f_write always fails. After debugging, I found that BSP_SD_WriteBlocks fails when writing to LBA 32768. I also verified this with direct HAL_SD_WriteBlocks, which fails at LBA 32768 but works on lower LBAs like 0 or 1. This suggests the problem is not in FatFs logic, but rather in high LBA (large address) block access stability. My Questions:Is this a known limitation with STM32H7 SDMMC or HAL drivers when writing to higher LBA regions on large-capacity SD cards (like 32GB)? What is the commonly tested and verified capacity for STM32H7 SDMMC + FatFs reference designs? Do most STM32 applications use 4GB / 8GB / 16GB cards, or is 32GB commonly used and verified? Any additiona
I am measuring the phase current signal, in between i see sudden spikes and the motor halts. I am testing at 60V battery input. It is hall based system and FOC. It is a custom board and i have not configured the motor pilot, 2 questions if you can answer it will be helpfula. If i am reading the phase currents at the middle of the low side pwm then it shall be consistently reading the same value but why suddenly it reads invalid value i do not understand i mean the spike.b. If it is low inductance value should i mandatorily switch at 20KHz at present i am doing at 15KHz. What best i can do to identify the root cause.Please advise based on the inputs i can move forward.
Context: I am trying to read the Chip ID from a BMP280 sensor using SPI communication with an STM32 microcontroller. The expected Chip ID value is 0x58. However, I am encountering inconsistent results when calling the function to read the Chip ID multiple times. BMP280_Read_CHIP_ID(); BMP280_Read_CHIP_ID(); Problem: When I call the BMP280_Read_CHIP_ID function twice consecutively, I get the following outputs:Chip ID Read - 0Chip ID Read - 58UART Output.The first read returns 0x00 (unexpected), while the second read returns the correct Chip ID 0x58.Code:Here is the function I am using to read the Chip ID: void BMP280_Read_CHIP_ID() { uint8_t data = 0; uint8_t address = 0xD0; address |= 0x80; CS_Enable(); delay_ms(2); SPI_Transmit(&address, 1); delay_ms(2); SPI_Receive(&data, 1); delay_ms(2); CS_Disable(); printf("Chip ID Read - %x\n\r", data); } SPI_Transmit Function: void SPI_Transmit (uint8_t *data, int size) { int i=0; while (
Hello everyoneI am a begineer with stm32 MCUs. I studied through youtube videos and datasheets that we can program STM32H750 using STlink V3 and to do so the MCU should be put into bootloader first. To do so the boot pin must be pulled low for which dev boards have a button that we can press at power up or reset.I don't want to use the button in my custom hardware design. I want the boot pin to be pulled low by the programmer (ST link v3) or atleast be piulled low automatically. I want to use tag connectors to programe my boards.How can I automatically put STM32H750 into flash mode (boot pin pulled down) when STlink is connected.Thanks for your help.
Hello,I'm a developper from the CEA using STM32H573 and I am characterizing the chip boot time in various configurations. With STiRot activated (250 MHz and a 128 Kb image) I found 31 ms which is twice as much as the boot time indicated in the documentation (16 ms ; AN6007 - Table 5. Boot time performance).I would like to know how the STiRoT boot time values from the documentation were obtained, to see if I am missing something here.Thank you in advance,Best regards
Hi all,I am new to development with STM32, and I want to connect an external RFID card reader to my STM32WL5MOC, which is on the B-WL5M-SUBG1 board. I tried looking for tutorials on how to do this but nothing useful came up.The user manual (UM3127, https://www.st.com/resource/en/user_manual/um3127-stm32wl5moc-connectivity-expansion-board-stmicroelectronics.pdf), in Section 7.6, outlines which solder bridges should be ON/OFF to configure the board between SPI and UART. Upon inspecting the solder bridges on my board (default configuration), I noticed that it is configured for SPI.My understanding is that even if I connect my RFID card reader to the correct pins of the board, I still will not be able to establish a UART connection because there is physically not an electrical connection. Is this correct?Should I un-solder the solder bridges that are configured for SPI and solder them in the right place for UART? Is there any other way to do it without altering the electrical connection of
Hello World;My Setup:Nucleo F767ZI BoardBOOT0 pulled highSCL/SDA on PB6/PB9 connected to Raspberry Pi I2C-1 and Saleae Logic Pro 8Nucleo board powered via USB from Raspberry PiGoal: Using ROM Bootloader over I2C for firmware updates (later on custom hardware)Problem: I2C hangs after issuing Mass Erase command Send: 0x45 0xBA Erase-NS CommandReceive: 0x79 ACKSend 0xff 0xff 0x00 Special EraseReceive for ACK or NAK hangs while sending the I2C device address.AN4221 says "Some products do not support the mass erase feature." Does STM32F767 support mass erase?
Hi ST Community,I’m working on a JPEG encoding pipeline using the STM32N6570 Discovery Kit, and I’m running into an issue when storing both my input and output buffers in PSRAM.Setup:Both JPEG Encoder input (RGB_ImageAddress) and output (jpgBuffer) buffers are placed in PSRAM.I’m using RGB888 input format, the same as in the official JPEG example here: JPEG_EncodingFromOSPI_DMA Linker script (.ld) snippet:MEMORY{ AXISRAM1_S (xrw) : ORIGIN = 0x34000400, LENGTH = 1023K PSRAM (xrw) : ORIGIN = 0x91000000, LENGTH = 16M}.psram_section (NOLOAD):{ . = ALIGN(32); *(.psram_bss) . = ALIGN(32);} >PSRAM Buffer declarations:__attribute__((section(".psram_bss")))__attribute__((aligned(32)))uint32_t jpgBuffer[160 * 160]; __attribute__((section(".psram_bss")))__attribute__((aligned(32)))uint32_t RGB_ImageAddress = {0}; // RGB888 image Problem:After running HAL_JPEG_Encode_D
So I'm trying to configure communication with the MPU6050 from the STM32 Black Pill module using the driver from anasvag575, I reconfigured the driver to LL library because the driver used the standard library and I don't want it to become a mess later.The problem I'm facing now is that it seems like the thing stopped working when it after calling LL_I2C_TransmitData8 and it just stuck waiting for the ADDR bit to be set but that never happened. The logic shows that it generated the start correctly but the address is very inconsistent when I test it by resetting it Sometimes it generated the correct address, sometimes SCL goes high at the same time as SDA. I've tried changing the I2C speed configuration but sometimes it makes worse where SCL can't even transfer a bit.I've tried different libraries but obviously none of them really worked, some got stuck waiting for the start bit flag instead. static inline void i2c_write_data(I2C_TypeDef *i2c_handle, uint8_t address, uin
HAL code for interrupt-driven SPI transmit attempts to fill a transmit queue, which uses up the 10 bytes I am transmitting. But, a TX interrupt is also triggered which grabs an extra byte past the end of the buffer and decrements the count which wraps. There is code to turn off TX interrupts in the handler, but it checks after transmitting a byte rather than before. Has anyone else noticed this?
I have set up an I2S interface. The idea is to send it an initial HAL_I2S_Transmit_IT() request.In the ISR of SPI2 I'm sending the next HAL_I2S_Transmit_IT() and this way the transmit should be continously kept running.What happens is, that the SPI ISR is entered once. The HAL_I2S_Transmit_IT() issued within the ISR, doesn't fire the subsequent IR. Why?
Hello,I’m working on a custom board based on the STM32H753IITx and I'm trying to access a microSD card via USB_OTG_HS using the USB Mass Storage Class (MSC). I've read this post, which is close to my use case, but unfortunately, I haven’t been able to solve my issue.Here is a summary of my configuration in STM32CubeMX:SDMMC1 (SD card interface):Mode: SD 4-bit wide busClock transition: Rising edgeClock output when idle: Enabled (Power save disabled)Hardware flow control: DisabledClock divide factor: 1 (which results in 200 MHz / (2 × 1) = 100 MHz SDMMC_CK)External transceiver: Not presentAll GPIOs maximum output speed to Very HighAll GPIOs except SDMMC1_CK have pull-upUSB_OTG_HS (Mass Storage Device):PHY: External PHY (ULPI), Device_OnlySpeed: High Speed (480 Mbit/s)IP DMA: DisabledPower management features: All disabledVBUS sensing: DisabledUSB Class: Mass Storage ClassMSC_MEDIA_PACKET size: 512 bytesUSBD_SELF_POWERED: EnabledLPM (Link Power Management): EnabledAll GPIOs maximum output
The SVGImage widget is a great tool but, as I understand it can only use SVG images from the SVGdatabase.I may imagine to subclass the SVGImage class and handle directly run time created lists of VGObject as it is done with the SVGdatabase.What is missing is to have the imageconverter tool code to run on the embedded platform. I mean the code that convert XML SVG text files to the VGShape , commands and points like those found in SVGDatabase.cpp.Could this code part be disclosed or a new function like 'dynamicSVGCreate( )' be added to the lib.This function could return a VGObject being given a text string with the SVG content ?Or do someone have an other solution to dynamically decode SVG XML text to bitmap ?BRPierre
Moved from Feedback forum - the Feedback forum is not for product questions. Hello, I have a problem with using TouchGfx, if I create a project with an STM32F429 without adding any code the compilation is ok, if I activate TouchGFX (Graphic application checked) I have compilation errors (see attachment) I don't know how to do it, I would like to start with TouchGFX with this project Best regards Sébastien
Hi,is there any ST Bluetooth BLE module that can stream audio (preferably high quality) and that can be fully operated just by using commands (like AT or other/proprietary commands)?Ideally for it to have a analog output pin/signal we can connect to a low power amplifier, but it can also be an I2C or other.Thank youRick
Hello,Using RS485 for modbus communication.It is observed that, if we disable STOP2 mode then RS485 communication works fine (no frame loss). but asa we keep STOP2 mode then at the time of wakeup I found some frame loss.#define RS485_TX_ENABLE() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET) #define RS485_RX_ENABLE() HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET) static void MX_LPUART1_UART_Init(void) { hlpuart1.Instance = LPUART1; hlpuart1.Init.BaudRate = 115200; hlpuart1.Init.WordLength = UART_WORDLENGTH_8B; hlpuart1.Init.StopBits = UART_STOPBITS_1; hlpuart1.Init.Parity = UART_PARITY_NONE; hlpuart1.Init.Mode = UART_MODE_TX_RX; hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_RS485Ex_Init(&hlpuart1, UART_DE_POLARITY_HIGH, 0, 0) != HAL_OK) { Error_Handler(); } if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOL
Hi,I would like to use LPUART3 to proceed the UART communication with hardware control flow enable.However, I found that when the Send_UART_DATA there indeed has TX signal from LA, but CTS/RTS hasn't changed, only when system reset, those two pins just could get the status changed.Here is the configuration of MX_LPUART3_UART_Init()static void MX_LPUART3_UART_Init(void) { /* USER CODE BEGIN LPUART3_Init 0 */ // Enable LPUART3 clock __HAL_RCC_LPUART3_CLK_ENABLE(); //Enable GPIOB clock __HAL_RCC_GPIOB_CLK_ENABLE(); /* USER CODE END LPUART3_Init 0 */ /* USER CODE BEGIN LPUART3_Init 1 */ // Enable NVIC interrupt for LPUART3 HAL_NVIC_SetPriority(LPUART3_IRQn, 0, 0); HAL_NVIC_EnableIRQ(LPUART3_IRQn); GPIO_InitTypeDef GPIO_InitStruct = {0}; /*Configure LPUART pins : UART communication */ // RTS/CTS pins GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_
Hello everyone,I'm currently working on a UART communication protocol using STM32 USART in multiprocessor mode (MME / Address Mark) over RS485. My goal is to receive variable-length data frames only when the address matches, and use DMA + IDLE interrupt to detect the end of each frame.:wrench:Frame format:- First byte: 9-bit address word (MSB = 1)- Followed by N data words (9-bit, MSB = 0):white_heavy_check_mark:Setup:- USART configured in 9-bit data mode (no parity)- MME (multiprocessor mode) enabled- Address match set via ADD[7:0]- DMA reception via `HAL_UARTEx_ReceiveToIdle_DMA(...)`- `__HAL_UART_ENABLE_IT(&huart, UART_IT_IDLE)` enabled- IDLE handling expected in `HAL_UARTEx_RxEventCallback()`:cross_mark:Issue:- When MME is **disabled**, IDLE interrupt works correctly, and the RxEventCallback is triggered on frame end.- When MME is **enabled**, the USART correctly detects the address and wakes up from mute mode, and DMA begins receiving data.- But **IDLE interrupt never triggers
I am verifying USB implementation using Nucleo-H7S3L8.When I executed CDC_Standalone in STM32CubeH7RS using the Debug button and ran the Appli code, the function “HAL_PWREx_EnableUSBVoltageDetector()” in ‘MX_USBPD_Init()’ did not return HAL_OK and an error occurred.Within this function, the “USB regulator ready flag (PWR_CSR2_USB33RDY)” is not set, causing a timeout and resulting in a HAL_ERROR.However, when I stop debugging, disconnect the USB cable, and reconnect it, the COM port appears in the Windows Device Manager.I have not made any changes to the contents of CDC_Standalone.The jumper on JP3 on the board has been changed from STLINK to UCPD.What should I do to properly debug USB on this board?
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.