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.

TM4C123 UART3在ROM_UARTConfigSetExpClk中死机?

Other Parts Discussed in Thread: TM4C1231C3PM

TM4C1231C3PM  的串口0 1 2都能用,但是串口≥3就会初始化错误,通过调试发现是在ROM_UARTConfigSetExpClk函数中发生错误的,请问是什么原因呢?

  • 看ROM库中ROM_UARTConfigSetExpClk的介绍,没有进行别的串口的特殊说明呀。你在芯片中是否宏定义了TM4C1231C3PM这个芯片呢,你说初始化错误,有什么错误提示呢?

  • 有定义了,串口0   1   2 都能正常使用的,试了3 和4的都是一样的错误。错误就是停在297行那边。

    下面是初始化代码

    void ConfigureUART485(void)
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3);


    GPIOPinConfigure(GPIO_PC6_U3RX);
    GPIOPinConfigure(GPIO_PC7_U3TX);
    GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_6 | GPIO_PIN_7);


    UARTClockSourceSet(UART3_BASE, UART_CLOCK_PIOSC);

    UARTStdioConfig(3, 9600, SysCtlClockGet());


    }

    定义

    错误

  • 你试一下MAP_或者把ROM_去掉结果如何?

  • 好奇怪,看着没什么问题呀,等我试试给你个答案。不知道我手头EK的板子上串口3引出来了没有

  • 非常感谢你!  我串口3是用来做485通信的,早上我把485的先去掉,直接把串口3引出来用TTL电平作串口通信,刚开始能够发送数据(用PC端串口助手观察),但是数据是错的,后来把晶振从25M换成16M就能够正常通信了;那这说明程序是没问题的。现在的程序是这样的:

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART3);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    ROM_GPIOPinConfigure(GPIO_PC6_U3RX);
    ROM_GPIOPinConfigure(GPIO_PC7_U3TX);
    ROM_GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_6 | GPIO_PIN_7);

    ROM_UARTConfigSetExpClk(UART3_BASE, 16000000, 115200,
    (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE));

    UARTEnable(UART3_BASE);

    不使用这个函数了UARTStdioConfig(0, 115200, 16000000);使用它还是会死机。

    程序调好后把485那部分再接回去(其实就是两个电阻倒焊接回去,我用ADM2483),发现这样PC端就收不到数据了(用USB转232转485的转接线,这条线用在其它地方没问题,测试过了),现在目测就是485芯片这边有问题了,我再找找了。下图是我的485原理图。

  • 原来是晶振的问题导致的,晕,好像485部分的电平问题不兼容,你两个VDD的电压不一样,这样使用是否是可以的呢?