This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 21b02f176f stm32f401rc-rs485: Add rs-485 support
21b02f176f is described below

commit 21b02f176f4108d9e028d4939cae10c484ee5a0e
Author: Rodrigo Sim <[email protected]>
AuthorDate: Sun Dec 10 16:48:28 2023 -0300

    stm32f401rc-rs485: Add rs-485 support
---
 .../arm/stm32f4/boards/stm32f401rc-rs485/index.rst | 111 ++++++++++++++++++---
 arch/arm/include/stm32/chip.h                      |   2 +-
 .../configs/{nsh => modbus_slave}/defconfig        |  12 ++-
 .../stm32/stm32f401rc-rs485/configs/nsh/defconfig  |   7 +-
 .../stm32f401rc-rs485/configs/sdcard/defconfig     |   4 +-
 boards/arm/stm32/stm32f401rc-rs485/include/board.h |  54 ++++------
 .../stm32/stm32f401rc-rs485/src/stm32_buttons.c    |   2 +-
 .../stm32f401rc-rs485/src/stm32f401rc-rs485.h      |  30 +-----
 8 files changed, 134 insertions(+), 88 deletions(-)

diff --git 
a/Documentation/platforms/arm/stm32f4/boards/stm32f401rc-rs485/index.rst 
b/Documentation/platforms/arm/stm32f4/boards/stm32f401rc-rs485/index.rst
index 1371b30921..38d9c014af 100644
--- a/Documentation/platforms/arm/stm32f4/boards/stm32f401rc-rs485/index.rst
+++ b/Documentation/platforms/arm/stm32f4/boards/stm32f401rc-rs485/index.rst
@@ -69,31 +69,32 @@ User Buttons
 
 The STM32F4-RS485 has 4 user switches.
 
-======= =====
-SWITCH  PINS
-======= =====
-SWIO_1  PB13
-SWIO_2  PB14
-SWIO_3  PB15
-SWIO_4  PC6
-======= =====
+======= ===== ======
+SWITCH  PINS  LABEL
+======= ===== ======
+SWIO_1  PB13  SW3
+SWIO_2  PB14  SW4
+SWIO_3  PB15  SW5
+SWIO_4  PC6   SW6[1]
+======= ===== ======
+
+[1] The switch SWIO_4 (SW6) is disabled due a conflict with PIN
+PC6 when using USART6. 
 
 UARTs
 =====
 
 The STM32F4-RS485 has 1 USART available for user.
 
-USART2
+USART6
 ------
 
 ========== =======
 UART/USART PINS
 ========== =======
-CTS        PA0
-RTS        PA1
-TX         PA2 [1]
-RX         PA3
-CK         PA4
+TX         PC6 [1]
+RX         PC7
+CK         PA8
 ========== =======
 
 [1] Warning you make need to reverse RX/TX on some RS-232 converters
@@ -174,7 +175,7 @@ USART2       PINS
 ==========   =====
 USART2_RX    RO
 USART2_RTS   DE, /RE
-SART2_RX     DI
+USART2_RX    DI
 ==========   =====
 
 A/D Converter
@@ -221,7 +222,7 @@ nsh
 ---
 
 Configures the NuttShell (nsh) located at apps/examples/nsh. This
-configuration enables a serial console on UART2.
+configuration enables a serial console on USART6.
 
 sdcard
 ------
@@ -235,3 +236,81 @@ NSH commands::
        nsh> mount -t procfs /proc
        nsh> mount -t vfat /dev/mmcsd0 /mnt
 
