This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LX4F231H UART只能接受,不能发送,



使用的是TivaWare_C_Series-1.0里面标准的uart_ehco的工程,一个代码都没有改,

使用的是LaunchPad,使用本身的LX4F20H没有问题,UART可以正常接受发送数据,但是将芯片换成LX4F231H以后,所有的串口都只能接受数据,而无法发送数据,也有用PD6和PD7作为UART2使用,使用示波器都能抓取到接受的数据的波形,但是发送数据的时候没有波形。

请问是这两颗IC需要有不同的配置吗?

  • 如果你没改任何代码,应该在PA0,PA1抓到发送的数据波形,

    至于说UART2的管脚PD6和PD7上抓不到发送的波形,那是因为PD7默认是NMI接口,如果要配置成UART2的TX端口,需要单独的代码配置。

  • 下面是我的配置初始化和中断

    void InitUART2() {  

     SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);

     GPIOPinConfigure(GPIO_PD6_U2RX);  

    GPIOPinConfigure(GPIO_PD7_U2TX);

     GPIOPinTypeUART(GPIO_PORTD_BASE, GPIO_PIN_6 | GPIO_PIN_7);

     UARTConfigSetExpClk(UART2_BASE, SysCtlClockGet(), 115200,    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));

     IntEnable(INT_UART2);  UARTIntEnable(UART2_BASE, UART_INT_RX | UART_INT_RT);

    }

    void UART2IntHandler(void) {    

        uint32_t ui32Status;

        ui32Status = ROM_UARTIntStatus(UART2_BASE, true);

        ROM_UARTIntClear(UART2_BASE, ui32Status);

        while(ROM_UARTCharsAvail(UART2_BASE))    

     {        

        ROM_UARTCharPutNonBlocking(UART2_BASE,   ROM_UARTCharGetNonBlocking(UART2_BASE));

            GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);

            SysCtlDelay(SysCtlClockGet() / (1000 * 3));

            GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);    

     }

    }

    我做实验,当有数据进入的时候使用示波器测试接受数据正常,PD7为低电平,都没有进行拉高。

     

    使用PA0和PA1做试验的时候,我复制大量的数据的时候发现PA0和PA1都有波形,但是使用我通过键盘敲字符的时候,并没有将字符串重新发送过PC端。

     

  • 再次强调下,TI的 M4芯片有的管脚在上电的默认状态是NMI(非屏蔽中断)管脚,如果要工作在GPIO或其他功能模式,需要在配置管脚时解锁配置。

    具体方法如下,否者配置管脚为功能模块功能会失败。

    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;  

    HWREG(GPIO_PORTF_BASE + GPIO_O_CR)   = 0xFF;  

    GPIOPinConfigure(GPIO_PD7_U2TX);

    GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_0);    

    HWREG(GPIO_PORTD_BASE + GPIO_O_CR)   = 0xFE;  

    HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = 00;