在使用超级终端Tera Team软件调试CC3200 UART示例程序时,界面总是输出乱码。
参考了另外一篇博客之后,提出有可能是波特率设置的问题。在设置里面,发现设置的波特率为9600bit/s。
void
UARTConfigSetExpClk(unsigned long ulBase, unsigned long ulUARTClk,
unsigned long ulBaud, unsigned long ulConfig)
{
unsigned long ulDiv;
//
// Check the arguments.
//
ASSERT(UARTBaseValid(ulBase));
ASSERT(ulBaud != 0);
//
// Stop the UART.
//
UARTDisable(ulBase);
//
// Is the required baud rate greater than the maximum rate supported
// without the use of high speed mode?
//
if((ulBaud * 16) > ulUARTClk)
{
//
// Enable high speed mode.
//
HWREG(ulBase + UART_O_CTL) |= UART_CTL_HSE;
//
// Half the supplied baud rate to compensate for enabling high speed
// mode. This allows the following code to be common to both cases.
//
ulBaud /= 2;
}
else
{
//
// Disable high speed mode.
//
HWREG(ulBase + UART_O_CTL) &= ~(UART_CTL_HSE);
}
//
// Compute the fractional baud rate divider.
//
ulDiv = (((ulUARTClk * 8) / ulBaud) + 1) / 2;
//
// Set the baud rate.
//
HWREG(ulBase + UART_O_IBRD) = ulDiv / 64;
HWREG(ulBase + UART_O_FBRD) = ulDiv % 64;
//
// Set parity, data length, and number of stop bits.
//
HWREG(ulBase + UART_O_LCRH) = ulConfig;
//
// Clear the flags register.
//
HWREG(ulBase + UART_O_FR) = 0;
//
// Start the UART.
//
UARTEnable(ulBase);
}
上面是CC3200 SDK提供的API函数,主要是为了配置UART接口,其中函数第三个参数ulBaud就是指波特率。
void
InitTerm()
{
#ifndef NOTERM
MAP_UARTConfigSetExpClk(CONSOLE,MAP_PRCMPeripheralClockGet(CONSOLE_PERIPH),
UART_BAUD_RATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
#endif
__Errorlog = 0;
}
上面是主函数里的初始化终端函数,就是引用了UAET的API函数对UART进行初始化,我们看到第三个参数为UART_BAUD_RATE,这个就是波特率。这是一个宏定义,我们去找找它定义为了多少。
#define UART_BAUD_RATE 115200
#define SYSCLK 80000000
#define CONSOLE UARTA0_BASE
#define CONSOLE_PERIPH PRCM_UARTA0
在uart_if.h这个头文件,可以发现波特率被设置为了115200。接下来我们去修改超级终端的波特率,重新运行,发现乱码问题已经解决了。
在使用超级终端Tera Team软件调试CC3200 UART示例程序时,界面总是输出乱码。
参考了另外一篇博客之后,提出有可能是波特率设置的问题。在设置里面,发现设置的波特率为9600bit/s。
void
UARTConfigSetExpClk(unsigned long ulBase, unsigned long ulUARTClk,
unsigned long ulBaud, unsigned long ulConfig)
{
unsigned long ulDiv;
//
// Check the arguments.
//
ASSERT(UARTBaseValid(ulBase));
ASSERT(ulBaud != 0);
//
// Stop the UART.
//
UARTDisable(ulBase);
//
// Is the required baud rate greater than the maximum rate supported
// without the use of high speed mode?
//
if((ulBaud * 16) > ulUARTClk)
{
//
// Enable high speed mode.
//
HWREG(ulBase + UART_O_CTL) |= UART_CTL_HSE;
//
// Half the supplied baud rate to compensate for enabling high speed
// mode. This allows the following code to be common to both cases.
//
ulBaud /= 2;
}
else
{
//
// Disable high speed mode.
//
HWREG(ulBase + UART_O_CTL) &= ~(UART_CTL_HSE);
}
//
// Compute the fractional baud rate divider.
//
ulDiv = (((ulUARTClk * 8) / ulBaud) + 1) / 2;
//
// Set the baud rate.
//
HWREG(ulBase + UART_O_IBRD) = ulDiv / 64;
HWREG(ulBase + UART_O_FBRD) = ulDiv % 64;
//
// Set parity, data length, and number of stop bits.
//
HWREG(ulBase + UART_O_LCRH) = ulConfig;
//
// Clear the flags register.
//
HWREG(ulBase + UART_O_FR) = 0;
//
// Start the UART.
//
UARTEnable(ulBase);
}
上面是CC3200 SDK提供的API函数,主要是为了配置UART接口,其中函数第三个参数ulBaud就是指波特率。
void
InitTerm()
{
#ifndef NOTERM
MAP_UARTConfigSetExpClk(CONSOLE,MAP_PRCMPeripheralClockGet(CONSOLE_PERIPH),
UART_BAUD_RATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
#endif
__Errorlog = 0;
}
上面是主函数里的初始化终端函数,就是引用了UAET的API函数对UART进行初始化,我们看到第三个参数为UART_BAUD_RATE,这个就是波特率。这是一个宏定义,我们去找找它定义为了多少。
#define UART_BAUD_RATE 115200
#define SYSCLK 80000000
#define CONSOLE UARTA0_BASE
#define CONSOLE_PERIPH PRCM_UARTA0
在uart_if.h这个头文件,可以发现波特率被设置为了115200。接下来我们去修改超级终端的波特率,重新运行,发现乱码问题已经解决了。
举报