{"id":4205,"date":"2026-02-01T05:47:59","date_gmt":"2026-02-01T05:47:59","guid":{"rendered":"https:\/\/blog.embeddedexpert.io\/?p=4205"},"modified":"2026-02-01T05:48:01","modified_gmt":"2026-02-01T05:48:01","slug":"stm32-and-mongoose-web-server-part-2-configuration-and-ping-test","status":"publish","type":"post","link":"https:\/\/blog.embeddedexpert.io\/?p=4205","title":{"rendered":"STM32 and Mongoose Web server Part 2: Configuration and Ping test\u00a0"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-1024x683.png\" alt=\"\" class=\"wp-image-4206\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-1024x683.png 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-300x200.png 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-768x512.png 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-1150x767.png 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-750x500.png 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-400x267.png 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM-250x167.png 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-Jan-17-2026-at-10_13_02-AM.png 1536w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>In this second part of the guide, we integrate the Mongoose source and header files into the STM32 project and walk through the required configuration steps for a successful build. We then bring up the Ethernet interface and verify basic network functionality by performing a ping test to confirm reliable connectivity.<\/p>\n\n\n\n<p>In this guide, we shall cover the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Configure Mongoose.<\/li>\n\n\n\n<li>Run ping test.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Configure Mongoose:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>First, create the following source and header files:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mongoose.c<\/li>\n\n\n\n<li>mongoose.h<\/li>\n\n\n\n<li>mongoose_config.h<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"727\" height=\"1024\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-727x1024.jpg\" alt=\"\" class=\"wp-image-4207\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-727x1024.jpg 727w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-213x300.jpg 213w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-768x1082.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-750x1056.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-400x563.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16-250x352.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-23-16.jpg 1038w\" sizes=\"(max-width: 727px) 100vw, 727px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, copy the content of mongoose.c file from <a href=\"https:\/\/github.com\/cesanta\/mongoose\/blob\/master\/mongoose.c\" data-type=\"link\" data-id=\"https:\/\/github.com\/cesanta\/mongoose\/blob\/master\/mongoose.c\">this github<\/a> repository to mongoose.c in STM32CubeIDE.<\/p>\n\n\n\n<p>Also, copy the content of mongoose.h file from <a href=\"https:\/\/github.com\/cesanta\/mongoose\/blob\/master\/mongoose.h\" data-type=\"link\" data-id=\"https:\/\/github.com\/cesanta\/mongoose\/blob\/master\/mongoose.h\">this github<\/a> repository to mongoose.h in STM32CubeIDE.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, we shall configure the mongoose_config.<\/p>\n\n\n\n<p>Within the header guard of mongoose_config header file, declare the following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">#pragma once\n#define MG_ARCH MG_ARCH_NEWLIB     \/\/ For all ARM GCC based environments\n#define MG_ENABLE_TCPIP 1          \/\/ Enables built-in TCP\/IP stack\n#define MG_ENABLE_CUSTOM_MILLIS 1  \/\/ We must implement mg_millis()\n#define MG_ENABLE_TCPIP_PRINT_DEBUG_STATS 1  \/\/ Enable debug stats log\n#define MG_ENABLE_CUSTOM_RANDOM 1\n#define MG_TCPIP_PHY_ADDR 0<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>#pragma once<\/code><\/strong><\/h3>\n\n\n\n<p>Prevents the header file from being included more than once during compilation, avoiding duplicate definitions and build errors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>MG_ARCH MG_ARCH_NEWLIB<\/code><\/strong><\/h3>\n\n\n\n<p>Selects the runtime environment used by Mongoose.<br><code>MG_ARCH_NEWLIB<\/code>&nbsp;targets ARM GCC toolchains that rely on the&nbsp;<em>newlib<\/em>&nbsp;C library, which is standard for STM32CubeIDE and bare-metal or RTOS-based projects.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>MG_ENABLE_TCPIP 1<\/code><\/strong><\/h3>\n\n\n\n<p>Enables Mongoose\u2019s internal TCP\/IP stack.<br>With this enabled, Mongoose implements IP, ARP, ICMP, TCP, and UDP internally instead of relying on an external stack such as lwIP\u2014useful for compact, self-contained Ethernet designs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>MG_ENABLE_CUSTOM_MILLIS 1<\/code><\/strong><\/h3>\n\n\n\n<p>Indicates that the application must provide the timing function:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">uint64_t mg_millis(void);\n<\/pre><\/div>\n\n\n\n<p>This supplies system uptime in milliseconds and is used for protocol timeouts, retransmissions, and scheduling.<br>On STM32, it is commonly derived from&nbsp;<code>HAL_GetTick()<\/code>&nbsp;or an RTOS tick counter.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>MG_ENABLE_TCPIP_PRINT_DEBUG_STATS 1<\/code><\/strong><\/h3>\n\n\n\n<p>Enables logging of TCP\/IP runtime statistics.<br>This outputs packet counters, retransmissions, memory usage, and protocol state information, which is valuable during Ethernet bring-up and ping testing but usually disabled in production builds.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>MG_ENABLE_CUSTOM_RANDOM 1<\/code><\/strong><\/h3>\n\n\n\n<p>Requires the user to implement:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">uint64_t mg_random(void);\n<\/pre><\/div>\n\n\n\n<p>Random numbers are used for TCP sequence numbers, ephemeral ports, and security features.<br>On STM32, this should preferably come from the hardware RNG peripheral or a well-seeded software generator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><code>MG_TCPIP_PHY_ADDR 0<\/code><\/strong><\/h3>\n\n\n\n<p>Defines the Ethernet PHY address on the MDIO bus.<br>The value must match the strap-configured address of the PHY chip on the board; an incorrect value will prevent link detection and block network communication. This value for STM32 ranges from 0 to 4. You can experiment with the value to determine which one that will work in your setup. Usually either 0 or 1 will work without any issue.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, define which STM32 are you using, either STM32F or STM32H:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">#define MG_ENABLE_DRIVER_STM32H 0\n#define MG_ENABLE_DRIVER_STM32F 1<\/pre><\/div>\n\n\n\n<p>This guide uses STM32F767Zi, hence, STM32F is set to 1 while STM32H is set to 0. In case you are using H series, such as H7\/H5, set STM32F to 0 and set STM32H to 1.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, in main.c file, in user code begin 0, declare the following function that mongoose will use it to generate random MAC address as follows:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">bool mg_random(void *buf, size_t len) {  \/\/ Use on-board RNG\n  for (size_t n = 0; n &lt; len; n += sizeof(uint32_t)) {\n    uint32_t r;\n    HAL_RNG_GenerateRandomNumber(&amp;hrng, &amp;r);\n    memcpy((char *) buf + n, &amp;r, n + sizeof(r) &gt; len ? len - n : sizeof(r));\n  }\n  return true; \/\/ TODO(): ensure successful RNG init, then return on false above\n}<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, create run mongoose function as follows:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">static void run_mongoose(void) {\n  struct mg_mgr mgr;        \/\/ Mongoose event manager\n  mg_mgr_init(&amp;mgr);        \/\/ Initialise event manager\n  mg_log_set(MG_LL_DEBUG);  \/\/ Set log level to debug\n  for (;;) {                \/\/ Infinite event loop\n    mg_mgr_poll(&amp;mgr, 0);   \/\/ Process network events\n  }\n}<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Next, in use code begin 2 in main function, call run_mongoose function as follows:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\"> run_mongoose();<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>In user code begin include, include mongoose header file as follows:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">#include &quot;mongoose.h&quot;<\/pre><\/div>\n\n\n\n<p>At this point, connect an ethernet cable from your router to your Nucleo board.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Save, build and run the project as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"34\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-1024x34.jpg\" alt=\"\" class=\"wp-image-4132\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-1024x34.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-300x10.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-768x26.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-1536x51.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-1150x38.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-750x25.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-400x13.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13-250x8.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2025\/12\/2025-12-31_11-12-13.jpg 1986w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Run Ping Test:<\/h2>\n\n\n\n<p>Open your serial monitor application and you should see the IP address provided by the router to your board as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"707\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-1024x707.jpg\" alt=\"\" class=\"wp-image-4208\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-1024x707.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-300x207.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-768x530.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-1536x1060.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-1150x794.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-750x518.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-400x276.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26-250x173.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-26.jpg 1866w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Note: the address is different from device to device. Here, my router provided the ip address of 192.168.68.109 to my device.<\/p>\n\n\n\n<p>Run ping test by opening terminal on macOS or command prompt in windows and type the following:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csrc&quot;,&quot;theme&quot;:&quot;dracula&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;C&quot;,&quot;language&quot;:&quot;C&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;c&quot;}\">ping 192.168.68.109<\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>You should the following:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"809\" src=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-1024x809.jpg\" alt=\"\" class=\"wp-image-4209\" srcset=\"https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-1024x809.jpg 1024w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-300x237.jpg 300w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-768x607.jpg 768w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-1536x1214.jpg 1536w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-1150x909.jpg 1150w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-750x593.jpg 750w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-400x316.jpg 400w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47-250x198.jpg 250w, https:\/\/blog.embeddedexpert.io\/wp-content\/uploads\/2026\/02\/2026-02-01_08-42-47.jpg 1640w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We have successfully configured the ethernet, set it up properly and ping test it. All that done with minimal effort from us.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>In part 3, we shall develop web server to display some variables.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Stay tuned.<\/p>\n\n\n\n<p>Happy coding \ud83d\ude09<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this second part of the guide, we integrate the Mongoose source and header files into the STM32 project and walk through the required configuration steps for a successful build. We then bring up the Ethernet interface and verify basic network functionality by performing a ping test to confirm reliable connectivity. In this guide, we [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,11,12],"tags":[],"class_list":["post-4205","post","type-post","status-publish","format-standard","hentry","category-embedded-systems","category-peripheral-drivers","category-stm32"],"_links":{"self":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/4205"}],"collection":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4205"}],"version-history":[{"count":1,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/4205\/revisions"}],"predecessor-version":[{"id":4210,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=\/wp\/v2\/posts\/4205\/revisions\/4210"}],"wp:attachment":[{"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embeddedexpert.io\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}