PIC32MZ2048ECH144 USART-传输的垃圾字符

PIC32MZ2048ECH144 USART- Junk characters transmitted

我是 MPLAB X Harmony 框架的新手,也是微控制器的新手。我正在研究 PIC32MZ2048ECH144。我想使用 USART 传输一个简单的字符串并在 RealTerm 终端中看到它显示。(我也尝试过 HyperTerminal。)无论我发送什么字符串,我都只看到显示的垃圾字符。当我浏览这个显示垃圾字符问题的解决方案时,有建议检查波特率。我在 MPLab Harmony 配置器(选项 -> Harmony 框架配置 -> 驱动程序 -> USART -> USART 驱动程序实例 0 -> 波特率 -> 9600)中将波特率设置为 9600。所以我在 app.c 中使用以下行来明确设置波特率。(PBCLK 为 100MHz)。但没有运气! PLIB_USART_BaudRateSet(USART_ID_2, 100000000 ,9600); app.c 文件的代码:

    /*******************************************************************************
     Start of File
     */
    const char *string1 = "*** UART Interrupt-driven Application Example ***\r\n";
    const char *string2 = "*** Type some characters and observe the LED turn ON ***\r\n";


    APP_DATA appData = 
    {
    };

    APP_DRV_OBJECTS appDrvObject;

    void APP_Initialize ( void )
    {
        appData.state = USART_ENABLE;
        appData.InterruptFlag = false;
    }

    bool WriteString(void)
    {
        if(*appData.stringPointer == '[=10=]')
        {
            return true;
        }

        while (PLIB_USART_TransmitterIsEmpty(USART_ID_1))
        {
            PLIB_USART_TransmitterByteSend(USART_ID_1, *appData.stringPointer);
            appData.stringPointer++;
            if(*appData.stringPointer == '[=10=]')
            {
                return true;
            }
        }
        return false;
    }

    bool PutCharacter(const char character)
    {
        if(PLIB_USART_TransmitterIsEmpty(USART_ID_1))
        {
            PLIB_USART_TransmitterByteSend(USART_ID_1, character);
            return true;
        }
        else
            return false;
    }

    void APP_Tasks ( void )
    {   
        /* check the application state*/
        switch ( appData.state )
        {
            case USART_ENABLE:
                /* Enable the UART module*/
                PLIB_USART_BaudRateSet(USART_ID_1, 100000000 ,9600);
                PLIB_USART_Enable(USART_ID_1);
                appData.stringPointer = string1;
                appData.state =  USART_TRANSMIT_FIRST_STRING;
                break;

            case USART_TRANSMIT_FIRST_STRING:
                if(true == WriteString())
                {
                    appData.state = USART_TRANSMIT_SECOND_STRING;
                    appData.stringPointer = string2;
                }
                break;

            case USART_TRANSMIT_SECOND_STRING:
                if(true == WriteString())
                {
                    appData.state = USART_RECEIVE_DONE;
                }
                break;

            case USART_RECEIVE_DONE:
                if (appData.InterruptFlag)
                {
                    if(true == PutCharacter(appData.data))
                    {
                      appData.InterruptFlag = false;   
                    }
                }
                break;

            default:

                while (1);

        }

    } 

    /*******************************************************************************
     End of File
     */

很抱歉,我没有足够的积分,无法附上我在 RealTerm 中收到的输出图像。 我不知道还有什么问题会导致波特率不匹配。任何提示或帮助都会有很大帮助。提前致谢。 请为 post.

中的任何错误向我道歉

你是对的,很可能是波特率,但只是为了确定 USART 是如何连接到计算机的?由于计算机需要 +-5V,您是否有翻译芯片?至于波特率,检查你的时钟方案,知道 PBCLK 有时是 SYSCLOCK 的 DIV_2。 Harmony 框架中有一个很棒的时钟原理图,可以仔细检查您的时钟和 CONFIG pragma。