mongoose/examples/stm32/nucleo-f746zg-baremetal
2022-08-31 08:41:16 +01:00
..
boot.c Workaround for aliased weak symbol override issue 2022-08-24 19:02:11 -03:00
link.ld Add nucleo-f746zg-baremetal 2022-05-26 13:53:36 +01:00
main.c struct mip_ipcfg -> struct mip_cfg 2022-08-31 08:41:16 +01:00
Makefile Build dashboard by default, fix FPU flag 2022-08-18 21:36:36 +01:00
mcu.h Group clock setup dependencies 2022-08-29 14:36:40 -03:00
README.md Fix driver link 2022-08-29 08:55:53 +01:00
syscalls.c Add nucleo-f746zg-baremetal 2022-05-26 13:53:36 +01:00

Baremetal webserver on NUCLEO-F746ZG

This firmware uses experimental TCP/IP stack of the Mongoose Network Library, which implements the following:

  • Implements HTTP server and SNTP time synchronisation
  • No dependencies: no HAL, no CMSIS, no RTOS
  • Hand-written mcu.h header based on a datasheet
  • Interrupt-driven driver_stm32.c ethernet driver
  • Blue LED blinky, based on SysTick interrupt
  • User button handler, turns off/on green LED, based on EXTI, interrupt-driven
  • HardFault handler that blinks red LED
  • Debug log on UART3 (st-link)

Requirements

Usage

Plugin your Nucleo board into USB, and attach an Ethernet cable. To build and flash:

$ make clean flash

To see debug log, use any serial monitor program like picocom at 115200 bps and configure it to insert carriage returns after line feeds:

$ picocom /dev/ttyACM0 -i -b 115200 --imap=lfcrlf

Benchmark

A quick comparison is made with several other implementations. Note: IP in the table below is the IP address printed on the console after boot. The benchmark command is the same: siege -c 5 -t 5s http://IP

Zephyr LWIP sockets LWIP raw MIP
Requests per second 3 16 286 1080
Firmware size 117k (*) 160k 114k 28k
  • Zephyr: uses Zehypr's RTOS and TCP stack, with Mongoose library on top, source code. (*) By default, Zephyr example is TLS-enabled. To compare sizes, a TLS-disabled build was done by disabling TLS in prj.conf and CMakeLists.txt
  • LWIP sockets: uses FreeRTOS and LWIP with sockets support, with Mongoose library on top, source code. built with #define MG in Core/main.c
  • LWIP raw: uses FreeRTOS and LWIP without sockets, LWIP's httpd server, source code. built with #define MG line commented out in Core/main.c
  • MIP: this repository