diff --git a/ChangeLog b/ChangeLog
index 48331aa847968b1dbbe0254c9855283e91e41d4c..296747089db6340e694e4369bc39196c73724a5f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1856,4 +1856,15 @@
 	  Storage Demo Board," Model DB-DP11215 (http://www.sureelectronics.net/goods.php?id=1168).
 	  This board features the MicroChip PIC32MX440F512H MCU. (Untested on initial
 	  check-in).
+	* configs/stm3210e-eval/nsh2:  Add another NSH configuration for the STM32 with
+	  some different properties.
+	* CONFIG_NSH_CONDEV:  Add a configuration option to allow using a different character
+	  device (such a a different UART) for the NSH interface.  This allows, for example,
+	  debug output to come from the console device while using another device for NSH.
+	  There are some issues on initial check-in:  NuttX doesn't have termios and the
+	  console device has special properties that make using NSH awkward.  Examples:
+	  No CR-LF expansion, no character echoing, no command line editting.
+	* arch/arm/src/stm32/stm32_lowputc.c and stm32_serial.c.  Correct severl bugs
+	  involving serial port configuration.  These bugs are only critical if you
+	  are trying to using multiple UARTs on STM32.
 
diff --git a/Documentation/NuttShell.html b/Documentation/NuttShell.html
index ab470ee1152db354d1cf32bfb7884127a6aa3e38..4ee51a48ce61661dba0bf224b23c0b2428d656b0 100644
--- a/Documentation/NuttShell.html
+++ b/Documentation/NuttShell.html
@@ -2155,6 +2155,12 @@ nsh>
       This is useful, for example, to separate the NSH command line from the system console
       when the system console is used to provide debug output.
       Default:  <code>stdin</code> and <code>stdout</code> (probably &quot;<code>/dev/console</code>&quot;)
+      <ul><small>
+        NOTE: When any other device other than <code>/dev/console</code> is used for a user interface,
+        (1) linefeeds (<code>\n</code>) will not be expanded to carriage return / linefeeds (<code>\r\n</code>).
+        You will need to configure your terminal program to account for this.
+        And (2) input is not automatically echoed so you will have to turn local echo on.
+      </small></ul>
     </td>
   <tr>
     <td valign="top"><b><code>CONFIG_NSH_TELNET</code></b></td>
diff --git a/arch/arm/src/stm32/stm32_lowputc.c b/arch/arm/src/stm32/stm32_lowputc.c
index fe6f513867c797708f1a16931b81f072f89086a8..4d7527962538644a7bcf6657d23d8df787524c4e 100644
--- a/arch/arm/src/stm32/stm32_lowputc.c
+++ b/arch/arm/src/stm32/stm32_lowputc.c
@@ -162,9 +162,9 @@
 
 #define STM32_USARTDIV32 (STM32_APBCLOCK / (STM32_CONSOLE_BAUD >> 1))
 
-/* The mantissa is then usartdiv32 * 32:
+/* The mantissa is then usartdiv32 / 32:
  *
- *   mantissa = 32 * usartdiv32
+ *   mantissa = usartdiv32 / 32/
  *
  * Eg. usartdiv32=1250, mantissa = 39 
  */
@@ -247,7 +247,7 @@ void stm32_lowsetup(void)
   uint32_t cr;
 #endif
 
-  /* Enable the selected USARTs and configure GPIO pins need byed the
+  /* Enable the selected USARTs and configure GPIO pins need by the
    * the selected USARTs.  NOTE: The serial driver later depends on
    * this pin configuration -- whether or not a serial console is selected.
    *
diff --git a/arch/arm/src/stm32/stm32_serial.c b/arch/arm/src/stm32/stm32_serial.c
index a529285f451d7907cbad9fe2352c234b073fdaaf..7255ef491fae1e854ef24b460fc7d0e0d905612a 100644
--- a/arch/arm/src/stm32/stm32_serial.c
+++ b/arch/arm/src/stm32/stm32_serial.c
@@ -425,8 +425,8 @@ static inline void up_disableusartint(struct up_dev_s *priv, uint16_t *ie)
 static int up_setup(struct uart_dev_s *dev)
 {
   struct up_dev_s *priv = (struct up_dev_s*)dev->priv;
-#ifdef CONFIG_SUPPRESS_UART_CONFIG
-  uint32_t uartdiv32;
+#ifndef CONFIG_SUPPRESS_UART_CONFIG
+  uint32_t usartdiv32;
   uint32_t mantissa;
   uint32_t fraction;
   uint32_t brr;
@@ -483,7 +483,7 @@ static int up_setup(struct uart_dev_s *dev)
 
   /* Configure hardware flow control -- Not yet supported */
 
