stm32+lwip的物聯網開發——學習過程(1)
注:本人拒絕重複教程內容,只寫下自認為自己有所工作的地方,哪怕只是很小的一點點。
十分歡迎大家與我討論,指出文中錯誤與不足之處。
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命令起到的功能一樣,都證明了收發包的成功。
不同的是:連線成功一次後斷開網線,燈還是會亮。但是ping已經無法ping通。這表明OSTaskCreate這裡只是把系統任務“點燈”開啟了。
之後在同一個地方又寫了一個點燈的函式,不是系統任務,結果燈不亮,ping不通,無法收發資料包。這裡為什麼ping不通,還需要進一步學習才能明白。
希望與正在學習stm32和lwip的同學一起學習進步。
希望偶爾有懂行的老師看到給出指點批評,謝謝。