stm32f401rc-rs485
This page discusses issues unique to NuttX configurations for the NuttX STM32F4-RS485 development board.
Board information
This board was release on NuttX International Workshop 2023 and developed based on STM32F401RCT6 microcontroller.
- STM32F401RCT6 microcontroller features:
Arm 32-bit Cortex®-M4 CPU with FPU
256 Kbytes of Flash memory
64 Kbytes of SRAM
Serial wire debug (SWD) & JTAG interfaces
Up to 81 I/O ports with interrupt capability
Up to 11 communication interfaces
Up to 3 I2C interfaces
Up to 3 USARTs
Up to 4 SPIs
SDIO interface
USB 2.0 full-speed device/host/OTG controller with on-chip PHY
The board features:
Digital I2C Temperature Sensor (TMP75)
2K bits (256x8) I2C EEPROM
On-board RS485 Transceiver
Two Analog Input Stages with Amplifier Buffer
Two Analog Output Stages with Amplifier Buffer
MicroSD Connector supporting 1 or 4-bit bus
Four User LEDs
Four User Buttons
USB for DFU (Device Firmware Update) and USB device functionality, as well as powering the board
Onboard voltage regulator from 5V to 3.3V
SWD Pins for use as STLink (Pin header) and TC2030-IDC 6-Pin Tag-Connect Plug-of-Nails™ Connector
Crystal for HS 8MHz
Crystal for RTC 32.768KHz
Board documentation: https://github.com/lucaszampar/NuttX_STM32F4_RS485_DevBoard
As F4 series have a USB DFuSe-capable BootROM [AN2606], the board can be flashed via dfu-util over USB, or via stm32flash over UART without any debuggers.
LEDs
The STM32F4-RS485 has 4 software controllable LEDs.
LED |
PINS |
---|---|
LED_1 |
PC0 |
LED_2 |
PC1 |
LED_4 |
PC2 |
LED_5 |
PC3 |
UARTs
The STM32F4-RS485 has 1 USART available for user.
USART2
UART/USART |
PINS |
---|---|
CTS |
PA0 |
RTS |
PA1 |
TX |
PA2 [1] |
RX |
PA3 |
CK |
PA4 |
[1] Warning you make need to reverse RX/TX on some RS-232 converters
SDCard support
The STM32F4-RS485 has 1 SDCard slot connected as below:
SDIO |
PINS |
---|---|
SDIO_D0 |
PC8 |
SDIO_D1 |
PC9 |
SDIO_D2 |
PC10 |
SDIO_D3 |
PC11 |
SDIO_DK |
PC12 |
EEPROM
The STM32F4-RS485 development board has serial EEPROM HX24LC02B, with 2k bits (256x8) and internally organized with 32 pages of 8 bytes each. It is connected through I2C as below:
I2C |
PINS |
---|---|
SDA |
PB7 |
SCL |
PB8 |
Users can enable EERPOM support on STM32F4-RS485 by following below configuration:
Configure basic nsh:
./tools/configure.sh -l stm32f401rc-rs485:nsh
Enable the following configs:
CONFIG_DEV_ZERO=y CONFIG_EEPROM=y CONFIG_FS_PROCFS=y CONFIG_I2C=y CONFIG_I2C_EE_24XX=y CONFIG_STM32_I2C1=y
Build and flash the STM32F4-RS485.
Use dd command to write and read data from EEPROM as below:
nsh> dd if=/dev/zero of=/dev/eeprom nsh: dd: write failed: 1 nsh> dd if=/dev/console of=/dev/eeprom bs=1 count=4 (type "Hello") nsh> dd if=/dev/eeprom of=/dev/console bs=4 count=1 Hellonsh>
Temperature Sensor
The STM32F4-RS485 development board has a temperature sensor TMP75 (TMP75AIDR) connected through I2C as below:
I2C |
PINS |
---|---|
SDA |
PB7 |
SCL |
PB8 |
RS485 Transceiver
The STM32F4-RS485 development board has a half-duplex RS-485 transceiver, the BL3085B it is connected through USART2 as below:
USART2 |
PINS |
---|---|
USART2_RX |
RO |
USART2_RTS |
DE, /RE |
SART2_RX |
DI |
A/D Converter
The STM32F4-RS485 development board has two Analog to Digital converters with Amplifier Buffer (1COS724SR) and connected as below:
PWM |
PINS |
---|---|
PWM_1 |
PB6 |
PWM_2 |
PA6 |
D/C Converter
The STM32F4-RS485 development board has two Digital to Analog converters with Amplifier Buffer (1COS724SR) and connected as below:
ADC |
PINS |
---|---|
ADC_1 |
PA0 |
ADC_2 |
PA4 |
Configurations
Each stm32f401rc-rs485 configuration is maintained in a sub-directory and can be selected as follow:
tools/configure.sh stm32f401rc-rs485:<subdir>
Where <subdir> is one of the following:
Configuration Directories
nsh
Configures the NuttShell (nsh) located at apps/examples/nsh. This configuration enables a serial console on UART2.
sdcard
Configures the NuttShell (nsh) and enables SD card support. The stm32f401rc-rs485 has an onboard microSD slot that should be automatically registered as the block device /dev/mmcsd0 when an SD card is present. The SD card can then be mounted by the NSH commands:
nsh> mount -t procfs /proc
nsh> mount -t vfat /dev/mmcsd0 /mnt