+modbus_slave
+------------
+
+Configures the NuttShell (nsh) and enables modbus in slave mode. This
+configuration enables a serial console on USART6. The RS-485 is connected
+to USART2. Follow below precedure to use modbus test aplication, you will
+need a USB to RS-485 converter to connect the board to a PC via RS-485.
+
+NuttShell configuration:
+
+Run modbus application at NSH::
+
+       nsh> modbus -help
+       USAGE: modbus [-d|e|s|q|h]
+
+       Where:
+         -d : Disable protocol stack
+         -e : Enable the protocol stack
+         -s : Show current status
+         -q : Quit application
+         -h : Show this information
+
+       nsh> modbus -e
+
+PC Configuration:
+
+Download and install mbpoll aplication::
+
+       sudo apt install mbpoll
+
+Check which TTY USB port is being used by you USB to RS-485 converter::
+
+       sudo dmesg
+       [99846.668209] usb 1-1.3: Product: USB Serial
+       [99846.676313] ch341 1-1.3:1.0: ch341-uart converter detected
+       [99846.677454] usb 1-1.3: ch341-uart converter now attached to ttyUSB1
+
+Run the mbpoll as below::
+
+       mbpoll -a 10 -b 38400 -t 3 -r 1000 -c 4 /dev/ttyUSB1 -R
+
+
+At PC terminal you will see the mbpoll application receiving the random values
+generated by STM32F401RC-RS485 and transmitted over RS-485::
+
+       mbpoll 1.0-0 - FieldTalk(tm) Modbus(R) Master Simulator
+       Copyright © 2015-2019 Pascal JEAN, https://github.com/epsilonrt/mbpoll
+       This program comes with ABSOLUTELY NO WARRANTY.
+       This is free software, and you are welcome to redistribute it
+       under certain conditions; type 'mbpoll -w' for details.
+
+       Protocol configuration: Modbus RTU
+       Slave configuration...: address = [10]
+                               start reference = 1000, count = 4
+       Communication.........: /dev/ttyUSB1,      38400-8E1
+                               t/o 1.00 s, poll rate 1000 ms
+       Data type.............: 16-bit register, input register table
+       -- Polling slave 10... Ctrl-C to stop)
+       [1000]:         58080 (-7456)
+       [1001]:         0
+       [1002]:         0
+       [1003]:         0
+       -- Polling slave 10... Ctrl-C to stop)
+       [1000]:         6100
+       [1001]:         0
+       [1002]:         0
+       [1003]:         0
+       -- Polling slave 10... Ctrl-C to stop)
+       [1000]:         51010 (-14526)
+       [1001]:         0
+       [1002]:         0
+       [1003]:         0
+       -- Polling slave 10... Ctrl-C to stop)
+       [1000]:         12528
+       [1001]:         0
+       [1002]:         0
+       [1003]:         0
+
diff --git a/arch/arm/include/stm32/chip.h b/arch/arm/include/stm32/chip.h
index f155df64d2..00855956cb 100644
--- a/arch/arm/include/stm32/chip.h
+++ b/arch/arm/include/stm32/chip.h
@@ -1587,7 +1587,7 @@
 #  define STM32_NDMA                     2   /* DMA1-2 with 8 streams each*/
 #  define STM32_NSPI                     3   /* SPI1-3 */
 #  define STM32_NI2S                     2   /* I2S2-3 (multiplexed with 
SPI2-3) */
-#  define STM32_NUSART                   3   /* USART1, 2 and 6 */
+#  define STM32_NUSART                   6   /* Actually only 3: USART1, 2 and 
6 */
 #  define STM32_NI2C                     3   /* I2C1-3 */
 #  define STM32_NCAN                     0   /* No CAN */
 #  if defined(CONFIG_ARCH_CHIP_STM32F401CB) || 
defined(CONFIG_ARCH_CHIP_STM32F401CC)
diff --git a/boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig 
b/boards/arm/stm32/stm32f401rc-rs485/configs/modbus_slave/defconfig
similarity index 85%
copy from boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig
copy to boards/arm/stm32/stm32f401rc-rs485/configs/modbus_slave/defconfig
index d9fb2d4370..6c78a8ca9a 100644
--- a/boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig
+++ b/boards/arm/stm32/stm32f401rc-rs485/configs/modbus_slave/defconfig
@@ -6,6 +6,8 @@
 # modifications.
 #
 # CONFIG_ARCH_FPU is not set
+# CONFIG_MB_ASCII_ENABLED is not set
+# CONFIG_MB_TCP_ENABLED is not set
 # CONFIG_NSH_ARGCAT is not set
 # CONFIG_NSH_CMDOPT_HEXDUMP is not set
 # CONFIG_NSH_DISABLE_IFCONFIG is not set
