大家好:
我在做一个串口升级工具,上位机已经验证串口波特率设置到1500000没问题,下位机设置超过1000000(1000000以及以内的波特率都没问题)串口就发送都发送不出去,我系统时钟配置成16000000;看到M4的驱动库里UARTConfigSetExpClk函数if((ui32Baud * 16) > ui32UARTClk)有判断这个条件时必须开启HSE高速模式,我也加上了,但是还是有问题,由于是直接改bootloader的代码,基本上都是直接操作寄存器,现将串口初始化代码贴上:
#define UART_FIXED_BAUDRATE 1500000
#define CRYSTAL_FREQ 16000000
HWREG(SYSCTL_RCGCGPIO) |= (UART_RXPIN_CLOCK_ENABLE |
UART_TXPIN_CLOCK_ENABLE);
HWREG(SYSCTL_RCGCUART) |= UART_CLOCK_ENABLE;
HWREG(UART_RXPIN_BASE + GPIO_O_AFSEL) |= UART_RX;
HWREG(UART_RXPIN_BASE + GPIO_O_PCTL) |= UART_RX_PCTL;
HWREG(UART_RXPIN_BASE + GPIO_O_ODR) &= ~(UART_RX);
HWREG(UART_RXPIN_BASE + GPIO_O_DEN) |= UART_RX;
HWREG(UART_TXPIN_BASE + GPIO_O_AFSEL) |= UART_TX;
HWREG(UART_TXPIN_BASE + GPIO_O_PCTL) |= UART_TX_PCTL;
HWREG(UART_TXPIN_BASE + GPIO_O_ODR) &= ~(UART_TX);
HWREG(UART_TXPIN_BASE + GPIO_O_DEN) |= UART_TX;
HWREG(UARTx_BASE + UART_O_CC) = UART_CLOCK_SYSTEM;
//
// Set the baud rate.
//
if(UART_FIXED_BAUDRATE*16 > CRYSTAL_FREQ)
{
//
// Enable high speed mode.
//
HWREG(UARTx_BASE + 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.
//
ui32ProcRatio = UART_BAUD_RATIO(UART_FIXED_BAUDRATE/2);
}
HWREG(UARTx_BASE + UART_O_IBRD) = ui32ProcRatio >> 6;
HWREG(UARTx_BASE + UART_O_FBRD) = ui32ProcRatio & UART_FBRD_DIVFRAC_M;
//
// Set data length, parity, and number of stop bits to 8-N-1.
//
HWREG(UARTx_BASE + UART_O_LCRH) = UART_LCRH_WLEN_8 | UART_LCRH_FEN;
HWREG(UARTx_BASE + UART_O_FR) = 0;
// Enable RX, TX, and the UART.
//
HWREG(UARTx_BASE + UART_O_CTL) |= (UART_CTL_UARTEN | UART_CTL_TXE |
UART_CTL_RXE);
调试我在循环发送0xAA0X55字符串,结果是当波特率超过1000000,都会挂在while(!(HWREG(UARTx_BASE + UART_O_FR) & UART_FR_TXFE))这个循环出不来,数据也没发送出去。
想请教下,当想使用高速的波特率时该怎样配置才能正常使用?
jinmin wang:
回复 xyz549040622:
我用的是TM4C1290NCPDT这颗,手册上是有这段描述,是不是还要开启中断和DMA呢?
xyz549040622:
回复 jinmin wang:
这么高的速度没做过,你可以试试。因为虚拟串口的速度也是几M的,一般调试的时候,想找到支持高波特率的上位机也是很不容易的。
jinmin wang:
回复 xyz549040622:
谢谢哦,我解决了这个问题,确实是主频设置的不够高
xyz549040622:
回复 jinmin wang:
解决了就好,我就觉得配置应该没那么复杂的。