用TM4C129 串口发送数据只能一次发送不多于9个字节,超过9个字节也能发出去,但是之后就不能再发数据了。用的UARTCharPut函数,循环发送,循环9次之后必须要等一段时间再发,才能正常发出,这是什么原因呢?
xyz549040622:
把你的代码贴上来,用的哪个串口,中断方式还是阻塞方式,贴上来我这里测试下。
lei zhou96:
回复 xyz549040622:
你好,用的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); } }
xyz549040622:
回复 lei zhou96:
是不是和MAX_S2E_PORTS这个参数有关呢,因为你用的是以太网转串口,应该是以太网那边的缓冲限制了吧。
lei zhou96:
回复 xyz549040622:
示例程序用的是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文件里直接改吗?
xyz549040622:
回复 lei zhou96:
对的,你需要在startup_rvmdk.S中把默认的DCDIntDefaultHandler 对应位置中加上UART3和4中断函数的名称,并编写中断函数才可以的。原来问题出在这里了,问题是,你用阻塞方式的话,不开启中断也是可以的呀。