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.

用TM4C129 串口发送数据只能一次发送不多于9个字节

    用TM4C129 串口发送数据只能一次发送不多于9个字节,超过9个字节也能发出去,但是之后就不能再发数据了。用的UARTCharPut函数,循环发送,循环9次之后必须要等一段时间再发,才能正常发出,这是什么原因呢?

  • 把你的代码贴上来,用的哪个串口,中断方式还是阻塞方式,贴上来我这里测试下。
  • 你好,用的uart0,阻塞方式,在enet_s2e这个项目里改的程序。一个串口任务里,每隔一段时间循环发送9个字节没问题,如果循环发送10个字节,就只能发出去一次,之后就发不出去了,电脑的串口调试助手只能收到10个字节,代码如下:

    static void SerialTask(void *pvParameters)
    {
    int i=0, j=0, m;
    int v[MAX_S2E_PORTS];


    while(1)
    {

    for(j=0; j<30000; j++)
    {
    m=5;
    }

    for(i=0;i<9;i++)//改成10就只能发出1次10字节,之后发送不出去了
    {
    UARTCharPut(g_ui32UARTBase[0], i);
    }

    }

  • 是不是和MAX_S2E_PORTS这个参数有关呢,因为你用的是以太网转串口,应该是以太网那边的缓冲限制了吧。
  • 示例程序用的是UART3和4。我用的是UART0和1。我发现中断处理函数在startup_rvmdk.S里声明的地方要换一下。要改成:

    DCD SerialPort0IntHandler ; UART0 Rx and Tx
    DCD SerialPort1IntHandler ; UART1 Rx and Tx

    。。。

    DCD IntDefaultHandler ; UART3 Rx and Tx
    DCD IntDefaultHandler ; UART4 Rx and Tx

    这个可以在startup_rvmdk.S文件里直接改吗?

  • 对的,你需要在startup_rvmdk.S中把默认的DCD IntDefaultHandler 对应位置中加上UART3和4中断函数的名称,并编写中断函数才可以的。原来问题出在这里了,问题是,你用阻塞方式的话,不开启中断也是可以的呀。