M3 串口uart2正常,UART0不工作

请教各位,谢谢,我现在用9D96,UART2能正常工作,电路板上改用UART0时,不能收到9D96返回的数据,我把UART2的程序里相应地方都改成了UART0的,引脚配置,中断向量表也改了的,请问UART0问题在哪里?谢谢

  • 怀疑楼主管脚配置代码有问题。

    UART0为默认管脚功能,上电后可以不配置管脚。

  • 建议楼主把uart初始化代码贴出来

  • 代码如下:谢谢

    //*****************************************************************************
    //
    // uart.c -UART接收中断程序
    //*****************************************************************************
    #include "lm3s9d96.h"
    #include "hw_ints.h"
    #include "hw_memmap.h"
    #include "hw_types.h"
    #include "debug.h"
    #include "gpio.h"
    #include "interrupt.h"
    #include "sysctl.h"
    #include "uart.h"

    //*****************************************************************************
    //
    // 驱动库出错进入查错程序
    //
    //*****************************************************************************
    #ifdef DEBUG
    void
    __error__(char *pcFilename, unsigned long ulLine)
    {
    }
    #endif
    //*****************************************************************************
    //
    //串口中断服务程序
    //
    //*****************************************************************************
    void
    UARTIntHandler(void)
    {
    unsigned long ulStatus;
    unsigned char getchar;
    //
    // 获取中断状态
    //
    ulStatus = UARTIntStatus(UART0_BASE, true);
    //
    // 清除中断状态,防止重复响应同一中断
    //
    UARTIntClear(UART0_BASE, ulStatus);
    //
    // 循环检查接收FIFO中是否有数据
    //
    while(UARTCharsAvail(UART0_BASE))
    {

    getchar=UARTCharGetNonBlocking(UART0_BASE);
    UARTCharPutNonBlocking(UART0_BASE,getchar);
    }
    }
    //*****************************************************************************
    int
    main(void)
    {
    // 设置时钟
    //
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHZ);

    // 外设使能
    //串口引脚配置
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    // 使能处理器中断
    //
    IntMasterEnable();

    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);
    //
    // 设置串口为 9600, 8-N-1模式
    //
    UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600,
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));
    // 使能串口中断
    //
    IntEnable(INT_UART0);
    UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_TX);

    while(1)

    {
    }
    }

    谢谢

  • 楼主的意思是9D96的RX有问题?TX是正常的吗?

    有问题的部分有没有用示波器量过信号是否正常?9D96能进中断吗?

  • 去掉下面两句:

    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);

    因为PA0和PA1本来就是 UART0的第一选择管脚,所以不许要再调用上面的语句配置了。

  • 试过,还是不行

  • 楼主所指的不行是不能进中断还是收的数不准确?能不能稍微描述详细一点,

  • 请参考Stellarisware中C:\StellarisWare\boards\dk-lm3s9d96\uart_echo的sample。

     

    uart_echo.zip
  • 楼主用示波器测过信号没?看看信号是不是正常?