Skip to content

Commit 3d719f7

Browse files
committed
K64F, NUCLEO_F429ZI: Use explicit pinmap for console
1 parent bef6854 commit 3d719f7

File tree

3 files changed

+49
-10
lines changed
  • platform/source
  • targets
    • TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_MCU_K64F/TARGET_FRDM
    • TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI

3 files changed

+49
-10
lines changed

platform/source/mbed_retarget.cpp

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "drivers/UARTSerial.h"
3434
#include "hal/us_ticker_api.h"
3535
#include "hal/lp_ticker_api.h"
36+
#include "hal/explicit_pinmap.h"
3637
#include <stdlib.h>
3738
#include <string.h>
3839
#include <limits.h>
@@ -154,6 +155,7 @@ extern serial_t stdio_uart;
154155
class DirectSerial : public FileHandle {
155156
public:
156157
DirectSerial(PinName tx, PinName rx, int baud);
158+
DirectSerial(const serial_pinmap_t &explicit_pinmap, int baud);
157159
virtual ssize_t write(const void *buffer, size_t size);
158160
virtual ssize_t read(void *buffer, size_t size);
159161
virtual off_t seek(off_t offset, int whence = SEEK_SET)
@@ -180,14 +182,39 @@ DirectSerial::DirectSerial(PinName tx, PinName rx, int baud)
180182
if (stdio_uart_inited) {
181183
return;
182184
}
183-
serial_init(&stdio_uart, tx, rx);
185+
static const serial_pinmap_t console_pinmap = get_uart_pinmap(STDIO_UART_TX, STDIO_UART_RX);
186+
serial_init_direct(&stdio_uart, &console_pinmap);
184187
serial_baud(&stdio_uart, baud);
188+
185189
#if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
186-
serial_set_flow_control(&stdio_uart, FlowControlRTS, STDIO_UART_RTS, NC);
190+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(STDIO_UART_RTS, NC);
191+
serial_set_flow_control_direct(&stdio_uart, FlowControlRTS, fc_pinmap);
187192
#elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
188-
serial_set_flow_control(&stdio_uart, FlowControlCTS, NC, STDIO_UART_CTS);
193+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(NC, STDIO_UART_CTS);
194+
serial_set_flow_control_direct(&stdio_uart, FlowControlCTS, fc_pinmap);
189195
#elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
190-
serial_set_flow_control(&stdio_uart, FlowControlRTSCTS, STDIO_UART_RTS, STDIO_UART_CTS);
196+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(STDIO_UART_RTS, STDIO_UART_CTS);
197+
serial_set_flow_control_direct(&stdio_uart, FlowControlRTSCTS, fc_pinmap);
198+
#endif
199+
}
200+
201+
DirectSerial::DirectSerial(const serial_pinmap_t &explicit_pinmap, int baud)
202+
{
203+
if (stdio_uart_inited) {
204+
return;
205+
}
206+
serial_init_direct(&stdio_uart, &explicit_pinmap);
207+
serial_baud(&stdio_uart, baud);
208+
209+
#if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
210+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(STDIO_UART_RTS, NC);
211+
serial_set_flow_control_direct(&stdio_uart, FlowControlRTS, fc_pinmap);
212+
#elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
213+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(NC, STDIO_UART_CTS);
214+
serial_set_flow_control_direct(&stdio_uart, FlowControlCTS, fc_pinmap);
215+
#elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
216+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(STDIO_UART_RTS, STDIO_UART_CTS);
217+
serial_set_flow_control_direct(&stdio_uart, FlowControlRTSCTS, fc_pinmap);
191218
#endif
192219
}
193220

@@ -303,17 +330,23 @@ MBED_WEAK FileHandle *mbed::mbed_override_console(int fd)
303330
static FileHandle *default_console()
304331
{
305332
#if MBED_CONF_TARGET_CONSOLE_UART && DEVICE_SERIAL
333+
306334
# if MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL
307-
static UARTSerial console(STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
335+
static const serial_pinmap_t console_pinmap = get_uart_pinmap(STDIO_UART_TX, STDIO_UART_RX);
336+
static UARTSerial console(console_pinmap, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
308337
# if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
309-
console.set_flow_control(SerialBase::RTS, STDIO_UART_RTS, NC);
338+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(STDIO_UART_RTS, NC);
339+
console.serial_set_flow_control(SerialBase::RTS, fc_pinmap);
310340
# elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
311-
console.set_flow_control(SerialBase::CTS, NC, STDIO_UART_CTS);
341+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(NC, STDIO_UART_CTS);
342+
console.serial_set_flow_control(SerialBase::CTS, fc_pinmap);
312343
# elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
313-
console.set_flow_control(SerialBase::RTSCTS, STDIO_UART_RTS, STDIO_UART_CTS);
344+
static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap(STDIO_UART_RTS, STDIO_UART_CTS);
345+
console.serial_set_flow_control(SerialBase::RTSCTS, fc_pinmap);
314346
# endif
315347
# else
316-
static DirectSerial console(STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
348+
static const serial_pinmap_t console_pinmap = get_uart_pinmap(STDIO_UART_TX, STDIO_UART_RX);
349+
static DirectSerial console(console_pinmap, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
317350
# endif
318351
#else // MBED_CONF_TARGET_CONSOLE_UART && DEVICE_SERIAL
319352
static Sink console;

targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/TARGET_MCU_K64F/TARGET_FRDM/PinNames.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
extern "C" {
2323
#endif
2424

25+
/* If this macro is defined, then constexpr utility functions for pin-map seach can be used. */
26+
#define EXPLICIT_PINMAP_READY 1
27+
2528
typedef enum {
2629
PIN_INPUT,
2730
PIN_OUTPUT
@@ -229,7 +232,7 @@ typedef enum {
229232
D13 = PTD1,
230233
D14 = PTE25,
231234
D15 = PTE24,
232-
235+
233236
I2C_SCL = D15,
234237
I2C_SDA = D14,
235238

targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F429xI/TARGET_NUCLEO_F429ZI/PinNames.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
extern "C" {
3939
#endif
4040

41+
/* If this macro is defined, then constexpr utility functions for pin-map seach can be used. */
42+
#define EXPLICIT_PINMAP_READY 1
43+
4144
typedef enum {
4245
ALT0 = 0x100,
4346
ALT1 = 0x200,

0 commit comments

Comments
 (0)