【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;
}
博客導航
本文來自博客園,作者:膝蓋中箭衛兵,轉載請注明原文鏈接:http://www.rzrgm.cn/Skyrim-sssuuu/p/18895300

浙公網安備 33010602011771號
https://orcid.org/0000-0001-5102-772X