mongoose/examples/stm32/nucleo-f746zg-baremetal
Sergio R. Caprile 3cd4fd2d61 Workaround for aliased weak symbol override issue
Changed README to use picocom as cu is apparently not able to add carriage return after line feed
2022-08-24 19:02:11 -03: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 Workaround for aliased weak symbol override issue 2022-08-24 19:02:11 -03:00
Makefile Build dashboard by default, fix FPU flag 2022-08-18 21:36:36 +01:00
mcu.h Enable FPU 2022-08-16 16:45:05 +01:00
README.md Workaround for aliased weak symbol override issue 2022-08-24 19:02:11 -03: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 mip_driver_stm32.h 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