LAUNCHXL-F28379D: 通过SCI串口与 串口工具 通信,串口工具显示 乱码,设置 串口工具 编码格式为UFT-8 没有效果

Part Number: LAUNCHXL-F28379D


1、串口工具显示sci发送的字符串乱码(使用 43、42引脚作为接收、发送引脚),串口调试设定为9600 波特率、无校验、8位数据、1位停止位。

2、进行串口通讯测试时,由串口工具发送给 F28379D ,无法正常接收,每次,接收获取到的接收状态均为2。

以上俩问题,困扰我好几天了,麻烦帮我解决一下,谢谢!!
下面附 我的 代码:

//#############################################################################
//
// FILE: sci_simple_echo.c
//
// TITLE: Simple SCI communication with LED control for F28379D
//
//#############################################################################

#include "driverlib.h"
#include "device.h"
#include <string.h>

// 定义LED引脚(D10对应GPIO10)
#define LED_PIN  DEVICE_GPIO_PIN_LED1

// 全局变量
char rxBuffer[10];
uint16_t rxIndex = 0;

// 函数声明
void initLED(void);
void blinkLED(uint16_t times);
void delayMs(uint16_t ms);

void main(void)
{
    uint16_t receivedChar;
    char *msg;

    // 初始化设备:PLL、禁用看门狗、使能外设时钟
    Device_init();
    // 初始化GPIO(禁用引脚锁定、使能内部上拉)
    Device_initGPIO();

    // 初始化LED
    initLED();

    // 配置SCI接收引脚(SCIRXDA = GPIO43)
    GPIO_setMasterCore(43, GPIO_CORE_CPU1);
    GPIO_setPinConfig(GPIO_43_SCIRXDA);
    GPIO_setDirectionMode(43, GPIO_DIR_MODE_IN);
    GPIO_setPadConfig(43, GPIO_PIN_TYPE_STD |GPIO_PIN_TYPE_PULLUP);
    GPIO_setQualificationMode(43, GPIO_QUAL_ASYNC);

    // 配置SCI发送引脚(SCITXDA = GPIO42)
    GPIO_setMasterCore(42, GPIO_CORE_CPU1);
    GPIO_setPinConfig(GPIO_42_SCITXDA);
    GPIO_setDirectionMode(42, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(42, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(42, GPIO_QUAL_ASYNC);

    // Initialize interrupt controller and vector table.
    //
    Interrupt_initModule();
    Interrupt_initVectorTable();

    // 初始化SCI模块(禁用FIFO)
    SCI_performSoftwareReset(SCIA_BASE);
    SCI_setConfig(SCIA_BASE, 50000000, 9600,
                 (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE ));
    SCI_resetChannels(SCIA_BASE);
    SCI_disableFIFO(SCIA_BASE);  // 禁用FIFO
    SCI_enableModule(SCIA_BASE);
    // SCI_setIdleMultiProcessorMode(SCIA_BASE);


    #ifdef AUTOBAUD
    //
    // Perform an autobaud lock.
    // SCI expects an 'a' or 'A' to lock the baud rate.
    //
        SCI_lockAutobaud(SCIA_BASE);
    #endif

    // 发送初始消息和"300"(满足发送需求)
    msg = "\r\nF28379D SCI Test Ready\r\n";
    while(*msg != '\0')
    {
        SCI_writeCharBlockingNonFIFO(SCIA_BASE, *msg++);
    }
    msg = "300\r\n";  // 发送"300"到串口助手
    while(*msg != '\0')
    {
        SCI_writeCharBlockingNonFIFO(SCIA_BASE, *msg++);
    }

    // 初始化接收缓冲区
    memset(rxBuffer, 0, sizeof(rxBuffer));
    rxIndex = 0;

    uint16_t rxStatus = 0U;

    for(;;)
    {
        rxStatus = SCI_getRxStatus(SCIA_BASE);

        if((rxStatus & SCI_RXSTATUS_ERROR) != 0)
        {
            ESTOP0;
        }
        // 检查是否有接收数据
       if((rxStatus & SCI_RXSTATUS_READY) != 0)
        {
            receivedChar = SCI_readCharNonBlocking(SCIA_BASE);  // 读取字符
            // SCI_writeCharBlockingNonFIFO(SCIA_BASE, receivedChar);  // 可选:关闭回显
            // 读取后立即获取状态,验证RXWAKE是否清除
            uint16_t postStatus = SCI_getRxStatus(SCIA_BASE);
            // 存储字符到缓冲区(限制长度)
            if(rxIndex < (sizeof(rxBuffer) - 1))
            {
                rxBuffer[rxIndex++] = (char)receivedChar;

              //串口助手发送时 自动 添加 \r\n 换行符
               if((receivedChar == '\r') || (receivedChar == '\n') ||
                   (rxIndex >= (sizeof(rxBuffer) - 1)))
                {
                    rxBuffer[rxIndex] = '\0';  // 字符串终止符
                    if(strncmp(rxBuffer, "ok", 2) == 0)
                    {
                        // 发送确认消息
                        msg = "\r\nReceived 'ok' - Blinking LED 3 times\r\n";
                        while(*msg != '\0')
                        {
                            SCI_writeCharBlockingNonFIFO(SCIA_BASE, *msg++);
                        }
                        // 闪烁LED 3次
                        blinkLED(3);
                        // 发送完成消息
                        msg = "Operation completed\r\n";
                        while(*msg != '\0')
                        {
                            SCI_writeCharBlockingNonFIFO(SCIA_BASE, *msg++);
                        }
                    }
                    // 重置缓冲区(无论是否匹配,都清空以接收新数据)
                    memset(rxBuffer, 0, sizeof(rxBuffer));
                    rxIndex = 0;
                }
            }
            else
            {
                // 缓冲区满时强制重置
                memset(rxBuffer, 0, sizeof(rxBuffer));
                rxIndex = 0;
            }
        }

        DEVICE_DELAY_US(1000);  // 短延时,降低CPU占用
    }
}


// 初始化LED引脚
void initLED(void)
{
    // 配置D10 LED引脚 (GPIO31)
   GPIO_setMasterCore(DEVICE_GPIO_PIN_LED1, GPIO_CORE_CPU1);
   GPIO_setPadConfig(DEVICE_GPIO_PIN_LED1, GPIO_PIN_TYPE_STD);
   GPIO_setPinConfig(GPIO_31_GPIO31);  // GPIO31设为通用IO
   GPIO_setDirectionMode(DEVICE_GPIO_PIN_LED1, GPIO_DIR_MODE_OUT);
   GPIO_writePin(DEVICE_GPIO_PIN_LED1,  1);
}

// 闪烁LED指定次数
void blinkLED(uint16_t times)
{
    uint16_t i; // 将变量i的声明移到for循环外
    for(i = 0; i < times; i++)
    {
        GPIO_writePin(LED_PIN, 0);  // 亮
        delayMs(200);               // 延时200ms
        GPIO_writePin(LED_PIN, 1);  // 灭
        delayMs(200);               // 延时200ms
    }
}

// 精确延时函数(基于DEVICE_DELAY_US)
void delayMs(uint16_t ms)
{
    DEVICE_DELAY_US(ms * 1000);  // 利用库函数实现准确毫秒级延时
}