@@ -29,6 +31,8 @@ CONFIG_EXAMPLES_BUTTONS_NAME2="SW5"
 CONFIG_EXAMPLES_BUTTONS_NAME3="SW6"
 CONFIG_EXAMPLES_BUTTONS_NAMES=y
 CONFIG_EXAMPLES_BUTTONS_QTD=4
+CONFIG_EXAMPLES_MODBUS=y
+CONFIG_EXAMPLES_MODBUS_PORT=1
 CONFIG_HAVE_CXX=y
 CONFIG_HAVE_CXXINITIALIZE=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
@@ -36,6 +40,8 @@ CONFIG_INPUT=y
 CONFIG_INPUT_BUTTONS=y
 CONFIG_INPUT_BUTTONS_LOWER=y
 CONFIG_INTELHEX_BINARY=y
+CONFIG_MODBUS=y
+CONFIG_MODBUS_SLAVE=y
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_BUILTIN_APPS=y
 CONFIG_NSH_FILEIOSIZE=512
@@ -55,6 +61,10 @@ CONFIG_STM32_JTAG_SW_ENABLE=y
 CONFIG_STM32_OTGFS=y
 CONFIG_STM32_PWR=y
 CONFIG_STM32_USART2=y
+CONFIG_STM32_USART6=y
 CONFIG_SYSTEM_NSH=y
 CONFIG_TASK_NAME_SIZE=0
-CONFIG_USART2_SERIAL_CONSOLE=y
+CONFIG_USART2_BAUD=38400
+CONFIG_USART2_PARITY=2
+CONFIG_USART2_RS485=y
+CONFIG_USART6_SERIAL_CONSOLE=y
diff --git a/boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig 
b/boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig
index d9fb2d4370..fed70c4f38 100644
--- a/boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig
+++ b/boards/arm/stm32/stm32f401rc-rs485/configs/nsh/defconfig
@@ -26,9 +26,8 @@ CONFIG_EXAMPLES_BUTTONS=y
 CONFIG_EXAMPLES_BUTTONS_NAME0="SW3"
 CONFIG_EXAMPLES_BUTTONS_NAME1="SW4"
 CONFIG_EXAMPLES_BUTTONS_NAME2="SW5"
-CONFIG_EXAMPLES_BUTTONS_NAME3="SW6"
 CONFIG_EXAMPLES_BUTTONS_NAMES=y
-CONFIG_EXAMPLES_BUTTONS_QTD=4
+CONFIG_EXAMPLES_BUTTONS_QTD=3
 CONFIG_HAVE_CXX=y
 CONFIG_HAVE_CXXINITIALIZE=y
 CONFIG_INIT_ENTRYPOINT="nsh_main"
@@ -54,7 +53,7 @@ CONFIG_START_YEAR=2014
 CONFIG_STM32_JTAG_SW_ENABLE=y
 CONFIG_STM32_OTGFS=y
 CONFIG_STM32_PWR=y
-CONFIG_STM32_USART2=y
+CONFIG_STM32_USART6=y
 CONFIG_SYSTEM_NSH=y
 CONFIG_TASK_NAME_SIZE=0
-CONFIG_USART2_SERIAL_CONSOLE=y
+CONFIG_USART6_SERIAL_CONSOLE=y
diff --git a/boards/arm/stm32/stm32f401rc-rs485/configs/sdcard/defconfig 
b/boards/arm/stm32/stm32f401rc-rs485/configs/sdcard/defconfig
index 5c50b8bacc..0bac727099 100644
--- a/boards/arm/stm32/stm32f401rc-rs485/configs/sdcard/defconfig
+++ b/boards/arm/stm32/stm32f401rc-rs485/configs/sdcard/defconfig
@@ -64,7 +64,7 @@ CONFIG_STM32_OTGFS=y
 CONFIG_STM32_PWR=y
 CONFIG_STM32_SDIO=y
 CONFIG_STM32_SDIO_CARD=y
-CONFIG_STM32_USART2=y
+CONFIG_STM32_USART6=y
 CONFIG_SYSTEM_NSH=y
 CONFIG_TASK_NAME_SIZE=0
