我是MPLAB X Harmony框架的新手,也是微控制器的新手。我正在研究PIC32MZ2048ECH144。我想使用USART传输一个简单的字符串并看到它显示在RealTerm终端中。(我也尝试过HyperTerminal。)无论我发送什么字符串,我都看到只显示垃圾字符。当我浏览显示垃圾字符问题的解决方案时,有建议检查波特率。我在MPLab Harmony配置器中将波特率设置为9600(选项 - >和谐框架配置 - >驱动程序 - > USART - > USART驱动程序实例0 - >波特率 - > 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 == '\0')
{
return true;
}
while (PLIB_USART_TransmitterIsEmpty(USART_ID_1))
{
PLIB_USART_TransmitterByteSend(USART_ID_1, *appData.stringPointer);
appData.stringPointer++;
if(*appData.stringPointer == '\0')
{
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中收到的输出图像,因为我没有足够的分数。 我不知道问题可能导致波特率不匹配。任何提示或帮助都会有很大帮助。提前致谢。 如果发布任何错误,请向我道歉。
答案 0 :(得分:0)
你是正确的,它很可能是BAUD率,但只是为了确定USART是如何连接到计算机的?你有一个翻译芯片,因为电脑预计+ -5V?至于BAUD,请检查您的时钟方案,并知道PBCLK有时是SYSCLOCK的DIV_2。 Harmony框架中有一个很棒的时钟原理图,可以仔细检查你的时钟和CONFIG编译指示。