TI中文支持网
TI专业的中文技术问题搜集分享网站

串口开启HSE模式波特率超过1000000后通信不上

大家好:

        我在做一个串口升级工具,上位机已经验证串口波特率设置到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:

解决了就好,我就觉得配置应该没那么复杂的。

赞(0)
未经允许不得转载:TI中文支持网 » 串口开启HSE模式波特率超过1000000后通信不上
分享到: 更多 (0)

登录

注册