From 6711b31da87a6e241c64acaf726546b971f92aa5 Mon Sep 17 00:00:00 2001
From: Paul Gomes
Date: Fri, 10 Nov 2017 19:52:56 -0800
Subject: [PATCH 001/313] revisions to section 12.3 AT commands
---
src/12-bluetooth-setup/at-commands.md | 40 +++++++++++++++++----------
1 file changed, 25 insertions(+), 15 deletions(-)
diff --git a/src/12-bluetooth-setup/at-commands.md b/src/12-bluetooth-setup/at-commands.md
index 159ffca40..e492530f5 100644
--- a/src/12-bluetooth-setup/at-commands.md
+++ b/src/12-bluetooth-setup/at-commands.md
@@ -1,43 +1,53 @@
## AT commands
-> **NOTE** incomplete
+The Bluetooth module and the F3 need to be configured to communicate at the same baud rate. The tutorial code initializes the UART1 serial device to a baud rate of 115200. The HC-05 Bluetooth module is configured at a baud rate of 9600 by default.
+
+The Bluetooth module supports an AT mode that allows you to examine and change its configuration and settings. To utilize the AT mode, connect the Bluetooth module to the F3 and FTDI as shown in the following diagram.
-Entering AT mode:
-
-- Power off the Bluetooth module
-- Press and hold the button on the Bluetooth module
-- Power on the Bluetooth module
-- Now, release the button
+Recommended steps to enter AT mode:
-> **TODO** blinking pattern
+- Disconnect the F3 and FTDI from your laptop.
+- Connect F3's GND pin to the Bluetooth's GND pin using a Female/Female (F/F) wire
+ (preferably, a black one).
+- Connect F3's 5V pin to the Bluetooth's VCC pin using a F/F wire (preferably, a
+ red one).
+- Connect the FTDI RXI pin to the Bluetooth's TXD pin using a Female/Male (F/M) wire.
+- Connect the FTDI TXO pin to the Bluetooth's RXD pin using a Female/Male (F/M) wire.
+- Now connect the FTDI to your laptop via USB cable.
+- Next connect the F3 to your laptop via USB cable while simultaneously pressing and holding the button on the Bluetooth module (kinda tricky).
+- Now, release the button and the Bluetooth module will enter AT mode. You can confirm this by observing that the red LED on the Bluetooth module is blinking in a slow pattern (approx 1-2 seconds on/off).
-The AT mode always operates at a baud rate of 38,400.
+The AT mode always operates at a baud rate of 38400, so configure minicom/putty for that baud rate and connect to the FTDI device.
-Commands (via minicom)
+When your serial connection to the FTDI is established, you may get a bunch of `ERROR: (0)` repeatedly being displayed. If this happens, just hit ENTER to stop the errors.
-- Sanity check
+### Sanity check
```
$ at
OK
OK
-(..)
+(etc...)
```
Answers `OK` repeatedly until you hit ENTER again.
-- Rename
+### Query for the current baud rate of the Bluetooth module
```
-$ at+name=ferris
+at+uart?
++UART:9600,0,0
+OK
++UART:9600,0,0
OK
+(etc ...)
```
-- Change the baud rate
+### Change the baud rate
```
$ at+uart=115200,0,0
From 9df1cddfd3c4a7c87f3183958b5207763b017dd8 Mon Sep 17 00:00:00 2001
From: Paul Gomes
Date: Fri, 10 Nov 2017 20:01:33 -0800
Subject: [PATCH 002/313] another minor revision
---
src/12-bluetooth-setup/at-commands.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/12-bluetooth-setup/at-commands.md b/src/12-bluetooth-setup/at-commands.md
index e492530f5..c2635f143 100644
--- a/src/12-bluetooth-setup/at-commands.md
+++ b/src/12-bluetooth-setup/at-commands.md
@@ -23,7 +23,7 @@ Recommended steps to enter AT mode:
The AT mode always operates at a baud rate of 38400, so configure minicom/putty for that baud rate and connect to the FTDI device.
-When your serial connection to the FTDI is established, you may get a bunch of `ERROR: (0)` repeatedly being displayed. If this happens, just hit ENTER to stop the errors.
+When your serial connection is established, you may get a bunch of `ERROR: (0)` repeatedly being displayed. If this happens, just hit ENTER to stop the errors.
### Sanity check
From c66f73e4e68d0f230657f6430f9ac693c61960cf Mon Sep 17 00:00:00 2001
From: Jorge Aparicio
Date: Tue, 27 Nov 2018 10:45:51 +0100
Subject: [PATCH 003/313] 11-usart: switch TX / RX pins from PA{9,10} to
PC{4,5}
---
src/11-usart/auxiliary/src/lib.rs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/11-usart/auxiliary/src/lib.rs b/src/11-usart/auxiliary/src/lib.rs
index 1a0a6a16c..1edc84276 100644
--- a/src/11-usart/auxiliary/src/lib.rs
+++ b/src/11-usart/auxiliary/src/lib.rs
@@ -23,10 +23,10 @@ pub fn init() -> (&'static mut usart1::RegisterBlock, MonoTimer, ITM) {
let clocks = rcc.cfgr.freeze(&mut flash.acr);
- let mut gpioa = dp.GPIOA.split(&mut rcc.ahb);
+ let mut gpioc = dp.GPIOC.split(&mut rcc.ahb);
- let tx = gpioa.pa9.into_af7(&mut gpioa.moder, &mut gpioa.afrh);
- let rx = gpioa.pa10.into_af7(&mut gpioa.moder, &mut gpioa.afrh);
+ let tx = gpioc.pc4.into_af7(&mut gpioc.moder, &mut gpioc.afrl);
+ let rx = gpioc.pc5.into_af7(&mut gpioc.moder, &mut gpioc.afrl);
Serial::usart1(dp.USART1, (tx, rx), 115_200.bps(), clocks, &mut rcc.apb2);
From 8c31c3a354e46eb253a807c491ae4d83a5b31478 Mon Sep 17 00:00:00 2001
From: Jorge Aparicio
Date: Tue, 27 Nov 2018 12:37:38 +0100
Subject: [PATCH 004/313] recommend using Virtual COM instead of an external
USB <-> Serial module
this keeps the text about using the Serial module
closes #76
---
src/02-requirements/README.md | 15 +++++---
src/04-meet-your-hardware/README.md | 9 ++++-
src/10-serial-communication/loopbacks.md | 21 ++++++++++
src/10-serial-communication/nix-tooling.md | 36 ++++++++++++++----
.../windows-tooling.md | 15 ++++++--
src/11-usart/Cargo.toml | 6 ++-
src/11-usart/README.md | 21 ++++++++++
src/11-usart/auxiliary/Cargo.toml | 3 ++
src/11-usart/auxiliary/src/lib.rs | 24 ++++++++++--
src/assets/minicom.png | Bin 32270 -> 22340 bytes
10 files changed, 126 insertions(+), 24 deletions(-)
diff --git a/src/02-requirements/README.md b/src/02-requirements/README.md
index 7eba4a082..6bca9a37a 100644
--- a/src/02-requirements/README.md
+++ b/src/02-requirements/README.md
@@ -28,14 +28,17 @@ Also, to follow this material you'll need the following hardware:
-- OPTIONAL. A **3.3V** USB <-> Serial module. [This particular model][sparkfun] will be used
- throughout this material but you can use any other model as long as it operates at 3.3V.
+- OPTIONAL. A **3.3V** USB <-> Serial module. To elaborate: if you have one of
+ the latest revisions of the discovery board (which is usually the case given
+ the first revision was released years old) then you do *not* need this module
+ because the board includes this functionality on-board. If you have an older
+ revision of the board then you'll need this module for chapters 10 and 11. For
+ completeness, we'll include instructions for using a Serial module. The book
+ will use [this particular model][sparkfun] but you can use any other model as
+ long as it operates at 3.3V. The (Chinese) CH340G module, which you can buy
+ [e-commerce][4] sites, works too and it's probably cheaper for you to get.
[sparkfun]: https://www.sparkfun.com/products/9873
-
-(The (Chinese) CH340G module, which you can buy [e-commerce][4] sites, works too and it's probably
-cheaper for you to get)
-
[4]: https://www.aliexpress.com/wholesale?SearchText=CH340G
diff --git a/src/04-meet-your-hardware/README.md b/src/04-meet-your-hardware/README.md
index 4d8f89098..7bcb511bc 100644
--- a/src/04-meet-your-hardware/README.md
+++ b/src/04-meet-your-hardware/README.md
@@ -49,8 +49,13 @@ What does this board contain?
-We'll use this module to exchange data between the microcontroller in the F3 and your laptop. This
-module will be connected to your laptop using an USB cable. I won't say more at this point.
+If you have an older revision of the discovery board, you can use this module to
+exchange data between the microcontroller in the F3 and your laptop. This module
+will be connected to your laptop using an USB cable. I won't say more at this
+point.
+
+If you have a newer release of the board then you don't need this module. The
+ST-LINK will act as a serial module connected to pins PC4 and PC5.
## The Bluetooth module
diff --git a/src/10-serial-communication/loopbacks.md b/src/10-serial-communication/loopbacks.md
index 6035d328d..3aa5520e5 100644
--- a/src/10-serial-communication/loopbacks.md
+++ b/src/10-serial-communication/loopbacks.md
@@ -11,6 +11,8 @@ Enter: loopbacks
You can send data to yourself! Not very useful in production but very useful for debugging.
+## Older board revision / external serial module
+
Connect the `TXO` and the `RXI` pins of the serial module together using a male to male jumper wire
as shown above.
@@ -24,5 +26,24 @@ You should see three things:
- Finally, on the minicom/PuTTY console, you should see that what you type echoes back to the
console.
+## Newer board revision
+
+If you have a newer revision of the board you can set up a loopback by shorting
+the PC4 and PC5 pins using a female to female jumper wire, like [you did for the
+SWO pin](../06-hello-world/index.html).
+
+You should now be able to send data to yourself.
+
+Now try to enter some text into minicom/PuTTY and observe.
+
+> **NOTE**: To rule out the possibility of the existing firmware doing weird
+> things to the serial pins (PC4 and PC5) we recommend *holding* the reset
+> button while you enter text into minicom/PuTTY.
+
+If all is working you should see what you typo echo back to the minicom/PuTTY
+console.
+
+---
+
Now that you are familiar with sending and receiving data over serial port using minicom/PuTTY,
let's make your microcontroller and your laptop talk!
diff --git a/src/10-serial-communication/nix-tooling.md b/src/10-serial-communication/nix-tooling.md
index 1e89d0d7f..e68a73b9c 100644
--- a/src/10-serial-communication/nix-tooling.md
+++ b/src/10-serial-communication/nix-tooling.md
@@ -1,5 +1,25 @@
# *nix tooling
+## Newer revisions of the discovery board
+
+With newer revisions, if you connect the discovery board to your laptop / PC you
+should see a new TTY device appear in `/dev`.
+
+``` console
+$ # Linux
+$ dmesg | tail | grep -i tty
+[13560.675310] cdc_acm 1-1.1:1.2: ttyACM0: USB ACM device
+```
+
+This is the USB <-> Serial device. On Linux, it's named `ttyACM*`.
+
+If you don't see the device appear then you probably have an older revision of
+the board; check the next section, which contains instructions for older
+revisions. If you do have a newer revision skip the next section and move to the
+"minicom" section.
+
+## Older revisions of the discovery board / external serial module
+
Connect the serial module to your laptop and let's find out what name the OS assigned to it.
``` console
@@ -26,7 +46,7 @@ $ echo 'Hello, world!' > /dev/ttyUSB0
You should see the TX (red) LED on the serial module blink, just once and very fast!
-## minicom
+## All revisions: minicom
Dealing with serial devices using `echo` is far from ergonomic. So, we'll use the program `minicom`
to interact with the serial device using the keyboard.
@@ -60,18 +80,20 @@ go over it line by line:
Once that's in place. We can launch `minicom`
``` console
-$ minicom -D /dev/ttyUSB0 -b 115200
+$ # NOTE you may need to use a different device here
+$ minicom -D /dev/ttyACM0 -b 115200
```
-This tells `minicom` to open the serial device at `/dev/ttyUSB0` and set its baud rate to 115200.
-A text-based user interface (TUI) will pop out.
+This tells `minicom` to open the serial device at `/dev/ttyACM0` and set its
+baud rate to 115200. A text-based user interface (TUI) will pop out.
-
+
-You can now send data using the keyboard! Go ahead and type something. Note that the TUI *won't*
-echo back what you type but you'll see TX (red) LED on the serial module blink with each keystroke.
+You can now send data using the keyboard! Go ahead and type something. Note that
+the TUI will *not* echo back what you type but, if you are using an external
+module, you *may* see some LED on the module blink with each keystroke.
## `minicom` commands
diff --git a/src/10-serial-communication/windows-tooling.md b/src/10-serial-communication/windows-tooling.md
index ea8f1d803..cdd5e87b0 100644
--- a/src/10-serial-communication/windows-tooling.md
+++ b/src/10-serial-communication/windows-tooling.md
@@ -1,6 +1,9 @@
# Windows tooling
-Before plugging the Serial module, run the following command on the terminal:
+Start by unplugging your discovery board.
+
+Before plugging the discover or the Serial module, run the following command on
+the terminal:
``` console
$ mode
@@ -10,8 +13,14 @@ It will print a list of devices that are connected to your laptop. The ones that
their names are serial devices. This is the kind of device we'll be working with. Take note of all
the `COM` *ports* `mode` outputs *before* plugging the serial module.
-Now, plug the Serial module and run the `mode` command again. You should see a new `COM` port appear
-on the list. That's the COM port assigned to the serial module.
+Now, plug the discovery board and run the `mode` command again. If you see a new
+`COM` port appear on the list then you have a newer revision of the discovery
+and that's the COM port assigned to the serial functionality on the discovery.
+You can skip the next paragraph.
+
+If you didn't get a new COM port then you probably have an older revision of the
+discovery. Now plug the serial module; you should see new COM port appear;
+that's the COM port of the serial module.
Now launch `putty`. A GUI will pop out.
diff --git a/src/11-usart/Cargo.toml b/src/11-usart/Cargo.toml
index 17502c46b..a0ca5419a 100644
--- a/src/11-usart/Cargo.toml
+++ b/src/11-usart/Cargo.toml
@@ -4,8 +4,10 @@ edition = "2018"
name = "usart"
version = "0.1.0"
-[dependencies]
-aux11 = { path = "auxiliary" }
+[dependencies.aux11]
+path = "auxiliary"
+# enable this if you are going to use an external adapter
+# features = ["adapter"]
[dependencies.heapless]
default-features = false
diff --git a/src/11-usart/README.md b/src/11-usart/README.md
index ab78e7a1c..30507e1a7 100644
--- a/src/11-usart/README.md
+++ b/src/11-usart/README.md
@@ -12,6 +12,27 @@ and RX stands for receiver. Transmitter and receiver are relative terms though;
transmitter and which line is the receiver depends from which side of the communication you are
looking at the lines.
+### Newer board revisions
+
+If you have a newer revision of the board and are using the on-board USB <->
+Serial functionality then the `auxiliary` crate will set pin `PC4` as the TX
+line and pin `PC5` as the RX line.
+
+Everything is already wired on the board so you don't to wire anything yourself.
+You can move on to the [next section](send-a-single-byte.html).
+
+### Older board revisions / external serial module
+
+If you are using an external USB <-> Serial module then you will **need** to
+enable the `adapter` feature of the `aux11` crate dependency in `Cargo.toml`.
+
+``` toml
+[dependencies.aux11]
+path = "auxiliary"
+# enable this if you are going to use an external adapter
+features = ["adapter"] # <- uncomment this
+```
+
We'll be using the pin `PA9` as the microcontroller's TX line and `PA10` as its RX line. In other
words, the pin `PA9` outputs data onto its wire whereas the pin `PA10` listens for data on its
wire.
diff --git a/src/11-usart/auxiliary/Cargo.toml b/src/11-usart/auxiliary/Cargo.toml
index 8d15d81ee..252253981 100644
--- a/src/11-usart/auxiliary/Cargo.toml
+++ b/src/11-usart/auxiliary/Cargo.toml
@@ -12,3 +12,6 @@ panic-itm = "0.4.0"
[dependencies.f3]
features = ["rt"]
version = "0.6.1"
+
+[features]
+adapter = []
\ No newline at end of file
diff --git a/src/11-usart/auxiliary/src/lib.rs b/src/11-usart/auxiliary/src/lib.rs
index 1edc84276..956835f2e 100644
--- a/src/11-usart/auxiliary/src/lib.rs
+++ b/src/11-usart/auxiliary/src/lib.rs
@@ -23,10 +23,26 @@ pub fn init() -> (&'static mut usart1::RegisterBlock, MonoTimer, ITM) {
let clocks = rcc.cfgr.freeze(&mut flash.acr);
- let mut gpioc = dp.GPIOC.split(&mut rcc.ahb);
-
- let tx = gpioc.pc4.into_af7(&mut gpioc.moder, &mut gpioc.afrl);
- let rx = gpioc.pc5.into_af7(&mut gpioc.moder, &mut gpioc.afrl);
+ let (tx, rx) = match () {
+ #[cfg(feature = "adapter")]
+ () => {
+ let mut gpioa = dp.GPIOA.split(&mut rcc.ahb);
+
+ let tx = gpioa.pa9.into_af7(&mut gpioa.moder, &mut gpioa.afrh);
+ let rx = gpioa.pa10.into_af7(&mut gpioa.moder, &mut gpioa.afrh);
+
+ (tx, rx)
+ }
+ #[cfg(not(feature = "adapter"))]
+ () => {
+ let mut gpioc = dp.GPIOC.split(&mut rcc.ahb);
+
+ let tx = gpioc.pc4.into_af7(&mut gpioc.moder, &mut gpioc.afrl);
+ let rx = gpioc.pc5.into_af7(&mut gpioc.moder, &mut gpioc.afrl);
+
+ (tx, rx)
+ }
+ };
Serial::usart1(dp.USART1, (tx, rx), 115_200.bps(), clocks, &mut rcc.apb2);
diff --git a/src/assets/minicom.png b/src/assets/minicom.png
index 6605d5ed68e85e8e7f522c11d71b11ac8e83d935..598305b7a261550fb5886376665c5f1629a7969e 100644
GIT binary patch
literal 22340
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
literal 32270
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