-CONFIG_USART2_SERIAL_CONSOLE=y
+CONFIG_USART6_SERIAL_CONSOLE=y
diff --git a/boards/arm/stm32/stm32f401rc-rs485/include/board.h 
b/boards/arm/stm32/stm32f401rc-rs485/include/board.h
index 76400eae09..016ce5a840 100644
--- a/boards/arm/stm32/stm32f401rc-rs485/include/board.h
+++ b/boards/arm/stm32/stm32f401rc-rs485/include/board.h
@@ -256,48 +256,32 @@ extern "C"
 
 /* Alternate function pin selections ****************************************/
 
-/* USART1:
- *   RXD: PA10  CN9 pin 3, CN10 pin 33
- *        PB7   CN7 pin 21
- *   TXD: PA9   CN5 pin 1, CN10 pin 21
- *        PB6   CN5 pin 3, CN10 pin 17
+/* USART2:
+ *   RXD: PA3   CN4 pin 20
+ *   TXD: PA2   CN4 pin 18
  */
 
-#if 1
-#  define GPIO_USART1_RX GPIO_USART1_RX_1    /* PA10 */
-#  define GPIO_USART1_TX GPIO_USART1_TX_1    /* PA9  */
-#else
-#  define GPIO_USART1_RX GPIO_USART1_RX_2    /* PB7 */
-#  define GPIO_USART1_TX GPIO_USART1_TX_2    /* PB6  */
-#endif
+#ifdef CONFIG_USART2_RS485
+  /* Lets use for RS485 */
 
-/* USART2:
- *   RXD: PA3   CN9 pin 1 (See SB13, 14, 62, 63). CN10 pin 37
- *        PD6
- *   TXD: PA2   CN9 pin 2(See SB13, 14, 62, 63). CN10 pin 35
- *        PD5
- */
+#  define GPIO_USART2_TX        GPIO_USART2_TX_1 /* PA2 */
+#  define GPIO_USART2_RX        GPIO_USART2_RX_1 /* PA3 */
 
-#define GPIO_USART2_RX   GPIO_USART2_RX_1    /* PA3 */
-#define GPIO_USART2_TX   GPIO_USART2_TX_1    /* PA2 */
-#define GPIO_USART2_RTS  GPIO_USART2_RTS_2
-#define GPIO_USART2_CTS  GPIO_USART2_CTS_2
+  /* RS485 DIR pin: PA1 */
+
+#  define GPIO_USART2_RS485_DIR (GPIO_OUTPUT | GPIO_PUSHPULL | 
GPIO_SPEED_50MHz |\
+                                 GPIO_OUTPUT_CLEAR | GPIO_PORTA | GPIO_PIN1)
+
+#endif
 
 /* USART6:
- *  RXD: PC7    CN5 pin2, CN10 pin 19
- *       PA12   CN10, pin 12
- *  TXD: PC6    CN10, pin 4
- *       PA11   CN10, pin 14
+ *  RXD: PC7    CN2 pin 15
+ *  TXD: PC6    CN2 pin 17
  */
 
 #define GPIO_USART6_RX   GPIO_USART6_RX_1    /* PC7 */
 #define GPIO_USART6_TX   GPIO_USART6_TX_1    /* PC6 */
 
-/* UART RX DMA configurations */
-
-#define DMAMAP_USART1_RX DMAMAP_USART1_RX_2
-#define DMAMAP_USART6_RX DMAMAP_USART6_RX_2
-
 /* I2C
  *
  * The optional _GPIO configurations allow the I2C driver to manually
@@ -379,20 +363,18 @@ extern "C"
 #define LED_PANIC        1
 
 /* Buttons
- *   The STM32F401RC-RS485 has 4 user buttons: SW3, SW4, SW5 and
- *   SW6. They are connected to PB13, PB14, PB15 and PC6 respectively.
+ *   The STM32F401RC-RS485 has 3 user buttons: SW3, SW4, and SW5.
+ *   They are connected to PB13, PB14, and PB15 respectively.
  */
 
 #define BUTTON_SW3         0
 #define BUTTON_SW4         1
 #define BUTTON_SW5         2
-#define BUTTON_SW6         3
-#define NUM_BUTTONS        4
+#define NUM_BUTTONS        3
 
 #define BUTTON_SW3_BIT     (1 << BUTTON_SW3)
 #define BUTTON_SW4_BIT     (1 << BUTTON_SW4)
 #define BUTTON_SW5_BIT     (1 << BUTTON_SW5)
