【MSPM0G3507 系列】printf多串口重定向
引言
这里带来MSPM0G3507的多串口重定向,与STM32的类似。
syscfg配置

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

点击查看代码
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定向程序

点击查看代码
#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;
}
博客导航
本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/Skyrim-sssuuu/p/18895300

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号 https://orcid.org/0000-0001-5102-772X
        https://orcid.org/0000-0001-5102-772X