prayerwind 发表于 2014-3-20 20:55 
缓冲区思想类似。
一般通过tcp_write函数(数据的调用同样是利用pbuf指针)将数据写入tcp发送缓冲区(可 ...
调了几天还是无法实现串口数据转网口的发送 贴上代码能帮我看看是哪的问题吗
int main(void)
{
//add a long delay wait for DP83848 finish reset
unsigned int i,j;
for(i=0;i<36;i++)
{
for(j=0;j < 65500;j++);
}
//#ifdef SERIAL_DEBUG
// DebugComPort_Init();
//#endif
USART_Configuration();
USART_NVIC_Config();
/* configure ethernet (GPIOs, clocks, MAC, DMA) */
ETH_BSP_Config();
/* Initilaize the LwIP stack */
LwIP_Init();
/* Http webserver Init */
// httpd_init();
pTCP = tcp_new();
tcp_echoserver_init();
while (1)
{
/* check if any packet received */
if (ETH_CheckFrameReceived())
{
/* process received ethernet packet */
LwIP_Pkt_Handle();
}
/* handle periodic timers for LwIP */
LwIP_Periodic_Handle(LocalTime);
tcp_send_data(USART_RecvBuff, USART_Counter);//将串口收到的数据转发给网络。
USART_Counter = 0;
}
}
void tcp_send_data(uint8_t* pData, uint16_t len)//TCP发送函数
{
struct pbuf* buff;
buff = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM);
memcpy(buff->payload, pData, len);
tcp_write(pTCP, buff->payload, buff->len, 1);
/* Free the buffer */
pbuf_free(buff);
}
以下是串口中断函数
void USARTx_IRQHANDLER(void)
{
if(USART_GetITStatus(Open207Z_USARTx, USART_IT_RXNE) != RESET)
{
USART_RecvBuff[USART_Counter++] = USART_ReceiveData(Open207Z_USARTx);
//printf("USART Hyperterminal Interrupts Receive a word: %c\r\n",USART_ReceiveData(Open207Z_USARTx));
}
}
|