-#define BUTTON_SW6_BIT     (1 << BUTTON_SW6)
 
 #define GPIO_TIM2_CH1IN (GPIO_TIM2_CH1IN_1 | GPIO_PULLUP)
 #define GPIO_TIM2_CH2IN (GPIO_TIM2_CH2IN_1 | GPIO_PULLUP)
diff --git a/boards/arm/stm32/stm32f401rc-rs485/src/stm32_buttons.c 
b/boards/arm/stm32/stm32f401rc-rs485/src/stm32_buttons.c
index 85d2e79a26..8f7dfc1aaa 100644
--- a/boards/arm/stm32/stm32f401rc-rs485/src/stm32_buttons.c
+++ b/boards/arm/stm32/stm32f401rc-rs485/src/stm32_buttons.c
@@ -46,7 +46,7 @@
 
 static const uint32_t g_buttons[NUM_BUTTONS] =
 {
-  GPIO_BTN_SW3, GPIO_BTN_SW4, GPIO_BTN_SW5, GPIO_BTN_SW6
+  GPIO_BTN_SW3, GPIO_BTN_SW4, GPIO_BTN_SW5
 };
 
 /****************************************************************************
diff --git a/boards/arm/stm32/stm32f401rc-rs485/src/stm32f401rc-rs485.h 
b/boards/arm/stm32/stm32f401rc-rs485/src/stm32f401rc-rs485.h
index 261d533b62..0e0141ca51 100644
--- a/boards/arm/stm32/stm32f401rc-rs485/src/stm32f401rc-rs485.h
+++ b/boards/arm/stm32/stm32f401rc-rs485/src/stm32f401rc-rs485.h
@@ -75,16 +75,15 @@
    GPIO_SPEED_50MHz)
 
 /* Buttons
- * The STM32F401RC-RS485 has 4 user buttons.
+ * The STM32F401RC-RS485 has 3 user buttons.
  * - SW3 is connected to the GPIO PB13.
  * - SW4 is connected to the GPIO PB14.
  * - SW5 is connected to the GPIO PB15.
- * - SW6 is connected to the GPIO PC6.
  */
 
 #define MIN_IRQBUTTON   BUTTON_SW3
-#define MAX_IRQBUTTON   BUTTON_SW6
-#define NUM_IRQBUTTONS  4
+#define MAX_IRQBUTTON   BUTTON_SW5
+#define NUM_IRQBUTTONS  3
 
 #define GPIO_BTN_SW3 \
   (GPIO_INPUT |GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN13)
@@ -92,29 +91,6 @@
   (GPIO_INPUT |GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN14)
 #define GPIO_BTN_SW5 \
   (GPIO_INPUT |GPIO_FLOAT |GPIO_EXTI | GPIO_PORTB | GPIO_PIN15)
-#define GPIO_BTN_SW6 \
-  (GPIO_INPUT |GPIO_FLOAT |GPIO_EXTI | GPIO_PORTC | GPIO_PIN6)
-
-/* The shield uses the following pins:
- *
- *   +5V
- *   GND
- *  SERIAL_TX=PA_2    USER_BUTTON=PC_13
- *  SERIAL_RX=PA_3            LD2=PA_5
- *
- * Analog                         Digital
- *  A0=PA_0    USART2RX D0=PA_3              D8 =PA_9
- *  A1=PA_1    USART2TX D1=PA_2              D9 =PC_7
- *  A2=PA_4             D2=PA_10     WIFI_CS=D10=PB_6 SPI_CS
- *  A3=PB_0    WIFI_INT=D3=PB_3              D11=PA_7 SPI_MOSI
- *  A4=PC_1       SD_CS=D4=PB_5              D12=PA_6 SPI_MISO
- *  A5=PC_0     WIFI_EN=D5=PB_4          LD2=D13=PA_5 SPI_SCK
- *                 LED2=D6=PB_10    I2C1_SDA=D14=PB_9 WIFI Probe
- *                      D7=PA_8     I2C1_SCL=D15=PB_8 WIFI Probe
- *
- *  mostly from: https://mbed.org/platforms/ST-Nucleo-F401RE/
- *
- */
 
 /* SPI1 off */
 

Reply via email to