STM32 WiFi and Bluetooth

From Stm32World Wiki
Jump to navigation Jump to search

While STMicroelectronics do offer STM32 MCUs with wireless functionality in their "W" family, for some truly baffling reason, they have never offered a MCU with [{WiFi]] functionality, and in this day and age that does seem quite remarkable. On Oct. 1, 2024, they announced a strategic partnership with Qualcomm development, no - not a WiFi enabled STM32 but a Module which could be hooked up to a STM32 MCU and some libraries supporting this library.

The ST67W611M1 Module

ST67W611 Pricing - cart.png

Towards the middle of 2025, the new module was finally announced, the "ST67W611M1xx" one.

ST67W611 Pricing.png

ESP-01

To be added

ESP-32

To be added

Building the Slave firmware

Prerequisites

This section assumes a working and up-to-date ESP-IDF installation and some sort of ESP32 development board. We will be using one based on a ESP32-C3 (single core risc-v) module.

Having the installed and configured the ESP-IDF, load the configuration by running something like:

lth@ncpws04:~$ . ~/esp/esp-idf/export.sh

Creating, configuring and building

First step is to create a new project, which will be done automatically (assuming a working ESP-IDF installation):

lth@ncpws04:~/tmp$ idf.py create-project-from-example "espressif/esp_hosted:slave"
Executing action: create-project-from-example
NOTICE: Example "slave" successfully downloaded to /home/lth/tmp/slave
Done

Next up, we will set our target MCU:

lth@ncpws04:~/tmp$ cd slave/
lth@ncpws04:~/tmp/slave$ idf.py set-target esp32c3
Adding "set-target"'s dependency "fullclean" to list of commands with default set of options.
Executing action: fullclean
Build directory '/home/lth/tmp/slave/build' not found. Nothing to clean.
Executing action: set-target
Set Target to: esp32c3, new sdkconfig will be created.
Running cmake in directory /home/lth/tmp/slave/build
Executing "cmake -G Ninja -DPYTHON_DEPS_CHECKED=1 -DPYTHON=/home/lth/.espressif/python_env/idf6.0_py3.13_env/bin/python -DESP_PLATFORM=1 -DIDF_TARGET=esp32c3 -DCCACHE_ENABLE=0 /home/lth/tmp/slave"...
-- Found Git: /usr/bin/git (found version "2.47.2") 
-- Minimal build - OFF
-- The C compiler identification is GNU 15.1.0
-- The CXX compiler identification is GNU 15.1.0
-- The ASM compiler identification is GNU
-- Found assembler: /home/lth/.espressif/tools/riscv32-esp-elf/esp-15.1.0_20250607/riscv32-esp-elf/bin/riscv32-esp-elf-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/lth/.espressif/tools/riscv32-esp-elf/esp-15.1.0_20250607/riscv32-esp-elf/bin/riscv32-esp-elf-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/lth/.espressif/tools/riscv32-esp-elf/esp-15.1.0_20250607/riscv32-esp-elf/bin/riscv32-esp-elf-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- git rev-parse returned 'fatal: not a git repository (or any parent up to mount point /)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).'
-- Could not use 'git describe' to determine PROJECT_VER.
-- Building ESP-IDF components for target esp32c3
-- Project sdkconfig file /home/lth/tmp/slave/sdkconfig
warning: the int symbol ESP_HOSTED_BT_UART_PORT_ESP32 (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:737) has a non-int range [BTDM_CTRL_HCI_UART_NO (undefined), BTDM_CTRL_HCI_UART_NO (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_BAUDRATE_ESP32 (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:743) has a non-int range [BTDM_CTRL_HCI_UART_BAUDRATE (undefined), BTDM_CTRL_HCI_UART_BAUDRATE (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_PORT (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:757) has a non-int range [BT_LE_HCI_UART_PORT (undefined), BT_LE_HCI_UART_PORT (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_TX_PIN (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:763) has a non-int range [BT_LE_HCI_UART_TX_PIN (undefined), BT_LE_HCI_UART_TX_PIN (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_RX_PIN (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:769) has a non-int range [BT_LE_HCI_UART_RX_PIN (undefined), BT_LE_HCI_UART_RX_PIN (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_RTS_PIN (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:775) has a non-int range [BT_LE_HCI_UART_RTS_PIN (undefined), BT_LE_HCI_UART_RTS_PIN (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_CTS_PIN (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:782) has a non-int range [BT_LE_HCI_UART_CTS_PIN (undefined), BT_LE_HCI_UART_CTS_PIN (undefined)]
warning: the int symbol ESP_HOSTED_BT_UART_BAUDRATE (defined at /home/lth/tmp/slave/main/Kconfig.projbuild:789) has a non-int range [BT_LE_HCI_UART_BAUD (undefined), BT_LE_HCI_UART_BAUD (undefined)]
Loading defaults file /home/lth/tmp/slave/sdkconfig.defaults...
Loading defaults file /home/lth/tmp/slave/sdkconfig.defaults.esp32c3...
/tmp/kconfgen_tmp5h6uq3x5:4 line was updated to CONFIG_SDIO_DAT2_DISABLED=n
/tmp/kconfgen_tmp5h6uq3x5:9 line was updated to CONFIG_BT_BLUEDROID_ENABLED=n
warning: unknown kconfig symbol 'ESP32_DEFAULT_CPU_FREQ_160' assigned to 'y' in /home/lth/tmp/slave/sdkconfig.defaults.esp32c3
warning: unknown kconfig symbol 'ESP32_DEFAULT_CPU_FREQ_MHZ' assigned to '160' in /home/lth/tmp/slave/sdkconfig.defaults.esp32c3
warning: unknown kconfig symbol 'SDIO_DAT2_DISABLED' assigned to 'n' in /home/lth/tmp/slave/sdkconfig.defaults.esp32c3
warning: unknown kconfig symbol 'BT_LE_SLEEP_ENABLE' assigned to 'y' in /home/lth/tmp/slave/sdkconfig.defaults.esp32c3
-- Adding linker script /home/lth/esp/esp-idf/components/riscv/ld/rom.api.ld
-- Found Python3: /home/lth/.espressif/python_env/idf6.0_py3.13_env/bin/python (found version "3.13.5") found components: Interpreter 
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Performing Test C_COMPILER_SUPPORTS_WFORMAT_SIGNEDNESS
-- Performing Test C_COMPILER_SUPPORTS_WFORMAT_SIGNEDNESS - Success
-- USING O3
-- App "network_adapter" version: 1
-- Adding linker script /home/lth/tmp/slave/build/esp-idf/esp_system/ld/memory.ld
-- Adding linker script /home/lth/tmp/slave/build/esp-idf/esp_system/ld/sections.ld.in
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.bt_funcs.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.libgcc.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.version.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.ble_cca.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.ble_test.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.eco3.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.eco3_bt_funcs.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.libc.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.libc-suboptimal_for_misaligned_mem.ld
-- Adding linker script /home/lth/esp/esp-idf/components/esp_rom/esp32c3/ld/esp32c3.rom.newlib.ld
-- Adding linker script /home/lth/esp/esp-idf/components/soc/esp32c3/ld/esp32c3.peripherals.ld
-- Components: app_update bootloader bootloader_support bt console cxx driver efuse esp_app_format esp_bootloader_format esp_coex esp_common esp_driver_ana_cmpr esp_driver_bitscrambler esp_driver_dac esp_driver_gpio esp_driver_gptimer esp_driver_i2c esp_driver_i2s esp_driver_ledc esp_driver_mcpwm esp_driver_parlio esp_driver_pcnt esp_driver_rmt esp_driver_sd_intf esp_driver_sdio esp_driver_sdm esp_driver_sdmmc esp_driver_sdspi esp_driver_spi esp_driver_tsens esp_driver_twai esp_driver_uart esp_driver_usb_serial_jtag esp_event esp_gdbstub esp_http_server esp_hw_support esp_mm esp_netif esp_netif_stack esp_partition esp_phy esp_pm esp_ringbuf esp_rom esp_security esp_system esp_timer esp_vfs_console esp_wifi esptool_py freertos hal heap http_parser log lwip main mbedtls newlib nvs_flash partition_table protobuf-c protocomm pthread riscv sdmmc soc spi_flash vfs wpa_supplicant
-- Component paths: /home/lth/esp/esp-idf/components/app_update /home/lth/esp/esp-idf/components/bootloader /home/lth/esp/esp-idf/components/bootloader_support /home/lth/esp/esp-idf/components/bt /home/lth/esp/esp-idf/components/console /home/lth/esp/esp-idf/components/cxx /home/lth/esp/esp-idf/components/driver /home/lth/esp/esp-idf/components/efuse /home/lth/esp/esp-idf/components/esp_app_format /home/lth/esp/esp-idf/components/esp_bootloader_format /home/lth/esp/esp-idf/components/esp_coex /home/lth/esp/esp-idf/components/esp_common /home/lth/esp/esp-idf/components/esp_driver_ana_cmpr /home/lth/esp/esp-idf/components/esp_driver_bitscrambler /home/lth/esp/esp-idf/components/esp_driver_dac /home/lth/esp/esp-idf/components/esp_driver_gpio /home/lth/esp/esp-idf/components/esp_driver_gptimer /home/lth/esp/esp-idf/components/esp_driver_i2c /home/lth/esp/esp-idf/components/esp_driver_i2s /home/lth/esp/esp-idf/components/esp_driver_ledc /home/lth/esp/esp-idf/components/esp_driver_mcpwm /home/lth/esp/esp-idf/components/esp_driver_parlio /home/lth/esp/esp-idf/components/esp_driver_pcnt /home/lth/esp/esp-idf/components/esp_driver_rmt /home/lth/esp/esp-idf/components/esp_driver_sd_intf /home/lth/esp/esp-idf/components/esp_driver_sdio /home/lth/esp/esp-idf/components/esp_driver_sdm /home/lth/esp/esp-idf/components/esp_driver_sdmmc /home/lth/esp/esp-idf/components/esp_driver_sdspi /home/lth/esp/esp-idf/components/esp_driver_spi /home/lth/esp/esp-idf/components/esp_driver_tsens /home/lth/esp/esp-idf/components/esp_driver_twai /home/lth/esp/esp-idf/components/esp_driver_uart /home/lth/esp/esp-idf/components/esp_driver_usb_serial_jtag /home/lth/esp/esp-idf/components/esp_event /home/lth/esp/esp-idf/components/esp_gdbstub /home/lth/esp/esp-idf/components/esp_http_server /home/lth/esp/esp-idf/components/esp_hw_support /home/lth/esp/esp-idf/components/esp_mm /home/lth/esp/esp-idf/components/esp_netif /home/lth/esp/esp-idf/components/esp_netif_stack /home/lth/esp/esp-idf/components/esp_partition /home/lth/esp/esp-idf/components/esp_phy /home/lth/esp/esp-idf/components/esp_pm /home/lth/esp/esp-idf/components/esp_ringbuf /home/lth/esp/esp-idf/components/esp_rom /home/lth/esp/esp-idf/components/esp_security /home/lth/esp/esp-idf/components/esp_system /home/lth/esp/esp-idf/components/esp_timer /home/lth/esp/esp-idf/components/esp_vfs_console /home/lth/esp/esp-idf/components/esp_wifi /home/lth/esp/esp-idf/components/esptool_py /home/lth/esp/esp-idf/components/freertos /home/lth/esp/esp-idf/components/hal /home/lth/esp/esp-idf/components/heap /home/lth/esp/esp-idf/components/http_parser /home/lth/esp/esp-idf/components/log /home/lth/esp/esp-idf/components/lwip /home/lth/tmp/slave/main /home/lth/esp/esp-idf/components/mbedtls /home/lth/esp/esp-idf/components/newlib /home/lth/esp/esp-idf/components/nvs_flash /home/lth/esp/esp-idf/components/partition_table /home/lth/esp/esp-idf/components/protobuf-c /home/lth/esp/esp-idf/components/protocomm /home/lth/esp/esp-idf/components/pthread /home/lth/esp/esp-idf/components/riscv /home/lth/esp/esp-idf/components/sdmmc /home/lth/esp/esp-idf/components/soc /home/lth/esp/esp-idf/components/spi_flash /home/lth/esp/esp-idf/components/vfs /home/lth/esp/esp-idf/components/wpa_supplicant
-- Configuring done (3.9s)
-- Generating done (0.3s)
-- Build files have been written to: /home/lth/tmp/slave/build

We can now move on to configuring the project. Run:

lth@ncpws04:~/tmp/slave$ idf.py menuconfig

First step is to configure the "Serial flasher config" to match the flash available on the development board.

Miscellaneous Links