stm32+lwip(一):使用STM32CubeMX生成項目
系列文章:
stm32+lwip(一):使用STM32CubeMX生成項目
stm32+lwip(二):UDP測試
stm32+lwip(三):TCP測試
stm32+lwip(四):網頁服務器測試
stm32+lwip(五):以太網幀發送測試
STM32CubeMX是一個圖形化的配置工具,根據用戶配置可以生成相應的代碼,可以幫助開發人員擺脫部分底層開發的煩惱。
一、工程配置
本項目使用stm32407開發板,phy芯片為LAN8720A,硬件原理圖如下:
根據原理圖,STM32CubeMX配置如下:
1:選擇外部晶振
2:選擇燒寫方式和時基
3:選擇調試串口
4:選擇PHY接口
5:選擇LWIP
6:配置時鐘
7:調試串口配置
8:以太網配置
PHY地址根據PHYAD0管腳的配置決定:
PHY芯片設置,需根據LAN8720A的芯片手冊來配置:
9:LWIP配置
為了方便調試,使用靜態IP,同時使能UDP和TCP模塊
10:生成工程
將工程使用的堆棧調大點
每個外設單獨形成文件
二、調試串口輸出
在生成的uart.c文件中增加以下代碼:
1 /****************************************************************************** 2 * 描述 : 重定向c庫函數printf到串口3 * 參數 : 無 4 * 返回 : HAL_OK = 0x00U 5 HAL_ERROR = 0x01U 6 HAL_BUSY = 0x02U 7 HAL_TIMEOUT = 0x03U 8 ******************************************************************************/ 9 int fputc(int ch, FILE *f) 10 { 11 return HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); 12 }
然後就可以使用printf函數將調試信息通過串口打印出來。
三、PHY芯片復位
在以太網初始化後,增加PHY芯片復位代碼
1 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET); 2 HAL_Delay(50); 3 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
四、創建app文件
1 /** 2 ***************************************************************************** 3 * @file app.c 4 * @author Zorb 5 * @version V1.0.0 6 * @date 2018-09-04 7 * @brief 應用的實現 8 ***************************************************************************** 9 * @history 10 * 11 * 1. Date:2018-09-04 12 * Author:Zorb 13 * Modification:建立文件 14 * 15 ***************************************************************************** 16 */ 17 18 #include "app.h" 19 20 /****************************************************************************** 21 * 描述 : 應用的初始化 22 * 參數 : 無 23 * 返回 : 無 24 ******************************************************************************/ 25 void App_init(void) 26 { 27 printf("hello zorb\r\n"); 28 } 29 30 /****************************************************************************** 31 * 描述 : 應用程序 32 * 參數 : 無 33 * 返回 : 無 34 ******************************************************************************/ 35 void App_process(void) 36 { 37 38 } 39 40 /******************************** END OF FILE ********************************/
在main.c中增加以下代碼
MX_LWIP_Process()的功能說明:
/** * ---------------------------------------------------------------------- * Function given to help user to continue LwIP Initialization * Up to user to complete or change this function ... * Up to user to call this function in main.c in while (1) of main(void) *----------------------------------------------------------------------- * Read a received packet from the Ethernet buffers * Send it to the lwIP stack for handling * Handle timeouts if LWIP_TIMERS is set and without RTOS * Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS */
添加好app文件後,後續app初始化代碼寫在App_init()裏邊,app應用代碼寫在App_process()。
需要註意的是,本工程沒有使用任務系統,因此App_process()裏邊代碼不能阻塞。
五、ping測試
經過上面的工作,基於stm32的lwip工程已經搭建完成,在電腦上面ping一下:
現在已經ping通了,撒花。
六、最後
STM32CubeMX真的很方便,簡簡單單配置一下,就可以生成我們想要的工程。減少了開發者對底層驅動開發的時間,讓開發者更好地將時間投入到應用開發。
github:https://github.com/54zorb/stm32-lwip
版權所有,轉載請打賞喲
如果你喜歡我的文章,可以通過微信掃一掃給我打賞喲
stm32+lwip(一):使用STM32CubeMX生成項目