|
Serial communication can be achieved using the Miosix drivers for one of the open USARTs. This page describes how the serial drivers work and how to access them. To communicate on a USART from your PC you will need a USB-TTL driver, or you can do it via the Discovery's USB cable if the feature is enabled in your Discovery board.
|
|
This page describes how the serial drivers work and how to access them. To communicate with a board from your PC you will need a USB-TTL driver, or you can do it via the Discovery's USB cable if the feature is enabled in your Discovery board.
|
|
|
|
|
|
## Default Serial Port
|
|
## Using `stdio.h` (*printf()*, *scanf()*, ...)
|
|
|
|
|
|
When you use functions like *printf()*, *scanf()*, *puts()*, *gets()* etc... inside your code, MIOSIX redirects them to one of the microcontroller's serial ports, called the **default** serial port. This is defined in `miosix/config/arch/<your_arch>/<your_board>/board_settings.h`, along with the default baudrate and other related configurations. The file looks like this:
|
|
When you use functions like *printf()*, *scanf()*, *puts()*, *gets()* etc... inside your code, MIOSIX redirects them to one of the microcontroller's serial ports, called the **default** serial port. This is defined in `miosix/config/arch/<your_arch>/<your_board>/board_settings.h`, along with the default baudrate and other related configurations. The file looks like this:
|
|
|
|
|
... | @@ -14,9 +14,9 @@ const bool defaultSerialFlowctrl=false; //use rts/cts |
... | @@ -14,9 +14,9 @@ const bool defaultSerialFlowctrl=false; //use rts/cts |
|
|
|
|
|
> :warning: **WARNING: printfs are very heavy and can significantly modify the timings if used inside drivers. For this reason, we suggest instead the use of TRACE() throughout the code.**
|
|
> :warning: **WARNING: printfs are very heavy and can significantly modify the timings if used inside drivers. For this reason, we suggest instead the use of TRACE() throughout the code.**
|
|
|
|
|
|
## Open USARTs
|
|
## Using `fnctl.h` (other serial ports)
|
|
|
|
|
|
A part from the default serial port, MIOSIX offers access to up to 3 USARTs in STM32 microcontrollers. In `arch/common/drivers/serial_stm32.cpp` you can find the 3 Usarts that Miosix lets you use. Here is the pinout:
|
|
A part from the default serial port, Miosix offers access to up to 3 USARTs in STM32 microcontrollers. In `arch/common/drivers/serial_stm32.cpp` you can find the 3 USARTs enabled by default. Here is the pinout:
|
|
|
|
|
|
| USART | TX | RX | CTS | RTS | STM32F429zi | STM32F407vg |
|
|
| USART | TX | RX | CTS | RTS | STM32F429zi | STM32F407vg |
|
|
|--------|------|-----|------|-------|-------------|-------------|
|
|
|--------|------|-----|------|-------|-------------|-------------|
|
... | @@ -24,10 +24,7 @@ A part from the default serial port, MIOSIX offers access to up to 3 USARTs in S |
... | @@ -24,10 +24,7 @@ A part from the default serial port, MIOSIX offers access to up to 3 USARTs in S |
|
| 2 | PA2 | PA3 | PA0 | PA1 | | |
|
|
| 2 | PA2 | PA3 | PA0 | PA1 | | |
|
|
| 3 | PB10 | PB11 | PB13 | PB14 | | default |
|
|
| 3 | PB10 | PB11 | PB13 | PB14 | | default |
|
|
|
|
|
|
|
|
Miosix gives the possibility to access these USART ports through Unix-like [device files](https://en.wikipedia.org/wiki/Device_file). In particular, to access a particular USART of your microcontroller (e.g. USART2) you should modify the *bspInit2()* method
|
|
## Other Serial ports
|
|
|
|
|
|
|
|
Miosix gives the possibility to access other serial ports through Unix-like [device files](https://en.wikipedia.org/wiki/Device_file). In particular, to access a particular USART of your microcontroller (e.g. USART2) you should modify the *bspInit2()* method
|
|
|
|
inside `miosix/arch/<your arch>/<your board>/interfaces-impl/bsp.cpp` as follows:
|
|
inside `miosix/arch/<your arch>/<your board>/interfaces-impl/bsp.cpp` as follows:
|
|
|
|
|
|
```cpp
|
|
```cpp
|
... | @@ -61,16 +58,7 @@ write(fd, buffer, 10); //Write 10 chars |
... | @@ -61,16 +58,7 @@ write(fd, buffer, 10); //Write 10 chars |
|
```
|
|
```
|
|
Pay attention to the baudrate at which the used port is set!
|
|
Pay attention to the baudrate at which the used port is set!
|
|
|
|
|
|
## Auxtty USART Configuration (STM32F407VG only)
|
|
## Reading/Writing from a PC
|
|
For the *f407vg* board, there's also another serial port, called **auxtty**: you need to remove the comment from the `board_settings.h` in order to use it:
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
//#define AUX_SERIAL "auxtty" UNCOMMENT THIS TO OPEN THE SERIAL
|
|
|
|
const unsigned int auxSerialSpeed=9600;
|
|
|
|
const bool auxSerialFlowctrl=false;
|
|
|
|
```
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
Once your USB-TTL dongle is attached to the PC, you will need to connect the RX and TX of the dongle to the TX and RX of the decided serial port in your Discovery (**ATTENTION:** RX discovery<-->TX usb dongle and vice-versa).
|
|
Once your USB-TTL dongle is attached to the PC, you will need to connect the RX and TX of the dongle to the TX and RX of the decided serial port in your Discovery (**ATTENTION:** RX discovery<-->TX usb dongle and vice-versa).
|
|
|
|
|
... | @@ -80,3 +68,14 @@ Then you can open a communication using: |
... | @@ -80,3 +68,14 @@ Then you can open a communication using: |
|
- **GTKTerm** on Linux: *Configuration* > *Port* > `/dev/ttyUSB0` and select baudrate (19200 for the default serial). You can also use `screen` or `minicom`.
|
|
- **GTKTerm** on Linux: *Configuration* > *Port* > `/dev/ttyUSB0` and select baudrate (19200 for the default serial). You can also use `screen` or `minicom`.
|
|
|
|
|
|
In both cases, you will need to set the correct port and baudrate, and you may need install some drivers for the USB dongle to make things work.
|
|
In both cases, you will need to set the correct port and baudrate, and you may need install some drivers for the USB dongle to make things work.
|
|
|
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
### Auxtty USART (STM32F407VG only)
|
|
|
|
For the *f407vg* board, there's also another serial port, called **auxtty**: you need to remove the comment from the `board_settings.h` in order to use it:
|
|
|
|
|
|
|
|
```cpp
|
|
|
|
//#define AUX_SERIAL "auxtty" UNCOMMENT THIS TO OPEN THE SERIAL
|
|
|
|
const unsigned int auxSerialSpeed=9600;
|
|
|
|
const bool auxSerialFlowctrl=false;
|
|
|
|
``` |
|
|
|
\ No newline at end of file |