I’m having an issue with the simple implementation of FreeRTOS TCP Plus on stm32h735. After successfully building and debugging through numerous errors, following the documentation, I’m unable to execute a “ping.”
My code gets stuck in the NetworkInterface.c file, precisely at this point:
ulTaskNotifyTake( pdFALSE, ulMaxBlockTime );
When sending a PING, I receive a negative response. My pins are correctly configured (I know this because I implemented LwIP). I have a small blink application where I can see that FreeRTOS is working, and I can print to the screen with Linux, but I’ve been struggling with this issue for a week, and I can’t seem to resolve it.
Assuming that you are using the STM32Hxx network interface and you are not able to ping your device from another device (which may be your PC), can you put breakpoints at the following places -
I’m back seeking guidance. I want to mention that I’ve configured this project without using the IDE, by manually setting up the necessary ETH pins for its operation.
I’ve followed the documentation on the page, but I’m unable to get the ping working.
-I’ve used a configuration for printing with the terminal.
My program is stuck in a loop in the FreeRTOS_IP.c file:
c
static void prvProcessIPEventsAndTimers( void )
{
(...)
switch( xReceivedEvent.eEventType )
{
case eNetworkDownEvent:
/* Attempt to establish a connection. */
prvProcessNetworkDownEvent( ( ( NetworkInterface_t * ) xReceivedEvent.pvData ) );
break;
I have uploaded the repository to GitHub:
I’m a newbie in FreeRTOS, and I greatly appreciate any kind of assistance.
I’d also recommend to generate one project using IDE and get that working first as that should be faster. Once you have that working, you can compare your manually configured one for the differences and figure out if you missed something.
Are you using the STM32Cube to generate the code? If so,HAL_MspInit is a function that is generated and should be building for you right after the code generation itself.
Per this comment from @HispaEmo , it does not seem to be the case. As I have mentioned before, I’d suggest again to get a project working using CubeMX so that you have something working to compare against.
Sorry if I explained myself poorly. I always build projects starting from the IDE, and then I add the FreeRTOS Kernel and FreeRTOS TCP Plus, their folders to the project. This implies some duplications, especially in the eth files.
Anyway, I appreciate your advice because I’m starting from scratch with this project, and it’s often overwhelming dealing with the numerous issues that come up.
After trying for about a week to implement TCP Plus and attempting a ping without success, I downloaded this project and changed the pins, respecting those of my H735 board.
The ping works successfully, and I appreciate your response. However, how can I understand its operation?
My project is behind schedule, and I need to progress faster. Any suggestions?
My next goal is to implement coreHTTP and make a request to a webpage. I welcome any advice, guides, repositories, or anything that can help me achieve this.
The ping works successfully, and I appreciate your response. However, how can I understand its operation?
I believe the main difference between the project that I shared and the one you are using is that the one I shared makes use of the ethernet drivers provided in the +TCP network interface for STM32H devices, and yours might be using the one thats generated for you by the STM32Cube IDE. And you should also follow the instructions suggested in the readme.md file of the STM32Hxx driver folder as not all RAM locations are accessible to the Ethernet MAC in the STM32Hxx devices.
Note that the +TCP version used in the shared example might not be the latest.
My next goal is to implement coreHTTP and make a request to a webpage. I welcome any advice, guides, repositories, or anything that can help me achieve this.
You can refer to the coreHTTP demos listed in this repo to get started with including coreHTTP in your project.
It may be the case that the duplicate sections are initialized RAM variables, with the “dupes” in flash being the source which is copied to RAM at startup. What is the code running in you reset interrupt handler? Is there a copy loop at the very beginning?
As you can see, the .bss section is too heavy, and I’m trying to allocate it in another memory space. Is this possible? I’ve researched enabling HyperRAM, but I can’t get the application to work with .bss hosted in OCTOSPI2.