【MSPM0G3507 系列】printf多串口重定向

引言

这里带来MSPM0G3507的多串口重定向,与STM32的类似。

syscfg配置

image

引脚配置注意

推荐引脚配置:(建议按照推荐的来配置,一开始测试的时候某些引脚例如PA21复用了其他功能,不能正常使用)
UART0 ———— Tx PA11 / Rx PA10(方便使用USB先直接进行串口调试)
UART1 ———— Tx PA18 / Rx PA17
UART2 ———— Tx PB16 / Rx PB17
UART3 ———— Tx PA13 / Rx PA14

printf重定义程序

image

点击查看代码
int fputc(int c, FILE* stream) {
    DL_UART_Main_transmitDataBlocking(current_uart, c);
    return c;
}

int fputs(const char* restrict s, FILE* restrict stream) {
    uint16_t i, len;
    len = strlen(s);
    for (i = 0; i < len; i ++) {
        DL_UART_Main_transmitDataBlocking(current_uart, s[i]);
    }
    return len;
}

int puts(const char* _ptr) {
    int count = fputs(_ptr, stdout);
    count += fputs("\n", stdout);
    return count;
}

多串口printf定向程序

image

点击查看代码
#define UART0_IDX 1
#define UART1_IDX 2
#define UART2_IDX 3
#define UART3_IDX 4

static UART_Regs *current_uart;

void Set_CurrentUART(uint8_t UART_type) {
    switch (UART_type) {
        case UART0_IDX:
            current_uart = UART_0_INST;
        break;
        case UART1_IDX:
            current_uart = UART_1_INST;
        break;
        case UART2_IDX:
            current_uart = UART_2_INST;
        break;
        case UART3_IDX:
            current_uart = UART_3_INST;
        break;
        default:
        break;
    }
}

工程测试代码(全)

点击查看代码

#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "string.h"

#define UART0_IDX 1
#define UART1_IDX 2
#define UART2_IDX 3
#define UART3_IDX 4

static UART_Regs *current_uart;

void Set_CurrentUART(uint8_t UART_type);

int main(void)
{
    SYSCFG_DL_init();

    while (1) {
            Set_CurrentUART(UART0_IDX);
            printf("串口零打印成功,数字:%f\r\n", 0.1415926);
            Set_CurrentUART(UART1_IDX);
            printf("串口一打印成功,数字:%f\r\n", 1.1415926);
            Set_CurrentUART(UART2_IDX);
            printf("串口二打印成功,数字:%f\r\n", 2.1415926);
            Set_CurrentUART(UART3_IDX);
            printf("串口三打印成功,数字:%f\r\n", 3.1415926);
    }
}

void Set_CurrentUART(uint8_t UART_type) {
    switch (UART_type) {
        case UART0_IDX:
            current_uart = UART_0_INST;
        break;
        case UART1_IDX:
            current_uart = UART_1_INST;
        break;
        case UART2_IDX:
            current_uart = UART_2_INST;
        break;
        case UART3_IDX:
            current_uart = UART_3_INST;
        break;
        default:
        break;
    }
}

int fputc(int c, FILE* stream) {
    DL_UART_Main_transmitDataBlocking(current_uart, c);
    return c;
}

int fputs(const char* restrict s, FILE* restrict stream) {
    uint16_t i, len;
    len = strlen(s);
    for (i = 0; i < len; i ++) {
        DL_UART_Main_transmitDataBlocking(current_uart, s[i]);
    }
    return len;
}

int puts(const char* _ptr) {
    int count = fputs(_ptr, stdout);
    count += fputs("\n", stdout);
    return count;
}



博客导航

博客导航

posted @ 2025-05-25 13:17  膝盖中箭卫兵  阅读(472)  评论(0)    收藏  举报
ORCID iD icon https://orcid.org/0000-0001-5102-772X