Join conversations with your peers and ST experts. Explore the full potential of STM32 microcontrollers for your embedded design.
Most recent activity
I'm working on a device that requires requires 12 audio output channels and 10 input channels. I wish to do this over 16-slot TDM. Now, I'm concerned about whether this can be done with 32 bits per sample. The reference manual states in section 54.4.6 Frame synchronization "The audio frame length can be configured to up to 256 bit clock cycles". 256/16=16. Does this mean I can only do 16-bit audio with 16-slot TDM? Or did I misread.
I've STM32G474 using the HRTIMER to control a boost converter, each channel has it's own converter. This all works nicely with the deadtime, no issues. When I come to do a pulse skip, (set CMP3 to 0) the deadtime is still being inserted in the the Tx2 output even though Tx1 output is not being pulsed! Is this normal or have I missed something? I've tried a few things to not make the deadtime happen, like disabling the set and reset sources... the only thing that fixes the problem is to also set the falling deadtime to 0 and then subsequently resetting it back to the required value. Tx2 has no set or reset sources configured.
Hi,I would like to know where I can find the SPI controller version of the STM32G491.AN5543 lists features depending on the SPI controller version and says "To identify the version and the available feature set refer to the product reference manual and datasheet". However, I was not able to find this info in the RM or datasheet of the STM32G491 or anywhere else.
Hi, I'm a beginner programming a NUCLEO-N657X0-Q. The LD5 is blinking and I can't get a connection to the board. Even with the demonstration code/project, it wouldn't work. In STM32CubeIDE I get the attached error message. As of yet, I never got to launch any program at all. Thank you for your help! Len
Hello, I am using a NUCLEO-H7A3ZI-Q to send and receive packets over serial. I have a varying payload size, so I am using: HAL_UARTEx_ReceiveToIdle_DMA(&huart3, rx_buffer, 4096); as this searches for an idle at the end of the frame to begin processing this data. To process this data and copy it into a look up table (LUT) capable of being 0-4096 bytes long I have this following script; which comprises two uint8_t into one uint16_t to be represented by a 12-bit DAC, hence the clipping if they exceed 0FFF (4095).This receives and writes perfectly up to 512 bytes of memory (256 uint16_t within the LUT), however above this all remaining values in the LUT are left unpopulated. uint16_t length = 0; void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size){ if (lut != NULL) { HAL_DAC_Stop_DMA(&hdac1, DAC_CHANNEL_1); free (lut); lut = NULL; } if(rx_buffer[0] == 0XAA) { length = rx_buffer[2] | (rx_buffer[1] <<8); frame_rate = rx_buffer[3
Hello, I am having a issue with HAL_UARTEx_ReceiveToIdle_DMA on a NUCLEO-H7A3ZI-Q, when using the following code:uint8_t rx_buffer [4096]; HAL_UARTEx_ReceiveToIdle_DMA(&huart3, rx_buffer, sizeof(rx_buffer)); void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size){ /*code*/ } My rx_buffer is only populating the first 512 bytes, with the remaining data remaining as 0.__HAL_DMA_GET_COUNTER(huart3.hdmarx);Provides the incorrect amount of data being passed over serial.I have used serial plotter and CoolTerm to try and send packets but both hit this 512 byte limit.rx_buffer not populated past 512 byteslength correctly calculated as 640 bytes long
Hello,I’m trying to add the JPEG encoder to be able to save images in JPEG format to the SD card.While debugging with LEDs, I noticed that MX_JPEG_Init blocks the program, whereas HPDMA is working correctly.I have added all the necessary files for JPEG, but it doesn’t seem to activate.Interestingly, when I disable MX_JPEG_Init, I can see the images on the screen connected to the board without any issue.I’m wondering if there is a configuration problem with the JPEG or if I’m missing something.For reference, I’m using the STM32N6 Discovery Kit (STM32N6DK750).Thanks for any advice!
I have developed a custom board for STM32F469NIH6 and is loosely based on STM32F469i-DISCO, it uses an external QSPI Flash memory type MT25QL128A as does the DISCO board. For this setup I am using ST supplied external loader MT25QL128A_STM32F469I-DK.stldr which works fine.We have a requirement for a processor with a video codec, so the logical upgrade route is to STM32F769NIH6 to be used with external QSPI flash MT25QL512A. Both of these devices are pin compatible with the above MCU and QSPI, so the plan is to use the same custom PCB.The problem comes in writing an external loader for this combination because.While ST have a loader MT25QL512A_STM32769I-EVAL.stldr, this loader is not working in our setup, probably because of alternative QSPI I/O configuration which would likely be easy to alter in the loader code, however the source code is not in the github repository https://github.com/STMicroelectronics/stm32-external-loaderIs it available elsewhere?UM0892 says that the ST loade
Split from Benchmark Validation in App does not match Arduino Uno R4 WiFi as this is a new question.thanks for the response @Andrew Neil If i'm not overstepping my bounds, given the requirements of an audio classifier (also need wifi support and display support), which ST board would you suggest. This is simply for prototyping purposes. Thank you in advance.Danny
Hello,I'm currently working on a project using the STM32U5A5VJT6 processor, and I'm exploring the feasibility of implementing WireGuard in a bare-metal environment. I found one mention of WireGuard in this community post [link], however afaik it is an application for an OS based ST product. So I'm looking for more detailed insights.Is STM actively working on any initiatives to bring WireGuard support to processors like the STM32U5A5VJT6, especially for bare-metal implementations?The WireGuard protocol was primarily designed for OS-based systems with kernel support, which makes bare-metal implementation exceptionally challenging. Given the cryptographic and networking demands, has anyone made significant progress or come across alternative approaches that could support WireGuard (or similar VPN functionality) on an STM32?I encountered Mongoose’s library for networking on STM32, which offers some guidance on web server setups. Are there other resources or community-driven efforts that ad
I am using the STM32N6570-DK and I want to use the external PSRAM to declare a large variable buffer. Here is what I have done: 1. Initialized XSPI1 and the External Memory Manager. The PSRAM parameters I got from How to execute code from the external PSRAM using the STM32N6 . 2. Set the XSPI1 clock to 200MHz. Here is my system clock configuration: Here is my main code from the FSBL. I also added a `gpio_toggle` to turn the user LED on before `MX_EXTMEM_MANAGER_Init()` as a debug indicator.After adding the header and programming, the FSBL boots correctly — the user LED turns on — but then it gets stuck at `MX_EXTMEM_MANAGER_Init()` and never jumps into the `while` loop.int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MPU Configuration--------------------------------------------------------*/ MPU_Config(); /* Enable the CPU Cache */ /* Enable I-Cache---------------------------------------------------------*/ SCB_EnableIC
Hello ST Community,I am working on a commercial vending machine controller and would like to get feedback from ST engineers and experienced STM32 designers regarding a system architecture change.Problem StatementOur current system uses a single MCU, but we are now hitting hard peripheral limits, mainly:Timer availability (stepper + DC motor control)GPIO interrupt countGPIO pin availabilityIncreasing real-time jitter when multiple loads are activeThis is not a software optimization issue anymore; it is a resource saturation issue.Because of this, we are planning to move from a single-MCU architecture to a multi-MCU system.Proposed ArchitectureMaster MCU: STM32H563ZIT6Handles:All sensors (ADC / digital)Control logic & state machineRecipe executionSafety checksUI communicationNo direct motor timing generationSlave MCUs (2x):Dedicated load-handling controllersOne for stepper motorsOne for DC motors / PWM-based loadsSlaves perform only deterministic actuationNo sensors, no business logi
Hi I'm new to the STM32 board but not to Arduino IDE. I want to use two STM32 boards (with DXV lr30 900) for LoRa communication. I'm starting with a minimal program (without LoRa), just to see how the communication works between the STM32 and the Arduino IDE's serial interface. I can compile and download this program without any problems, but I don't see anything on the serial interface, whether using the ttyUSB0, ttyUSB1, or ttyS0 ports at 9600 baud. here is the test program void setup() { Serial.begin(9600); delay(2000); Serial.print("hello"); } void loop() { Serial.print("."); delay(1000); } Can anyone help me ? Thanks in advance
Hi,I am trying to get any communication with the source through VDM messages on my STM32G071RB + SNK1M1 setup and I am not able to. The source sends a request "VENDOR_DEFINED VDM:SVDM_DISCOVER_IDENTITY INIT" but PE on the sink responds with PE_SEND_NOTSUPPORTED. Power delivery works fine and manages to negotiate different power options.The code is generated with CubeMX following this step-by-step guide: https://wiki.st.com/stm32mcu/wiki/STM32StepByStep:Getting_started_with_USB-Power_Delivery_Sink I followed the manual (https://www.st.com/resource/en/user_manual/dm00598101-managing-usb-power-delivery-systems-with-stm32-microcontrollers-stmicroelectronics.pdf) chapter 4.5 and enabled these VDM features.To implement the VDM callbacks and some DPM callbacks I used this repo: https://github.com/STMicroelectronics/STM32CubeG0/blob/master/Projects/STM32G0C1E-EV/Demonstrations/Modules/ucpd/I am aware that there isn't sufficient hardware support for alternate modes on my current hardware but sh
I want to make a speedometer with a STM32 MCU. What is the best solution. Do stm32 have any products wich works as a plug and play speedometer.
Hello Engineers,I have recently started developing a product based on the STM32F446RET6 MCU integrated with the RFM95W (SX1276) LoRa module. My goal is to transmit sensor data to a LoRaWAN network server such as TTN or ChirpStack.I am using STM32CubeIDE for firmware development. However, I have not been able to find clear documentation or structured examples explaining how to implement LoRaWAN (end-device) communication using this MCU and radio combination.What I am Looking For:A stable and recommended LoRaWAN library compatible with STM32CubeIDEGuidance on integrating the SX1276 (RFM95W) with STM32 HAL driversA basic bare-minimum example that sends dummy payload data to a LoRaWAN server (preferably OTAA)Any reference projects, repositories, or step-by-step guidanceTarget Setup:MCU: STM32F446RET6Radio: RFM95W (SX1276)IDE: STM32CubeIDELoRaWAN Server: TTN / ChirpStackRegion: (EU868 / IN865 — depending on deployment)Even a minimal working example that performs:Radio initializationLoRaWAN
Hi,I’m experiencing issues configuring a display using a custom PCB with the STM32H747BIT MCU and LVGL for the UI. Currently, the project runs a minimal setup with only one loop calling lv_timer_handler();. At this point, my main goal is to get the screen working correctly.I’m using LVGL in direct mode for the display buffers.The issue I’m facing is that the screen occasionally shows horizontal glitches. I’ve created a simple spinner using the following code: /* Create a spinner */ lv_obj_t * spinner = lv_spinner_create(lv_screen_active()); lv_obj_set_size(spinner, 64, 64); lv_obj_align(spinner, LV_ALIGN_BOTTOM_MID, 0, 0);You can see the glitch in the attached video.As you can see, the glitching is more noticeable in Video_1 than in Video_2. These are the display timing configurations used for each:Video_1:Video_2: Please note that the configuration in Video_1 follows the manufacturer’s recommended settings. In Video_2, I performed some tests and observed that increasing either
Hi, Does anyone know the default voltage level of an LPUART output as I am trying to interface with a device with a UART logic level of 1.8V so might need a level converter? Couldn't see anything about LPUART voltage on the datasheet?
Hi all,I’m using STM32H755 on a Nucleo board with FreeRTOS, the socket-API and CubeMX-generated LWIP. Sending a UDP packet immediately after network init works fine, but if I wait ~10 seconds before calling sendto(), it returns successfully, DMA descriptors OWN=0, ETH IRQs are triggered, yet no packet reaches the wire. Calling sys_check_timeouts() before sendto() does not help. The tcpip_thread has high priority, while the sender task runs at IDLE priority. In my tests, I disabled the Cache.It seems the issue is not PHY or DMA. It seems that sendto() copies data to the LWIP buffer, but the tcpip_thread does not process it after a long idle. How can UDP packets be reliably sent after idle without changing the network stack or manually triggering anything?Thanks for any insights!
I have a problem with disabling gfxmmu. I don't have a rounded display so that actually I do not need GFXMMU.I created a project by using Touchgfx Designer Templates (STM32H7S78 DK BPP). GFXMMU is activated in default. I would like to disable it. So, I disable it in cubemx then exclude instrumantation files. Then I updated TouchgfxHal.cpp and frame buffer adresses as 0x9000 0000 - 0x9020 0000.Then I could succesfully build the project. When I run it, it is working particularly but the frame/image is broken down. I am adding the image here!Could you explain me how to enable or disable gfxmmu properly from project?
Hello, I read somewhere that I can use the ST-LINK built into my H563ZI to program my custom cards with STM32F401.Could someone help me figure out how to do this?Thanks in advance.
Hi,I have setup three channels in Timer_2 on an 32F429 MCU and have come across a seemingly inconsistent behaviour with regards to the alternate functions mentioned on the datasheet.More specifically, I have setup pins PA0, PA1, PA2 for Output_Compare, Input_Capture and PWM against channels 1, 2 and 3 of Timer_2 respectively and although the behaviour I observe on pins PA0 and PA1 is the expected one (well nearly the expected one but will ask a new question a bit later as that's probably a separate issue), pin PA2 is entirely dead as I don't get any pulsation happening whatsoever.I checked my configuration again and again in order to make sure it's setup correctly and verified the alternate functions I've setup for the gpio pins match the datasheet but that all looked fine:I then scrolled a bit further down on the datasheet and noticed that there's an alternative alternate-function pin for Timer_2 channel 3, namely PB10:So, I tried configuring that for the PWM pin and voila, it al
Hi, I'm following the "Programming guidelines for IEEE 1588 timestamping" from page 2792 of the RM0481. I've been working on this specifically for quite a while and I cannot even get the timestamp nanosecond or second registers to move. It feels to me like a clock issue, but unless I'm mistaken, the PTP clock (clk_ptp_ref_i from the manual(p.456)) is the same as the ETH clock (PLL1Q), which I've verified is running because I'm successfully using NetXDuo to negotiate DHCP and send/receive UDP packets successfully. I've also tried initializing the PTP Timestamp without NetXDuo just in case there was some conflict there, but that was also unsuccessful. Here is my initialization code: /*1. Mask the Timestamp Trigger interrupt by clearing bit 12 of Interrupt enable register(ETH_MACIER).*/ ETH->MACIER &= ~(ETH_MACIER_TSIE); PRINT_U32_BINARY(ETH->MACIER); // 2. Set bit 0 of Timestamp control Register (ETH_MACTSCR) to enable // timestamping. ETH->MACTSCR |= ETH_MACT
Hello everyone, I'm facing a very frustrating issue with USART2 on my Nucleo-L475VGT6 board using the built-in ST-LINK Virtual COM Port. What works: - ST-LINK is detected (COM3 appears, Windows sound plays on connect) - Code downloads successfully (no error in CubeIDE console) - LED blinks (proof that main() is reached and while(1) is running) - HAL_UART_Transmit is called What does NOT work: - Nothing appears in any terminal: MobaXterm, PuTTY, PowerShell serial reader - No garbage, no partial characters, just black screen - Same behavior in Run mode (no breakpoint) and after physical Reset button MY code: /* USER CODE BEGIN 0 */ uint8_t tx_buff[]={0,1,2,3,4,5,6,7,8,9}; /* USER CODE END 0 */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_UART_Transmit(&huart2, tx_buff, 10, 1000); HAL_Delay(10000); } What am I missing? Is there a jumper / solder bridge I forgot on Nucleo-L475VGT6 for VCP? Or is there a known bug with USART2 VCP on L4 series? Tha
/* * ledfunc.c * * Created on: Jan 16, 2026 * Author: roman */ #include "main.h" #include <string.h> #include <stdio.h> #include "ledfunc.h" uint8_t flag = 0; uint8_t blue_but_click_number = 0; char pressedKey='\0'; char readChar='\0'; //UART_HandleTypeDef huart2; void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { flag = !flag; char main_str[50] = "Button clicked: "; char num_str[45]; // Buffer to hold the string representation of the integer // Convert the integer to a string snprintf(num_str, sizeof(num_str), "%d times\r\n", ++blue_but_click_number); // Concatenate the new string to the main string // You must ensure main_str has enough allocated space for both parts strncat(main_str, num_str, sizeof(main_str) - strlen(main_str) - 1); HAL_UART_Transmit(&huart2, (uint8_t*)main_str, strlen(main_str), HAL_MAX_DELAY); char msg[20]; sprintf(msg, "PRESSED: %c\r\n", pressedKey); // Formats string + char HAL_UART_Transmit(&huart2, (uint8_t*)msg, str
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.