1、zstack1.2.2协议栈
调用HAL_UARTWRITE函数,串口并不是马上发送出来,目前需要调用此函数串口马上发送出来,有没有什么办法
Viki Shi:
不清楚你的“不是马上发送出来”是延迟了多久,HAL_UARTWRITE里需要调用其他函数进行数据发送操作的:
uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len) {(void)port;(void)buf;(void)len;#if (HAL_UART_DMA == 1)if (port == HAL_UART_PORT_0)return HalUARTWriteDMA(buf, len); #endif #if (HAL_UART_DMA == 2)if (port == HAL_UART_PORT_1)return HalUARTWriteDMA(buf, len); #endif #if (HAL_UART_ISR == 1)if (port == HAL_UART_PORT_0)return HalUARTWriteISR(buf, len); #endif #if (HAL_UART_ISR == 2)if (port == HAL_UART_PORT_1)return HalUARTWriteISR(buf, len); #endif#if HAL_UART_USBHalUARTTx(buf, len);return len; #elsereturn 0; #endif }
user6336125:
回复 Viki Shi:
HalUARTWrite( SERIAL_APP_PORT,(uint8 *)&readFrame, sizeof(ModbusHostRead_t));
//HalUARTPoll();
SystemResetSoft();
例如这样,write进去串口发送队列以后,DMA只发送了两个字节系统就复位了;目前协议栈有没有判断串口数据发送完成或者写进去队列之后马上要求DMA传输的类似函数。
Viki Shi:
回复 user6336125:
我印象中是没有,你可以查一下_hal_uart_dma.c文件