FreeRTOS+TCP and FreeRTOS+FAT Examples
Running on an ST STM32F407 ARM Cortex-M4 microcontroller
IntroductionDon’t have any hardware? You can still try the RTOS TCP and FAT examples now by using the Win32 demo, which uses free tools, and runs in a Windows environment.
Note 1: In order to demonstrate FreeRTOS+TCP and FreeRTOS+FAT being used in a RAM constrained system the project described on this page only uses the STM32’s 192K bytes of internal RAM. The external RAM on the STM3240G-EVAL development board is not used.
Note 2: The demo presented on this page can be built using the free Lite version of Atollic’s TrueStudio IDE, as even the free version does not have a code size limit.
The ST STM32F407 ARM Cortex-M4 TCP/IP and FAT demo includes the following standard examples:
- HTTP web server
- FTP server
- TCP echo server
- TCP echo clients
- Command line interface using a UDP socket
- UDP logging; sending FreeRTOS+TCP log output to a UDP port
FreeRTOS+FAT is used to mount a FAT formatted SD card. The mounted file system then serves the files for both the HTTP and FTP server examples.
Locating the ProjectThe Atollic TrueStudio project that builds the demo described on this page is located in the /FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_and_FAT_STM32F4xxx directory of the FreeRTOS Labs download.
Software Setup #1: Setting a Static or Dynamic IP Address
Network address settings in FreeRTOSConfig.h
If a DHCP server is in use, then set ipconfigUSE_DHCP to 1 in FreeRTOSIPConfig.h, and no further IP related network address configuration is necessary. If a hostname is provided for the STM32 target then it is not necessary to know the IP address assigned to the STM32 by the DHCP server, because the STM32 can be located using the assigned name. The IP address can however be viewed, as it is printed out using the UDP logging facility.
If a DHCP server is not in use then set ipconfigUSE_DHCP to 0 in FreeRTOSIPConfig.h, and configure a static IP address and netmask using the configIP_ADDR0/3 and configNET_MASK0/3 constants located in FreeRTOSConfig.h. Note the IP address constants are in FreeRTOSConfig.h, rather than FreeRTOSIPConfig.h, because they are related to the application, and not the TCP/IP stack directly.
It is necessary to ensure any manually configured IP address is compatible with the netmask used by the network to which the STM32 is being connected. In most cases a compatible IP address will be one that uses the same first three octets as the host computer. For example, if the IP address of the host computer is 172.25.218.100, then any 172.25.218.nnn address, other than where nnn is 0, 255, or already present on the network, is valid.
It is also necessary to set a gateway address that is correct for the network to which the STM32 is being connected, or at least compatible with the configured netmask if no gateway exists. This step is necessary to prevent an internal sanity check triggering a configASSERT() failure due to a mismatched gateway address and netmask. The gateway address is set using the configGATEWAY_ADDR0/3 constants in FreeRTOSConfig.h.
Software Setup #2: Setting the MAC AddressIf only one embedded target that is running a FreeRTOS+TCP example is connected to the network then it will not be necessary to modify the MAC address.
If multiple embedded targets that are running FreeRTOS+TCP examples are connected to the same network then it will be necessary to ensure the MAC address assigned to each embedded target is unique.
The MAC address is set using the configMAC_ADDR0/5 constants in FreeRTOSConfig.h.
If only one embedded target that is running a FreeRTOS+TCP example is connected to the network then it will not be necessary to modify the default hostname, which is “RTOSDemo”. If multiple embedded targets that are running FreeRTOS+TCP examples are connected to the same network then it will be necessary to ensure the hostname assigned to each embedded target is unique.
The hostname is set by the mainHOST_NAME constant, which is located near the top of the main.c source file. Depending on the network topology, it may also be possible to use a second hostname set by the mainDEVICE_NICK_NAME constant, which is also defined at the top of main.c.
Software Setup #4: Setting the Echo Server AddressIf the TCP echo client example is used then set the constants configECHO_SERVER_ADDR0 to configECHO_SERVER_ADDR3 in FreeRTOSConfig.h to the IP address of a suitable echo server. FreeRTOS+TCP will then send echo requests to, and receive echo replies from, the configured echo server.
Logging configuration in FreeRTOSConfig.h
Log messages are buffered for transmission by a low priority background RTOS task.
Log output can be viewed in many different terminal programs, including UDPTerm, from Cinetix.
Software Setup #6: Hardware Specific SettingsThe project is delivered pre-configured to execute on an STM32F40G-EVAL evaluation board. To execute the demo on different hardware:
Update HAL_ETH_MspInit(), which is the ST HAL driver callback
function, to ensure it correctly configures the IO for your
hardware. HAL_ETH_MspInit() is implemented near the bottom of
Set the configSD_DETECT_GPIO_PORT and configSD_DETECT_PIN settings
in FreeRTOSConfig.h to the GPIO port and pin used to detect if
an SD card is present.
It may be necessary to update the network driver if a different
PHY is used.
Running ExamplesThe instructions below describe how to build, download, then execute the application on a STM3240G-EVAL evaluation board:
Follow the software configuration steps detailed above.
If available, insert a clean FAT formatted SD card into the
STM32F407G-EVAL SD card socket.
Inspect the comments at the top of main.c, and set the constants
that build individual examples into and out of the demo as
Note: If an SD card is not being used then do not include the HTTP or FTP server examples.
Ensure the STM3240G-EVAL hardware is connected to the host
computer (the computer running Atollic TrueStudio) using a suitable
debug connection (such as ST Link, or J-Link) and connected to
a network using an Ethernet cable.
Select “Import” from the TrueStudio IDE’s “File” menu. The dialogue box shown below
will appear. Select “Existing Projects into Workspace”.
The dialogue box that appears when “Import” is first clicked
In the next dialogue box, select /FreeRTOS-Plus/Demo/FreeRTOS_Plus_TCP_and_FAT_STM32F4xxx
as the root directory. Then, make sure the RTOSDemo
project is checked in the “Projects” area, and that the Copy Projects Into
Workspace box is not checked, before clicking
the Finish button (see the image below for the correct check box states,
the finish button is not visible in the image).
Make sure that RTOSDemo is checked, and “Copy projects into workspace” is not checked
Select “Build All” from the TrueStudio IDE’s “Project” menu to create
the executable image.
Select “Debug” from the TrueStudio IDE’s “Run” menu to create
a debug configuration, which can then be used to program the
STM32 flash memory and start a debug session.
Green LED 1 will toggle when the application is executing. The LED is toggled from the Idle task, so the toggle rate will not necessarily be constant.
Basic Connectivity TestIt is advised to test basic connectivity before experimenting with the examples linked below. This can be done by pinging the target. If ping replies are received, then the application is both running and connected to the network correctly.
To ping the device, open a command prompt and type “ping
If a ping reply is not received then turn DHCP off, assign the target a
static IP address, and try again using the assigned IP address in place of the host
Instructions describing how to set a static IP address, and how to set
a hostname, are provided in the setup instructions on this page.
Pinging the target, and receiving ping responses
The project includes the following examples:
If a ping reply is not received then turn DHCP off, assign the target a static IP address, and try again using the assigned IP address in place of the host name.
Instructions describing how to set a static IP address, and how to set a hostname, are provided in the setup instructions on this page.