注:本人拒绝重复教程内容,只写下自认为自己有所工作的地方,哪怕只是很小的一点点。
十分欢迎大家与我讨论,指出文中错误与不足之处。
2016.04.16下午13.23
由于一个IOT的项目,顺理成章地学习stm32+lwip。本来先学stm32可能会好一些,但时间原因,只能一起上了。
在看过一次视频教程,自己亲自移植了一次后,所谓“例程”一直没有成功。终于在这一刻,UCOS下终于ping通,也自己写了一个点灯的实验成功了。真正感觉自己做了点什么事,而且对于lwip,至少是最基本的lwip,还有stm32的简单应用有了初步了解。
stm32在无操作系统时,在入口函数中配好时钟参数后,进行各类初始化之后,就开始跑一个lwip_periodic_handle的函数,死循环。是一个广播函数。
在有操作系统时,直接开启os task和os,
其他的功能全在中断回调里面。
void LwIP_Pkt_Handle(void)
{
//从网络缓冲区中读取接收到的数据包并将其发送给LWIP处理
ethernetif_input(&netif);
}
//增加自己的功能是在网络缓冲区里面?
由于宿舍网需要账号密码登录,所以单片机直接接网线无法上网,所以只有单片机跟电脑连接的程序才可以实现。希望等周一路由器到手后可以进行下面的工作。
目前能够对单片机配置静态IP,可以ping通。将上述函数LwIP_Pkt_Handle改写为:
void LwIP_Pkt_Handle(void)
{
//从网络缓冲区中读取接收到的数据包并将其发送给LWIP处理
ethernetif_input(&netif);
OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
}
能够有点灯的效果。
这表明,只要灯亮起,则电脑与单片机建立起了lwip通信,并且有收发数据包了。这与ping命令起到的功能一样,