-  up_serialout(priv, STM32_USART_CR1_OFFSET, regval);
+  up_serialout(priv, STM32_USART_CR3_OFFSET, regval);
 
   /* Configure the USART Baud Rate.  The baud rate for the receiver and
    * transmitter (Rx and Tx) are both set to the same value as programmed
@@ -521,7 +521,7 @@ static int up_setup(struct uart_dev_s *dev)
   up_serialout(priv, STM32_USART_CR1_OFFSET, regval);
 #endif
 
-  /* Set up the cache interrupt enables value */
+  /* Set up the cached interrupt enables value */
 
   priv->ie    = 0;
   return OK;
diff --git a/configs/stm3210e-eval/README.txt b/configs/stm3210e-eval/README.txt
index 33a04ceaa2a757c29459a4efb05738e621cec5ba..f26dbc5d1d4e07787c061ad9ac3a130746e249e4 100755
--- a/configs/stm3210e-eval/README.txt
+++ b/configs/stm3210e-eval/README.txt
@@ -430,13 +430,13 @@ Where <subdir> is one of the following:
     =========== ======================= ================================
                 nsh                     nsh2
     =========== ======================= ================================
-    Toolchain:  NuttX buildroot for     Codesourcery for Windows*
-                Linux or Cygwin*,**
+    Toolchain:  NuttX buildroot for     Codesourcery for Windows *
+                Linux or Cygwin *,**
     ----------- ----------------------- --------------------------------
     Loader:     DfuSe                   DfuSe
     ----------- ----------------------- --------------------------------
     Serial      Debug output: USART1    Debug output: USART1
-    Console:    NSH output:   USART1    NSH output:   USART2
+    Console:    NSH output:   USART1    NSH output:   USART2 ***
     ----------- ----------------------- --------------------------------
     I2C1        Disabled                Enabled
     =========== ======================= ================================
@@ -445,7 +445,12 @@ Where <subdir> is one of the following:
       to set up the correct PATH variable for whichever toolchain you
       may use.
    ** Since DfuSe is assumed, this configuration may only work under
-      Cygwin.
+      Cygwin without modification.
+  *** When any other device other than /dev/console is used for a user
+      interface, (1) linefeeds (\n) will not be expanded to carriage return
+      / linefeeds \r\n). You will need to configure your terminal program
+      to account for this. And (2) input is not automatically echoed so
+      you will have to turn local echo on.
 
   ostest:
   ------
diff --git a/configs/stm3210e-eval/nsh2/defconfig b/configs/stm3210e-eval/nsh2/defconfig
index 32b40bce92ba08c70bbc221c9624fb37d302e3b9..f91fe10ee87c91d034582ea81a458e5fb818be68 100644
--- a/configs/stm3210e-eval/nsh2/defconfig
+++ b/configs/stm3210e-eval/nsh2/defconfig
@@ -727,7 +727,7 @@ CONFIG_NSH_DISABLESCRIPT=n
 CONFIG_NSH_DISABLEBG=n
 CONFIG_NSH_ROMFSETC=n
 CONFIG_NSH_CONSOLE=y
-#CONFIG_NSH_CONDEV="/dev/ttyS1"
+CONFIG_NSH_CONDEV="/dev/ttyS1"
 CONFIG_NSH_TELNET=n
 CONFIG_NSH_ARCHINIT=y
 CONFIG_NSH_IOBUFFER_SIZE=512