国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

STM32F407以太網(wǎng)開(kāi)發(fā)實(shí)戰(zhàn):LWIP移植與Socket應(yīng)用指南

STM32F407以太網(wǎng)開(kāi)發(fā)實(shí)戰(zhàn):LWIP移植與Socket應(yīng)用指南 1. 項(xiàng)目概述為什么要在STM32F407上搞網(wǎng)絡(luò)如果你手頭有一塊STM32F407的開(kāi)發(fā)板除了點(diǎn)燈、讀ADC、玩串口是不是總覺(jué)得少了點(diǎn)什么沒(méi)錯(cuò)就是網(wǎng)絡(luò)。在萬(wàn)物互聯(lián)的今天讓一個(gè)功能強(qiáng)大的MCU“上網(wǎng)”意味著你的設(shè)備能從信息孤島變成網(wǎng)絡(luò)節(jié)點(diǎn)可以遠(yuǎn)程上傳傳感器數(shù)據(jù)、接收控制指令、甚至實(shí)現(xiàn)OTA升級(jí)應(yīng)用場(chǎng)景一下子就從實(shí)驗(yàn)室拓展到了智能家居、工業(yè)傳感、數(shù)據(jù)網(wǎng)關(guān)等廣闊領(lǐng)域。STM32F407這顆芯片自帶一個(gè)10/100M的以太網(wǎng)MAC控制器這是它區(qū)別于許多入門(mén)級(jí)MCU的核心優(yōu)勢(shì)之一。硬件上它已經(jīng)為你鋪好了路但軟件上從MAC到最終能用的Socket API中間還隔著一個(gè)復(fù)雜的協(xié)議棧。這個(gè)項(xiàng)目就是要把這個(gè)通路打通讓STM32F407真正具備網(wǎng)絡(luò)通信能力。我經(jīng)歷過(guò)從零開(kāi)始移植LWIP的糾結(jié)也踩過(guò)內(nèi)存不足、數(shù)據(jù)不通的坑這篇文章就把這些實(shí)戰(zhàn)經(jīng)驗(yàn)梳理出來(lái)目標(biāo)是讓你看完后能快速、穩(wěn)定地在自己的F407板子上跑通網(wǎng)絡(luò)功能并理解背后的每一個(gè)關(guān)鍵環(huán)節(jié)。2. 整體方案設(shè)計(jì)與核心思路拆解在STM32上實(shí)現(xiàn)網(wǎng)絡(luò)功能本質(zhì)上是在MCU上運(yùn)行一個(gè)TCP/IP協(xié)議棧。對(duì)于資源受限的嵌入式設(shè)備我們通常不會(huì)自己從頭寫(xiě)一個(gè)協(xié)議棧而是移植一個(gè)成熟、輕量的開(kāi)源協(xié)議棧。圍繞STM32F407主要有以下幾個(gè)技術(shù)選型我們需要根據(jù)項(xiàng)目需求做出權(quán)衡。2.1 協(xié)議棧選型LWIP vs. OthersLWIP (Lightweight IP)是絕對(duì)的主流選擇也是ST官方HAL庫(kù)和CubeMX默認(rèn)支持的網(wǎng)絡(luò)協(xié)議棧。它的“輕量”是相對(duì)于Linux等系統(tǒng)上的完整協(xié)議棧而言其功能對(duì)于嵌入式設(shè)備來(lái)說(shuō)已經(jīng)非常全面支持IP、ICMP、UDP、TCP、DHCP、DNS等核心協(xié)議。為什么選LWIP生態(tài)完善ST提供了基于HAL庫(kù)的完整驅(qū)動(dòng)和移植層ethernetif.c與PHY芯片如LAN8720A、DP83848的對(duì)接代碼都已寫(xiě)好大大降低了底層驅(qū)動(dòng)的難度。資源可控LWIP的內(nèi)存管理非常靈活你可以通過(guò)修改lwipopts.h頭文件中的宏定義精細(xì)地調(diào)整協(xié)議棧使用的內(nèi)存池、緩沖區(qū)數(shù)量以適應(yīng)F407上從64KB到192KB不等的SRAM資源。社區(qū)活躍遇到的問(wèn)題基本都能在社區(qū)找到答案無(wú)論是配置問(wèn)題還是性能調(diào)優(yōu)。其他選項(xiàng)如uIP更輕量但功能也相對(duì)較少FreeRTOSTCP與FreeRTOS集成度更高。對(duì)于初次在F407上實(shí)現(xiàn)網(wǎng)絡(luò)功能遵循“主流、有官方支持”的原則選擇LWIP是最穩(wěn)妥、最高效的路徑。2.2 硬件連接與PHY芯片選擇STM32F407的以太網(wǎng)模塊MAC需要通過(guò)一個(gè)標(biāo)準(zhǔn)的介質(zhì)獨(dú)立接口MII或簡(jiǎn)化獨(dú)立接口RMII連接到物理層芯片PHY。RMII使用的引腳更少是更常見(jiàn)的選擇。核心硬件連接以RMII接口為例REF_CLK50MHz時(shí)鐘源。這是整個(gè)通信的時(shí)序基準(zhǔn)必須穩(wěn)定。它可以由外部晶振提供也可以由MCU的MCO引腳輸出。如果時(shí)鐘不準(zhǔn)會(huì)導(dǎo)致鏈路無(wú)法建立或數(shù)據(jù)包錯(cuò)誤。MDIO/MDC管理數(shù)據(jù)接口用于MCU配置PHY芯片的寄存器如設(shè)置速率、雙工模式、自協(xié)商等。RXD[1:0], TXD[1:0], CRS_DV, RX_ER數(shù)據(jù)收發(fā)與控制信號(hào)線。PHY芯片選型心得 市面上常見(jiàn)的有LAN8720A和DP83848。LAN8720A價(jià)格更便宜引腳更少但需要外部提供50MHz時(shí)鐘或由MCU的MCO提供。DP83848更皮實(shí)抗干擾能力強(qiáng)一些且內(nèi)部集成時(shí)鐘無(wú)需外部時(shí)鐘源。如果你的板子設(shè)計(jì)已經(jīng)定型就根據(jù)已有的PHY型號(hào)來(lái)配置驅(qū)動(dòng)如果是新設(shè)計(jì)對(duì)于成本敏感且PCB空間有限的選LAN8720A對(duì)于環(huán)境復(fù)雜要求高可靠性的可以考慮DP83848。2.3 軟件架構(gòu)HAL庫(kù) LWIP 可能的RTOS一個(gè)典型的軟件分層如下硬件層STM32F407 MAC PHY芯片。驅(qū)動(dòng)層ST提供的以太網(wǎng)HAL驅(qū)動(dòng)stm32f4xx_hal_eth.c和PHY驅(qū)動(dòng)。移植層ethernetif.c文件這是連接LWIP協(xié)議棧和HAL驅(qū)動(dòng)的橋梁實(shí)現(xiàn)了LWIP要求的netif接口函數(shù)如數(shù)據(jù)包發(fā)送 (low_level_output) 和接收通過(guò)中斷或輪詢(xún)。協(xié)議棧層LWIP核心。應(yīng)用層你的業(yè)務(wù)代碼調(diào)用LWIP提供的Raw/Callback API或Socket API進(jìn)行網(wǎng)絡(luò)通信。是否使用RTOS如FreeRTOS對(duì)于簡(jiǎn)單的單連接應(yīng)用如只做一個(gè)TCP服務(wù)器可以在裸機(jī)中通過(guò)輪詢(xún)方式運(yùn)行LWIP調(diào)用sys_check_timeouts()和ethernetif_input。但一旦涉及多連接、復(fù)雜協(xié)議如HTTP、MQTT或需要處理其他并發(fā)任務(wù)強(qiáng)烈建議上RTOS。LWIP本身是線程安全的在RTOS下運(yùn)行更穩(wěn)定應(yīng)用開(kāi)發(fā)也更直觀。本文的講解將基于FreeRTOS LWIP的方案這是目前最主流的組合。3. 工程創(chuàng)建與基礎(chǔ)配置詳解3.1 使用STM32CubeMX進(jìn)行圖形化配置CubeMX能極大減少底層初始化代碼的編寫(xiě)工作量。步驟分解選擇芯片指定為STM32F407xx。開(kāi)啟以太網(wǎng)外設(shè)在Connectivity標(biāo)簽下激活ETH。模式選擇通常為RMII。引腳檢查與配置CubeMX會(huì)自動(dòng)分配ETH所需的引腳PA1, PA2, PA7, PC1, PC4, PC5等。你需要仔細(xì)核對(duì)這些引腳是否與你的硬件原理圖一致特別是ETH_RMII_REF_CLK的引腳來(lái)源。如果由外部晶振提供確保該引腳配置正確如果由MCU的MCO如PA8輸出50MHz時(shí)鐘則需要額外在RCC配置中開(kāi)啟MCO。配置PHY在ETH的參數(shù)設(shè)置中需要指定PHY地址通常為0或1根據(jù)硬件設(shè)計(jì)和PHY芯片型號(hào)如LAN8720A。這一步至關(guān)重要它決定了后續(xù)生成的PHY初始化代碼是否正確。配置LWIP在Middleware標(biāo)簽下激活LWIP。此時(shí)CubeMX會(huì)生成基本的lwipopts.h配置文件。配置FreeRTOS在Middleware下激活FREERTOS接口選擇CMSIS_V2。在Tasks and Queues標(biāo)簽中建議至少創(chuàng)建兩個(gè)任務(wù)一個(gè)高優(yōu)先級(jí)任務(wù)用于處理以太網(wǎng)如ethernet_thread一個(gè)低優(yōu)先級(jí)任務(wù)用于你的網(wǎng)絡(luò)應(yīng)用如app_thread。時(shí)鐘樹(shù)配置確保系統(tǒng)時(shí)鐘HCLK滿(mǎn)足要求并為ETH MAC提供正確的時(shí)鐘。F407的ETH MAC需要掛在AHB1總線下時(shí)鐘通常為系統(tǒng)時(shí)鐘的一半如168MHz系統(tǒng)時(shí)鐘下AHB1為84MHz。生成代碼指定好IDE如Keil MDK或STM32CubeIDE生成初始化代碼。3.2 關(guān)鍵代碼修改與移植層適配CubeMX生成的代碼是一個(gè)很好的起點(diǎn)但通常不能直接跑通網(wǎng)絡(luò)需要手動(dòng)修改幾個(gè)關(guān)鍵文件。1. 修改ethernetif.c中的低層發(fā)送函數(shù)生成的low_level_output函數(shù)可能直接調(diào)用HAL_ETH_TransmitFrame。這里有個(gè)大坑必須確保發(fā)送的數(shù)據(jù)包在發(fā)送完成前其內(nèi)存p-payload不能被釋放或修改。LWIP的Raw API在發(fā)送后可能會(huì)立即回收內(nèi)存。穩(wěn)妥的做法是復(fù)制一份數(shù)據(jù)包。static err_t low_level_output(struct netif *netif, struct pbuf *p) { err_t errval ERR_OK; struct pbuf *q; uint8_t *buffer (uint8_t *)p-payload; uint16_t framelength p-tot_len; // 方案一使用動(dòng)態(tài)內(nèi)存需保證ETH_TX_DESC_CNT足夠大 // 方案二更穩(wěn)妥將數(shù)據(jù)拷貝到一個(gè)靜態(tài)或全局的發(fā)送緩沖區(qū) // 這里以方案二為例假設(shè)有一個(gè)足夠大的全局?jǐn)?shù)組tx_buffer if(framelength ETH_TX_BUF_SIZE) { return ERR_IF; } memcpy(tx_buffer, buffer, framelength); // 使用拷貝后的數(shù)據(jù)傳遞給HAL驅(qū)動(dòng) if (HAL_ETH_TransmitFrame(eHandle, framelength) ! HAL_OK) { errval ERR_IF; } return errval; }2. 調(diào)整lwipopts.h配置文件這是LWIP的“調(diào)參中心”直接關(guān)系到協(xié)議棧的穩(wěn)定性和內(nèi)存占用。以下是一些關(guān)鍵配置項(xiàng)及其在F407上的經(jīng)驗(yàn)值// 內(nèi)存與緩沖區(qū)配置針對(duì)約128KB SRAM的F407 #define MEM_SIZE (20 * 1024) // LWIP動(dòng)態(tài)內(nèi)存池大小建議10K-30K #define PBUF_POOL_SIZE 16 // PBUF緩沖池?cái)?shù)量用于存儲(chǔ)數(shù)據(jù)包建議8-16 #define PBUF_POOL_BUFSIZE 512 // 每個(gè)PBUF的大小應(yīng)大于最大幀長(zhǎng)度1518字節(jié)不通常設(shè)為T(mén)CP_MSS協(xié)議頭即可如1524 #define TCP_MSS (1460) // TCP最大報(bào)文段標(biāo)準(zhǔn)以太網(wǎng)下為1460 #define TCP_SND_BUF (4 * TCP_MSS) // TCP發(fā)送緩沖區(qū)大小 #define TCP_WND (2 * TCP_MSS) // TCP接收窗口大小 // 功能使能 #define LWIP_DHCP 1 // 啟用DHCP客戶(hù)端自動(dòng)獲取IP #define LWIP_UDP 1 #define LWIP_TCP 1 #define LWIP_NETCONN 1 // 啟用Netconn API比Raw API易用比Socket API底層 #define LWIP_SOCKET 1 // 啟用Socket API兼容BSD Socket最易用 #define SO_REUSE 1 // 允許地址重用方便調(diào)試時(shí)快速重啟服務(wù)器 // 超時(shí)與重傳 #define TCP_TMR_INTERVAL 250 // TCP定時(shí)器間隔(ms) #define TCP_FAST_INTERVAL TCP_TMR_INTERVAL #define TCP_SLOW_INTERVAL (4 * TCP_TMR_INTERVAL)注意MEM_SIZE設(shè)置過(guò)大可能導(dǎo)致內(nèi)存池初始化失敗因?yàn)長(zhǎng)WIP還需要為其他結(jié)構(gòu)如pbuf池分配內(nèi)存。一個(gè)調(diào)試技巧是如果網(wǎng)絡(luò)初始化失敗可以逐步減小MEM_SIZE并觀察系統(tǒng)啟動(dòng)日志。3. 實(shí)現(xiàn)網(wǎng)絡(luò)接口的初始化和啟動(dòng)在main.c或單獨(dú)的應(yīng)用文件中你需要調(diào)用一系列函數(shù)來(lái)啟動(dòng)網(wǎng)絡(luò)。// 1. 初始化LWIP lwip_init(); // 2. 添加并配置網(wǎng)絡(luò)接口(netif) struct netif gnetif; // 全局網(wǎng)絡(luò)接口結(jié)構(gòu)體 ip4_addr_t ipaddr, netmask, gw; // 如果使用靜態(tài)IP IP4_ADDR(ipaddr, 192, 168, 1, 100); IP4_ADDR(netmask, 255, 255, 255, 0); IP4_ADDR(gw, 192, 168, 1, 1); // 如果使用DHCP ipaddr.addr 0; netmask.addr 0; gw.addr 0; // 添加網(wǎng)卡傳遞MAC地址并指定輸入函數(shù) netif_add(gnetif, ipaddr, netmask, gw, NULL, eernetif_init, eernet_input); netif_set_default(gnetif); netif_set_up(gnetif); // 3. 如果使能了DHCP創(chuàng)建DHCP客戶(hù)端 #if LWIP_DHCP dhcp_start(gnetif); #endif // 4. 在FreeRTOS任務(wù)中需要定期處理協(xié)議棧超時(shí)和接收數(shù)據(jù)包 void ethernet_thread(void *argument) { for(;;) { // 處理接收到的數(shù)據(jù)包必須調(diào)用 ethernetif_input(gnetif); // 處理LWIP內(nèi)核超時(shí)事件必須調(diào)用 sys_check_timeouts(); osDelay(2); // 適當(dāng)延時(shí)避免任務(wù)占用過(guò)高CPU } }4. 網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)從Socket API到實(shí)戰(zhàn)當(dāng)LWIP協(xié)議棧成功運(yùn)行并且網(wǎng)絡(luò)鏈路指示燈Link LED常亮后我們就可以基于Socket API編寫(xiě)應(yīng)用了。LWIP的Socket API是BSD Socket的一個(gè)子集對(duì)于有網(wǎng)絡(luò)編程經(jīng)驗(yàn)的開(kāi)發(fā)者來(lái)說(shuō)非常友好。4.1 TCP服務(wù)器示例創(chuàng)建一個(gè)回聲服務(wù)器下面是一個(gè)在FreeRTOS任務(wù)中創(chuàng)建的簡(jiǎn)單TCP回聲服務(wù)器。它監(jiān)聽(tīng)端口8080接受客戶(hù)端連接并將收到的任何數(shù)據(jù)原樣發(fā)回。void tcp_echo_server_task(void *pvParameters) { int sock, new_sock; struct sockaddr_in server_addr, client_addr; socklen_t addr_len sizeof(client_addr); char buffer[512]; int recv_len; // 1. 創(chuàng)建Socket sock lwip_socket(AF_INET, SOCK_STREAM, 0); if (sock 0) { printf(Socket creation failed\n); vTaskDelete(NULL); } // 2. 設(shè)置地址重用方便調(diào)試 int optval 1; lwip_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, optval, sizeof(optval)); // 3. 綁定地址和端口 memset(server_addr, 0, sizeof(server_addr)); server_addr.sin_family AF_INET; server_addr.sin_port htons(8080); // 監(jiān)聽(tīng)8080端口 server_addr.sin_addr.s_addr INADDR_ANY; // 綁定到所有本地IP if (lwip_bind(sock, (struct sockaddr*)server_addr, sizeof(server_addr)) 0) { printf(Bind failed\n); lwip_close(sock); vTaskDelete(NULL); } // 4. 開(kāi)始監(jiān)聽(tīng) if (lwip_listen(sock, 5) 0) { // 最大等待連接數(shù)為5 printf(Listen failed\n); lwip_close(sock); vTaskDelete(NULL); } printf(TCP Echo Server started on port 8080...\n); while(1) { // 5. 接受客戶(hù)端連接 new_sock lwip_accept(sock, (struct sockaddr*)client_addr, addr_len); if (new_sock 0) { printf(Accept failed\n); continue; } printf(Client connected: %s:%d\n, inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); // 6. 處理該客戶(hù)端連接 do { recv_len lwip_recv(new_sock, buffer, sizeof(buffer) - 1, 0); if (recv_len 0) { buffer[recv_len] \0; // 添加字符串結(jié)束符 printf(Received: %s\n, buffer); // 回聲發(fā)送 lwip_send(new_sock, buffer, recv_len, 0); } else if (recv_len 0) { printf(Client disconnected.\n); } else { printf(Recv error\n); } } while (recv_len 0); // 7. 關(guān)閉連接 lwip_close(new_sock); } // 理論上不會(huì)執(zhí)行到這里 lwip_close(sock); vTaskDelete(NULL); }將這個(gè)任務(wù)在main函數(shù)中創(chuàng)建并賦予一個(gè)合適的優(yōu)先級(jí)如osPriorityNormal。4.2 UDP客戶(hù)端示例發(fā)送傳感器數(shù)據(jù)假設(shè)我們有一個(gè)ADC任務(wù)在讀取電壓值需要通過(guò)UDP協(xié)議周期性地發(fā)送到遠(yuǎn)程服務(wù)器例如192.168.1.200:9999。void udp_sensor_client_task(void *pvParameters) { int sock; struct sockaddr_in server_addr; char send_buffer[64]; uint16_t adc_value; // 創(chuàng)建UDP Socket sock lwip_socket(AF_INET, SOCK_DGRAM, 0); if (sock 0) { printf(UDP Socket creation failed\n); vTaskDelete(NULL); } // 配置目標(biāo)服務(wù)器地址 memset(server_addr, 0, sizeof(server_addr)); server_addr.sin_family AF_INET; server_addr.sin_port htons(9999); // 將點(diǎn)分十進(jìn)制IP地址轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序 inet_aton(192.168.1.200, server_addr.sin_addr); while(1) { // 1. 從其他任務(wù)或全局變量獲取傳感器數(shù)據(jù)這里模擬 adc_value read_adc_value(); // 假設(shè)的函數(shù) // 2. 格式化數(shù)據(jù) int len snprintf(send_buffer, sizeof(send_buffer), ADC: %d, Voltage: %.3fV\r\n, adc_value, (adc_value * 3.3f / 4095)); // 3. 發(fā)送UDP數(shù)據(jù)包 int sent lwip_sendto(sock, send_buffer, len, 0, (struct sockaddr*)server_addr, sizeof(server_addr)); if (sent 0) { printf(UDP send failed\n); } else { printf(Sent: %s, send_buffer); } // 4. 延時(shí)控制發(fā)送頻率例如每秒1次 osDelay(1000); } }4.3 HTTP服務(wù)器與MQTT客戶(hù)端進(jìn)階對(duì)于更復(fù)雜的應(yīng)用如搭建一個(gè)簡(jiǎn)單的Web服務(wù)器來(lái)配置設(shè)備參數(shù)或者連接MQTT服務(wù)器發(fā)布訂閱消息LWIP同樣可以勝任。HTTP服務(wù)器可以在TCP服務(wù)器的基礎(chǔ)上解析HTTP請(qǐng)求報(bào)文GET/POST并按照HTTP/1.1協(xié)議格式返回響應(yīng)狀態(tài)行、頭部、空行、正文。你可以返回簡(jiǎn)單的HTML頁(yè)面或者處理RESTful API請(qǐng)求。為了簡(jiǎn)化開(kāi)發(fā)可以使用開(kāi)源的嵌入式HTTP庫(kù)如httpd或mongoose的嵌入式版本。MQTT客戶(hù)端MQTT是物聯(lián)網(wǎng)設(shè)備上云的主流協(xié)議。你需要集成一個(gè)MQTT客戶(hù)端庫(kù)如Eclipse Paho MQTT Embedded C或MQTT-C。這些庫(kù)底層依賴(lài)于Socket APITCP連接因此與LWIP兼容性很好。集成后設(shè)備就能連接到阿里云、騰訊云等物聯(lián)網(wǎng)平臺(tái)或自建的MQTT Broker如EMQX。5. 調(diào)試技巧與常見(jiàn)問(wèn)題排查實(shí)錄網(wǎng)絡(luò)功能的調(diào)試比單純的點(diǎn)燈復(fù)雜得多涉及硬件、驅(qū)動(dòng)、協(xié)議棧和應(yīng)用層。以下是我在實(shí)際項(xiàng)目中積累的排查流程和常見(jiàn)問(wèn)題。5.1 硬件與鏈路層排查問(wèn)題現(xiàn)象網(wǎng)口指示燈不亮Link LED不亮。排查步驟檢查供電確保PHY芯片的供電電壓通常為3.3V穩(wěn)定。檢查時(shí)鐘用示波器測(cè)量ETH_RMII_REF_CLK引腳確認(rèn)是否有穩(wěn)定、幅值正確的50MHz方波。這是最常見(jiàn)的問(wèn)題點(diǎn)。如果使用MCO輸出檢查System Core RCC中MCO的配置。檢查復(fù)位與配置確認(rèn)PHY芯片的復(fù)位引腳如果有時(shí)序正確。檢查ethernetif.c中的low_level_init函數(shù)看PHY的初始化是否成功通過(guò)讀取PHY ID寄存器。檢查網(wǎng)線與對(duì)端設(shè)備換一根網(wǎng)線或連接到電腦/路由器不同的網(wǎng)口試試。問(wèn)題現(xiàn)象Link LED亮但Activity LED數(shù)據(jù)指示燈不閃爍。排查步驟檢查MAC地址在ethernetif.c的netif-hwaddr設(shè)置中確保MAC地址有效不要全是0或FF。可以設(shè)置一個(gè)唯一的地址。檢查中斷確認(rèn)以太網(wǎng)全局中斷ETH_IRQn和接收中斷已正確使能。在stm32f4xx_it.c中應(yīng)有ETH_IRQHandler并調(diào)用HAL_ETH_IRQHandler。檢查描述符STM32的ETH驅(qū)動(dòng)使用DMA描述符環(huán)來(lái)管理收發(fā)緩沖區(qū)。檢查HAL_ETH_Init的返回值以及描述符內(nèi)存是否分配成功通常是在ethernetif.c中定義的數(shù)組。5.2 協(xié)議棧與網(wǎng)絡(luò)層排查問(wèn)題現(xiàn)象Ping不通設(shè)備。排查步驟確認(rèn)IP地址如果使用靜態(tài)IP確保IP、網(wǎng)關(guān)、子網(wǎng)掩碼設(shè)置正確且與電腦在同一網(wǎng)段。如果使用DHCP在ethernet_thread中打印netif.ip_addr.addr看是否成功獲取到IP。檢查ARP在電腦上打開(kāi)命令行輸入arp -a查看是否能找到設(shè)備的IP和MAC地址映射。如果沒(méi)有說(shuō)明ARP請(qǐng)求或響應(yīng)有問(wèn)題。可以嘗試在設(shè)備端主動(dòng)Ping一下網(wǎng)關(guān)以觸發(fā)ARP過(guò)程。啟用LWIP調(diào)試在lwipopts.h中打開(kāi)調(diào)試輸出能提供海量信息。#define LWIP_DEBUG 1 #define NETIF_DEBUG LWIP_DBG_ON #define ETHARP_DEBUG LWIP_DBG_ON #define ICMP_DEBUG LWIP_DBG_ON重新編譯通過(guò)串口查看輸出觀察協(xié)議棧的運(yùn)行狀態(tài)。問(wèn)題現(xiàn)象能Ping通但TCP連接失敗。排查步驟檢查防火墻確保電腦的防火墻沒(méi)有阻止對(duì)應(yīng)端口如8080。檢查Socket創(chuàng)建和綁定在服務(wù)器代碼中每一步socket,bind,listen后都打印返回值或錯(cuò)誤碼errno。LWIP的錯(cuò)誤碼定義在err.h中。檢查內(nèi)存TCP連接需要分配TCB傳輸控制塊結(jié)構(gòu)體。如果MEM_SIZE設(shè)置過(guò)小或MEMP_NUM_TCP_PCB數(shù)量不足可能導(dǎo)致無(wú)法創(chuàng)建新的連接。適當(dāng)增大這些配置。使用網(wǎng)絡(luò)調(diào)試助手在電腦上使用網(wǎng)絡(luò)調(diào)試助手如NetAssist主動(dòng)連接設(shè)備的IP和端口觀察設(shè)備端是否打印出“accept”或連接成功的日志。5.3 應(yīng)用層與性能問(wèn)題排查問(wèn)題現(xiàn)象數(shù)據(jù)傳輸不穩(wěn)定時(shí)斷時(shí)續(xù)或速度慢。排查步驟任務(wù)優(yōu)先級(jí)與堆棧確保處理網(wǎng)絡(luò)數(shù)據(jù)的任務(wù)ethernet_thread有足夠高的優(yōu)先級(jí)能及時(shí)響應(yīng)中斷和處理數(shù)據(jù)包。同時(shí)給LWIP內(nèi)部任務(wù)和你的應(yīng)用任務(wù)分配足夠的堆??臻g避免棧溢出。緩沖區(qū)與內(nèi)存泄漏檢查是否在Socket通信中正確關(guān)閉了連接lwip_close。長(zhǎng)時(shí)間運(yùn)行后如果內(nèi)存持續(xù)減少可能存在內(nèi)存泄漏??梢允褂胢em_malloc和mem_free的統(tǒng)計(jì)功能來(lái)監(jiān)控。優(yōu)化LWIP參數(shù)增大TCP_SND_BUF和TCP_WND可以提高TCP吞吐量。調(diào)整TCP_TMR_INTERVAL更快的定時(shí)器間隔可以提高響應(yīng)速度但會(huì)增加CPU負(fù)擔(dān)。確保PBUF_POOL_SIZE足夠特別是在高速、多連接場(chǎng)景下避免因pbuf耗盡而丟包。問(wèn)題現(xiàn)象設(shè)備作為服務(wù)器同時(shí)處理多個(gè)客戶(hù)端時(shí)卡死。解決方案上面的回聲服務(wù)器示例是阻塞式的一次只能處理一個(gè)客戶(hù)端。要支持多客戶(hù)端必須采用非阻塞模式或?yàn)槊總€(gè)客戶(hù)端創(chuàng)建一個(gè)獨(dú)立的任務(wù)。非阻塞SocketSelect將Socket設(shè)置為非阻塞模式lwip_fcntl(sock, F_SETFL, O_NONBLOCK)然后使用lwip_select函數(shù)來(lái)監(jiān)控多個(gè)Socket的可讀/可寫(xiě)事件。這是高性能服務(wù)器的常用模式但編程復(fù)雜度較高。每連接一個(gè)任務(wù)在accept到一個(gè)新連接后立即創(chuàng)建一個(gè)新的FreeRTOS任務(wù)將新的客戶(hù)端Socket句柄傳遞給該任務(wù)由這個(gè)專(zhuān)屬任務(wù)來(lái)處理該連接的所有通信。主服務(wù)器任務(wù)繼續(xù)循環(huán)accept。這種方式編程簡(jiǎn)單但連接數(shù)過(guò)多時(shí)會(huì)創(chuàng)建大量任務(wù)消耗系統(tǒng)資源。6. 內(nèi)存管理與性能優(yōu)化實(shí)戰(zhàn)對(duì)于資源有限的STM32F407內(nèi)存是寶貴的。LWIP的靈活配置是一把雙刃劍配置不當(dāng)極易導(dǎo)致內(nèi)存耗盡或性能低下。6.1 理解LWIP的內(nèi)存模型LWIP主要使用兩種內(nèi)存動(dòng)態(tài)內(nèi)存池MEM通過(guò)mem_malloc/mem_free管理用于分配協(xié)議控制塊如tcp_pcb、udp_pcb、網(wǎng)絡(luò)接口結(jié)構(gòu)等。數(shù)據(jù)包緩沖區(qū)PBUF用于存儲(chǔ)實(shí)際收發(fā)的網(wǎng)絡(luò)數(shù)據(jù)。PBUF_POOL是從固定大小的內(nèi)存池中分配效率最高用于接收數(shù)據(jù)幀。PBUF_RAM和PBUF_REF則從動(dòng)態(tài)內(nèi)存池分配或引用現(xiàn)有內(nèi)存。配置黃金法則MEM_SIZE不宜過(guò)大或過(guò)小??梢韵仍O(shè)置為(20*1024)如果運(yùn)行復(fù)雜應(yīng)用如HTTPMQTT時(shí)出現(xiàn)分配失敗再逐步調(diào)大。同時(shí)觀察lwip_stats.mem中的使用情況。PBUF_POOL_SIZE這是防止丟包的關(guān)鍵。每個(gè)接收到的數(shù)據(jù)包都會(huì)消耗一個(gè)pbuf。在高速或突發(fā)數(shù)據(jù)流下如果池子空了新到的數(shù)據(jù)包就會(huì)被丟棄。建議至少設(shè)置為16。你可以通過(guò)打印lwip_stats.pbuf來(lái)監(jiān)控池的使用峰值。PBUF_POOL_BUFSIZE它必須大于你預(yù)期處理的最大單幀數(shù)據(jù)長(zhǎng)度。對(duì)于包含VLAN標(biāo)簽的巨型幀可能需要152441528字節(jié)。但為了節(jié)省內(nèi)存通常設(shè)為1524或1518。如果你的應(yīng)用只發(fā)小包可以設(shè)小一點(diǎn)但必須大于TCP_MSS 協(xié)議頭開(kāi)銷(xiāo)。6.2 使用CCM內(nèi)存提升網(wǎng)絡(luò)性能STM32F407有一個(gè)64KB的CCM內(nèi)核耦合存儲(chǔ)器內(nèi)存它位于D-Bus上只能被CPU通過(guò)D-Bus訪問(wèn)DMA無(wú)法訪問(wèn)。這意味著優(yōu)點(diǎn)訪問(wèn)速度極快零等待周期適合存放需要CPU頻繁訪問(wèn)的代碼或數(shù)據(jù)。缺點(diǎn)不能用于以太網(wǎng)DMA描述符或緩沖區(qū)因?yàn)镋TH外設(shè)的DMA是通過(guò)AHB總線訪問(wèn)內(nèi)存的它“看不到”CCM。那么CCM內(nèi)存怎么用一個(gè)經(jīng)典的優(yōu)化是將LWIP的mem內(nèi)存池或者關(guān)鍵的全局變量放到CCM中。操作方法以Keil MDK為例修改鏈接腳本.sct文件定義一個(gè)名為CCMRAM的區(qū)域。在代碼中通過(guò)__attribute__將特定的數(shù)組或變量指定到該區(qū)域。// 在lwipopts.h或特定文件中重定義LWIP的內(nèi)存池位置 // 首先在鏈接腳本中定義CCM區(qū)域并在此區(qū)域定義一個(gè)節(jié)例如.ccmram // 然后聲明一個(gè)大的數(shù)組作為內(nèi)存池 LWIP_DECLARE_MEMORY_ALIGNED(ccm_ram_memory, MEM_SIZE); // 使用編譯器特性將其放入CCM __attribute__((section(.ccmram))) u8_t ccm_ram_memory[MEM_SIZE_ALIGNED]; // 在初始化時(shí)告訴LWIP使用這塊內(nèi)存 void mem_init(void) { LWIP_MEM_ALIGNED(ccm_ram_memory) ccm_ram_memory; }將網(wǎng)絡(luò)處理相關(guān)的高優(yōu)先級(jí)任務(wù)堆棧也放到CCM中可以顯著減少任務(wù)切換時(shí)的響應(yīng)延遲。實(shí)測(cè)效果將內(nèi)存池移至CCM后在大量TCP小包吞吐測(cè)試中我觀察到CPU利用率下降了約15%ping的響應(yīng)時(shí)間波動(dòng)范圍也縮小了。這對(duì)于需要高實(shí)時(shí)性的網(wǎng)絡(luò)應(yīng)用是一個(gè)有效的優(yōu)化手段。6.3 中斷與DMA配置優(yōu)化以太網(wǎng)接收數(shù)據(jù)包是通過(guò)DMA直接寫(xiě)入內(nèi)存然后產(chǎn)生中斷通知CPU的。中斷處理的效率直接影響網(wǎng)絡(luò)吞吐量和CPU負(fù)載。優(yōu)化點(diǎn)中斷優(yōu)先級(jí)將ETH中斷優(yōu)先級(jí)設(shè)置為一個(gè)較高的值如5但不要高于系統(tǒng)滴答定時(shí)器SysTick和PendSV中斷通常為15否則可能影響RTOS調(diào)度。中斷處理函數(shù)在ETH_IRQHandler中只調(diào)用HAL_ETH_IRQHandler。真正的數(shù)據(jù)包處理應(yīng)該放在ethernetif_input函數(shù)中該函數(shù)在ethernet_thread任務(wù)里被周期調(diào)用。這種“中斷只標(biāo)記任務(wù)去處理”的模式避免了在中斷服務(wù)程序中執(zhí)行耗時(shí)操作更符合RTOS的設(shè)計(jì)哲學(xué)。DMA描述符數(shù)量在ethernetif.c中ETH_RX_DESC_CNT和ETH_TX_DESC_CNT定義了接收和發(fā)送描述符環(huán)的大小。增加數(shù)量可以提升吞吐能力減少丟包概率但也會(huì)消耗更多內(nèi)存每個(gè)描述符對(duì)應(yīng)一個(gè)數(shù)據(jù)緩沖區(qū)。對(duì)于百兆全雙工通信建議至少各設(shè)置為4-8個(gè)。最后網(wǎng)絡(luò)功能的穩(wěn)定運(yùn)行是一個(gè)系統(tǒng)工程。從穩(wěn)定的硬件設(shè)計(jì)、正確的時(shí)鐘配置到精心調(diào)優(yōu)的LWIP參數(shù)和健壯的應(yīng)用層代碼每一步都不可或缺。建議在項(xiàng)目初期就搭建好完整的調(diào)試環(huán)境串口日志、網(wǎng)絡(luò)抓包工具如Wireshark并養(yǎng)成通過(guò)打印關(guān)鍵狀態(tài)IP地址、鏈路狀態(tài)、內(nèi)存使用率來(lái)監(jiān)控系統(tǒng)健康度的習(xí)慣。當(dāng)你的STM32F407能夠穩(wěn)定地Ping通并流暢地跑起一個(gè)TCP回聲服務(wù)器時(shí)你就已經(jīng)為它打開(kāi)了通往物聯(lián)網(wǎng)世界的大門(mén)后續(xù)無(wú)論是上傳ADC數(shù)據(jù)到云端還是通過(guò)網(wǎng)頁(yè)控制一個(gè)繼電器都只是在這個(gè)堅(jiān)實(shí)基礎(chǔ)上添加不同的應(yīng)用協(xié)議而已。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美成人9797| 久久久久久久久成人av解说| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 性暴力欧美猛交在线直播| 成人网欧美风情| AV不卡在线| 日本大香蕉综合网| 精品无人区麻豆乱码1区2区图片| 天堂国产AV| 久久男女激情视频网站| 天天干天天燥| 91成人18| 亚洲色宗合| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 亚洲成a人v欧美综合天堂下载| 色欲人妻一区二区在线| 九九九九九九亚洲| 1024亚洲中文字幕久在线看片你懂的| 亚洲图片偷拍视频区| 人人操人人操人人人操| 日韩在线观看三级电影| 欧美少妇色图| 91欧美www| 91超碰在线播放| 插老姨肥穴| 人妻在线大香蕉| 麻豆久久视频在线地址| 欧美夜夜狠| 亚洲天堂综合AV| 郑州宾馆老熟女露脸啪啪| 超碰精品日韩欧美国产| 操国产逼| WWW啪啪的com| 色噜噜人妻丝袜a∨先锋影| 亚欧性爱无码| 国产91精品福利在线| 狠狠色噜噜狠狠狠狠2018| 欧美黑人熟妇精品91| 青青草在线视频播放器| 国产精品白丝AV| 欲色啪| 搡老熟女老女人老熟妇免费视频| 色九月综合| 91精品国产91综合久久蜜臀| 淫穴高潮色图| 中国操逼无码| 91青青在线| 亚洲色婷婷综合久久一区二区三区| 欧美国产一区二区三区麻豆传媒| 国产欧美日韩臀 | 蜜桃狠狠色伊人亚洲综合| 91美女视频在线免费观看| 国产专区路线| 搡老熟女免费视频| 日本操逼视频不卡直接放| 26uuu最新| 免费A片三p视频| 国产精品黑人一区二区三区| JIZZJIZZ国产精品喷水| 激情综合五月| 欧美高清16| 国产视频人人网| 日本国产亚洲一区在线观看| 强歼乱伦资源网| 九九黄色网| 亚洲AO在线| 91色s| 新91视频.cmp| 久久九色| 中文字幕av一区二区三区人妻少妇| 精品白丝一区| 操国产逼| 日韩性爱小视频在线观看| 亚洲成人碰碰| 99久久久| 欧美偷拍区| 丁香五月性| 夜夜一区二区| 久久久精品一区二区| 欧成人精品一区二区三区| 大色综合| 国产高清成人传媒影视| 久久九精品| 91bbbbbb| 久久高清欧美国产| 国产自产91区13区| 色欧美在线| 免费精品无码一级毛片牛牛影视 | 午夜啪| 国产一级黄色片在线观看| 国产后入精品| 天天久久| 全免费a敌肛交毛片免费| 青青草中文-久久青草精品一区二区三 | 丁香婷婷激情五月天无毒不卡 | 91久久青青草原精品| 芊芊操逼视频无码| 亚洲Av噜噜一区二区三区妖精| 天天夜夜rb| 日本Xx性爱| 午夜精品久久久99| 92性色国产午夜福利在线661 | 国产精品日日摸夜夜添骚逼| 亚洲一区二区三区麻豆传媒| 国产精品久久泡妞网站| 丁香五月天激情网站| 亚洲自拍欧美国产首页网曝| 超清福利精品视频在线| 在线女人91| 花花AV导航| 自拍偷拍 日韩无码| 久久超碰98| 日韩中文字幕国产| 天天综合网~91入口| 天天看天天日天天操| 成人在线日韩| 91色宗合| 久久婷婷一区二| 久久亚洲日韩熟女精品| AV 少妇 人妻 偷拍| 国产97综合| 国产亚洲禁久一区二区| 91少妇高潮| 亚洲成a人在线观看久| 男人的天堂在线| 18啪啪手机免费性爱| 北京专精特新企业招聘信息| 秋霞网无码| 欧美嗯啊……在线观看视频免费| 精品91| 91人妻视频在线| 老司机福利青青草| 国产SV一线| 狠狠久久手机视频精品| 夜夜操夜夜高潮夜夜爽国产精品区| 人干人人人操人人摸| 久九9精品| aaa一级黄片| 97天堂| 欧亚乱色熟一区二区三四区| 九热视频| 国产粉嫩蜜臀av一区二区三区| 精品国产自在在线99| 色吧 综合| 欧洲乱码视频| 亚洲 国产 精品一区| 九久久精品| 婷婷色色网| av亚欧| 亚洲综合小视频小说在线观看| 翔田千里Av在线| 北野未奈加勒比av| 中文字幕精品一区二区精品| 午夜福利1区2区3区| 97超碰在线资源网站| 五月天玖玖资源站| 日本爽爽爽爽爽爽免费视频| 91欧美丨精品丨入口| 中文字幕亚洲在线一区| 91欧洲国产成人久久精品网站| 久久做97| 欧美日日网| 色天使亚洲综合在线观看| 人人澡人人爽人人精品| 97在线精品观看视频| 超碰在线免费一区二区三区| 91 国产丝袜在线放观看| 精品视频免费在线一区| 欧美性高潮| 黑人与人妻| 亚洲欧美中文日韩视频中国语| 五月情色天| 亚洲色欲一区二区三区| 日韩高潮一区| 日韩美女操b| 97综合网| 熟女熟妇伦久久影院毛片一区二区| 粉嫩国产精品久久粉嫩| 日韩精品免费高清视频在线| 日本黄色大片一级视频免费麻豆| 欧美亚洲91| 四虎免费在线播放| 亚洲精品国产熟女久久久| 亚洲视频,小说| 欧美强奸一区二区诱惑| 久久男女激情视频网站| 国模无码人体一区二区三| 亚洲视频精选| 亚洲欧美内射| 欧美色图99| 亚洲精品国产精品乱码不卡| 亚洲国产综合久久久性感熟妇| 人人操人人大香蕉| 性做久久久久久免费观看软件| 中文字幕天堂在线| 翔田千里A片一区二区| 久久久久久中文| 欧洲亚洲天堂精品| 欧洲精品网| 亚州高清色综合| 亚洲人成色9999精品久久 | 美女刺激久久国产欧美| 天天日天天色| 殴美大黄片| 色情乱伦AV| 日韩欧美aⅴ综合网站发布| 国内亚洲高清无码| 亚欧色图在线激情| 搡老女人老熟女91| 免费一二区| 亚洲欧美黄| 亚洲中文字幕av| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 欧美另类色图片| 青青操青娱乐| 97蜜桃综合| 高清不卡视频| 牛牛久久国产精品视频一二三| 800zy一区二区| 丝袜夫妻自拍| 中文字幕人妻色偷偷久久皮| 午夜毛片高清免费不卡| 97AV在线免费观看| 欧美色图99| 91美女片在线| a亚洲欧美色欲| 亚欧高清| 爱射综合| 精品色色| 亚洲免费97免费| 躁躁日曰躁2020| 狠狠躁日日躁夜夜躁A| 中文字幕乱偷人妻久久艾草网| 欧美性生活内射| 老鸭窝黄色视频网站| 另类图片五月天| 精品日日人妻| AA级电影三区| 婷婷导航| 美欧老女人97| 97视频新免费| 久久久久九九九| 色色色日本| 伊人黄色视频免费观看| 丁香五月色| 久操高青| 色综合久久夜色精品国产天堂| 黑白配性爱AV成| 91青青草| 亚洲AV无码国产精品久久久久 | 噜噜噜亚洲精品| 欧美性五月| dy888午夜老子影视达达兔| 夜夜操青青草| 久久超碰爱| 亚洲人妻熟妇三十三区| 另类欧美色| 国产无码三级视频在线观看| 91高清日| av无码精品久久久久| 人妻少妇久久久| 欧美 熟女 日韩| 91制服丝袜| 一级片在线观看高清无码| 自拍鲍鱼一区在线高清观看免费| 欧美亚洲AN| 97 国产精品| 99国产在线 精品 视频| 五月天激情国产综合婷婷婷| 午夜福利合集| 免费日韩黄片| 久久色激情一区二区三区| 91女人的网站| 蜜臀久久99精品久久久久久成人小说 | 岛国艾薇凹凸视频天堂| 欧美三级免费伊人| 国产乱码久久久| 十八禁成人网站在线观看| 亚洲国产欧美中日韩成人综合视频| 久久婷婷国产一区二区色| 大香蕉一人在线| 激情小说在线视频| 91在线美女| www.男人的天堂| 亚洲无码AV九九九| 欧美一品道| 亚洲无码超碰免费| 国产性刺激| 国产精品午夜福利| 动漫爆乳3D奶水一区在线观看| 欧美一区二区成人一卡| 日韩操逼性鲍| 色老汉色| av强奸乱轮| 久久伊人青青草| 久久超碰日韩精品| 日本曲间由美性生活片| 日韩免费中文字幕视频| 青青操少妇| 偷拍 欧美 日韩| 丝袜性亚洲| 天天草天天日| 国产精品天干天干综合网麻豆| 久久97精品久久久久久久不卡| 9久久精品| 久久精品日韩专区免费观看| 婷婷综合五月| 60秒不遮不挡| 国产不卡中文字幕免费avi| 亚洲学生妹高清av| 精品999999| 97 亚洲 日韩 欧美 在线| 好吊色综合| 五月天色电影| 波多野结衣一级视频| 亚洲熟女乱综合一区二区三区| 国产精品一二三区18| 欧美在线大香蕉| 欧美日韩午夜精品一区二区三区| 欧亚揄拍偷拍精品视频| 国产亚洲禁久一区二区| 国内精品嫩模A∨私拍小视频| 亚洲精品久久久久久久久豆丁网| 黄片色区软件| 蜜桃臀AV在线| 蜜臀在线免费观看在线免费观看| 亚洲人妻中文在线视频| 中文熟女五十乱码在线| 久草大| 国产精品爆乳懂色蜜乳| 超碰在线1234区| 亚洲综合婷婷| 自拍偷拍第26| julia ann久久| 午夜精品久久久久久久男人的天堂| 天久久久噜噜噜久久国产精品爽爽| 九九热免费国产视频婷婷伊人五月 | 99热在线不卡| 熟女视频久久| 无码精品久久久天天影视| 午夜福利区| 久久精品国产72国产精品福利| 人妻少妇精品久久久久久久| 久久 亚洲 日韩 人妻| 免费在线观看AV无码网站| 一本色道综合久久欧美日韩精品| 大香蕉伊在线久草麻豆天堂故事| 91超级碰碰碰| 婷婷丁香五月天亚洲天堂网| 欧美97超碰| 伊人久久亚洲中文字幕不卡| 色9999日韩国产| 亚洲欧洲精品视频发布| 色九久| 亚洲欧美日韩中文久久自慰| 久久人妻视频网| av天堂天堂av日韩| 成人av影院在线观看| 激情视频图片| 男人天堂无码| 一区二区三区无卡视频在线观看| 日本久久久久久久久| 久久久久国产精品喷潮免费观看臀| 东北女人操逼| 国产国产亚洲一二三久久| 热久日综合| 97超级久久强资源| 4141514逼喷水三级片| 天天操天天插| 亚洲一区二区精品福利| 亚洲最大网站av| 日韩免费簧片| 伊人网免费视频| 欧美视频一区二区三区| 欧美性爱www免费版| 97爱亚洲| 日日夜夜摸| 亚洲一区中文字幕| 大香蕉淫人网| 97超碰磁| 永久电影三级在线观看| 色综合av综合久久| 日韩三级在线观看网站| 秋霞网—男女啪啪亚洲免费体验区| 天天天肏屄肏屄肏屄欧美欧美| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 青娱乐手机日韩在线视频| 久久综合乱子伦国产免费| 猛交交| 乱色视频中文字幕| 五月天久久久| 99色热| 午夜福利成人免费视频| 色婷婷在线视频| 在线v中文字幕一区二区三区| 91高清无码下载| 久操网址| 丁香五月天啪啪| 大香蕉九九| 色爽爽文学| 97WW精品| A男人的天堂| 情色五月天就去干| 夜夜欢天天干| 91网九色蝌蚪操熟女| 家庭乱伦国产精品| 色欲蜜臀AV| 特级丰满少妇一级AAAA爱毛片| 熟女一区二区| 五月天婷婷激情| 日本 欧美 国产一区| 狠狠狠狠狠狠| 欧美1727免费观看视频| 日韩精品99久久久久久中文字幕 | 校园春色综合香蕉| 久久久久久久久久久999| 亚洲素人网| 91/欧美| 久久久久极品| 97av在线观看| 无码精品一区二区三区潘金莲| 动漫爆乳3D奶水一区在线观看| 日韩精品一区的| 久久久久13| 欧美白嫩在线放| 无毛精品| 免费国产电影一区二区| 盗摄女人妻在线| 六月婷婷激情| 韩国久久97| 国产乱弄免费在线视频。 | 国产精品一区av在线| 一区二区三区视频在线观看免费| 美女露胸露尿口| 九九九九九九免费视频| 色色色日本| 操逼啊啊啊91| 亚洲精品97p| 天天干18禁| 把腿张开老子CAO烂你| 色色色999| 老女人老91妇女老热女| 日本精品一级二级三级| 欧美性爱另类综合| 涩涩久久精品| 91被操| 开心五月婷婷| 蜜桃狠狠色伊人亚洲综合| 欧美成人性爱视频在线播放| 久久麻豆一区二区| 国产自啪精品视频网站黑丝| 波多野42部无码喷潮在线观看| 成人日韩欧美| 欧美色91| 免费作爱一级视频| 欧美激色| 美女91网址| 亚欧Av| 无码久| 最新日本中文字幕| 真实高潮91| 午夜传煤十二区精品| 日韩黄色成人性爱| 伊人色综合欧美| 天天操人人操狠狠插| 不卡九肏| 国产无码精品久久久久久| 校园春色之综合网| 高颜值美女口爆高潮浪叫| 91 亚洲 欧美 日韩 国产 综合| 亚洲免费精品一区| 日韩极品无码B| 亚洲熟妇无码一区二区三区| 97色碰| 91老司机在线视频免费观看| 色婷婷一区二区三区久久| 亚洲精品视频二区| 中国熟女91| 国产亚洲精品第一最新| 久久精品国产97欧美精品亚洲| 免费人成在线观看网站品爱网| 91网18| 国产精品爱欲| 亚欧操逼片在线观看| 人妻激情偷乱视三区频一区二区| 九九超碰综合网| 国产精品青草综合久久| 国产精品欧美在线观看| 日韩熟女精品无码专区一区二区| 插入逼91| 国产91专区| 免费一级视频特黄色大片| 亚洲极品| 色女女女导航| 亚欧性爱无码| 蜜桃AV天堂| 性色av婷婷久久一区二区点复制| 69久久| 大香蕉伊人网WWWn0n| 丁香婷婷五月| 日韩中文9| 操美女高潮抽搐白浆| 天天澡天天爽日日AV| 黄总AV色图| 99色热国产视频精品| 人妻熟女一区二区在线视频| 口爆综合网| 精品国产91av一区二区三区 | 偷拍 亚洲 欧美| 白丝少妇一区二区| 在线v中文字幕一区二区三区| 久久少妇| 天天情欲宗合网| 五月丁香啪啪啪| 久久久久亚洲三级电影| nuu12国产麻豆精品| 伊人亚洲国产一成人久久精品,久久| 欧美se综合| 91美女在线视频| 99色色| 秋霞操逼片| 亚洲欧美碰碰| 日韩78m视频| 大香蕉碰碰| 欧美视频边做饭边橾| 亚洲影视综合| 日本亚洲嫩草影院啪啪| 欧日韩在线观看| 夜夜爽爽爽| 亚欧国产无码精品在线| 人人性爱视频免费| 91欧美网| 精品丰满熟妇人妻一区| 4141514逼喷水三级片| 性爱av在线免费观看| 亚洲一区二区中文字幕| 又摸又舔在线观看网站| 久久人人妻| 强奸乱伦av电影| 92性色国产午夜福利在线661| 色九久| 学生妹天天看| 亚洲天堂日本| 999狠狠综合| 夜夜操狠狠操| 精品久热| 国产粉嫩出水在线播放| 一区二区视频在线播放| 久久国产热视频97电影| 国产精品久久久久久久久久梁医生| 超碰久超碰久| 91精品国产91久久久久久久久久久久| 啊啊啊啊好大好硬啊啊啊啊啊| 欧美熟妇操操视频| 欧美专区第一页| 天天欧美色| 日韩人妻制服丝袜av| 啪啪啪精品| 人人玩人人添人人澡免费| 国产精品播放| 中国AAAAAA黄色片| 欧美不卡在线一区二区| 日韩三级伊人| 人人操,人人插| 免费无码婬片AAAA片直播色戒| 尤物网站91| 国产福利视频精品视频| 精品人妻中文字幕高清| 天天爽夜夜爽夜夜爽精| 午夜一区二区三区国产| 伊人丁香五月婷婷| 亚洲天堂人妻熟妇视频| av强奸乱轮| 亚洲精品aa久久伊人| 亚洲欧洲综合视频在线| 在线99热| 江都AV在线| 裸模AV女优| 2019AV天堂| 久九9精品| 色噜噜狠狠色综无码久久| 综合网少妇| 中日韩免费看男女操逼大全| 国产美女在线精品免费看| 欧美色视频在线| 97在线视频免费| 国产精品不卡av免费在线观看| 美女操逼A A| 欧美国产欧美在线观看| 99久久99九九99九九九| 青青色综合| 亚洲情色一区二区三区| 丰满人妻-区二区三区免费看| 精品二区三四区五电影 | 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 超碰97国产欧美| 国产成人亚洲精品无| 天天爽夜夜爽夜夜爽精| av一区二区三区 中文| 福利风月五月天影院| 伊人久久大香线综合无码| 神马久久久久久久久| 69天堂| 国产精品女生av| 天天干天天干天天| 久久久久无码| 久肏视频字幕| 午夜AV人气不卡| 五月婷婷基地| 97超碰超欧美。| 激情婷婷综合久久| 国产小视频91| 美骚妇av高清在线| 国产精品九九九| 最新三级网址| 嗯~啊~快点 死我视频| 国产一区二区三区,在线观看观看| 神马麻豆福利院| 日韩A优精品在线观看| 男人的天堂亚洲| 51一区二区三区| 欧美亚洲素人制服精品| 久久思思热| 久久久久久99999国产精品| 国产91亚洲精品一区二区三区| 日韩欧美经典在线观看| 97精品久久久久中文字幕| 夫妻日逼| 婷婷五月色| 性九九九九九九| 91免费看一区二区三区 | 天天欧美| 成人午夜小视频手机在线看| 久久中出在线| 澳门黄片一香蕉视频| 9色在线| 在线洲亚线| 懂色AV蜜臀无码精品APP| 伊人久久国产免费观看视频| 翔田千里AV无码秘 三区| 亚洲国产一级精品毛一级精品看免费视频 | 日韩免费中文字幕视频| www鬼畜国产男人的天堂| 精品传媒在线一区| 另类专区在线观看| 天天躁日日躁狠狠狠躁| 国产美女mm131爽爽爽爽| 国产精品久久久久久久久久久久久久久| 亚洲AV成人精品网站在AV| 男人天堂一区二区| 国产精品熟女一区二区三区| 天天透伊人| 精品人妻av区天天看片| 综合网,亚洲,欧美| 国产91福利小视频在线观看 | 中文一区二区三区影院| 澳门成人网站久国产日韩| 大香蕉99re| 26uuu性| 狠狠色一区二区中文字幕| 亚洲字幕一区二区| 人妻喷水| 91色婷婷综合久久中文字幕二区| 欧美日韩亚洲天堂| 午夜福利久久久噜久噜久久综合 | 色哟哟-国产专区| 在线有码中文字幕| 99只有精品| 国产三区免费在线观看| 日本久久久久久久久久| 天天躁日日躁AAAXX| 天久久久噜噜噜久久国产精品爽爽 | 国产玖玖| 九九九九精品| 亚洲大胆人体av| 免費黃色視頻觀看一| 91久久国产精品| 中文字幕一区二区三区蜜臀| 日韩欧美成人性爱在线| 韩日自拍| 长长久久88视频| 色欲久久99精品久久| 九九黄色网| 国产黄色剧情影片麻豆免费播放| 一区二区蜜臀| 久草视频分类在线| 国产精品日本无码A片| 伊人青青草久久| 久久欧美性爱视频| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 亚洲黄色AV电影| 欧美无圣光在线| 欧亚乱色熟女一区二区| 亚州综合色| 五月天婷婷久久| 欧美夜夜草视频| 天天欧美97| 日本天天人人狠狠在线日美女 | 久久精品日韩专区免费观看| 欧美人人AAA| 青娱乐999| 日韩精品资源| 91色爽欧美| 色色五月婷| 日本天天操| 嗯嗯啊好爽| 亚洲色图欧美色图在线播放| 日本999精品视频| 五月天婷精品激情| 最新av中文字幕高清| 国产成人五月天丁香花| 91性感网站| 久久久工口| 伊人久久艹| 巨爆乳一区二区爆乳区| 欧美激情综合网| 91 偷| 亚洲色图欧美色图制服诱惑| 嗯嗯,啊啊,国产精品| 91碰碰碰| 超碰成人最新最好看| 日韩精品资源专区二区| 综合网天天| 亚洲日精品| 天天操天天日青青草超碰av| 久久中日麻豆| 神马福利久草| 强奸乱伦大香蕉| 无码久久亚洲高清,| 精品一区二区综合熟妇| 精品一区二区三区国产| 97精品视频| 欧美最大综合网| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 99xav| 日韩少妇丰满亚洲| 久99久视频精选| 激情综合97| 99热在线观看| 欧美一级色| 婷婷五月天av| 黄色AV影视| 精品人妻伦一二三区久久| 亚洲色久| 97电影院超碰| 亚洲色图殴美色图激情乱伦| 粉嫩在线一区二区懂色| 国产美女高潮叫床视频| 蜜乳AV.COM| 亚洲一卡2卡3卡4卡乱码网站| 国产精品久久久久久照片| 亚洲欧美日韩中文播放| 欧美传媒| 人人操人人摸人人看人人干| 少妇一级无码精品| 人人看人人爰人人操| 日韩成人精品视频自拍| 亚洲福利中文字幕在线| 婷婷色中文字幕| 久久超碰爱| 国产夫妻一区二区| 久久熟妇五十路一区| 亚洲网污污污污| 亚洲交换| 久草看看看| 我要去看2个日本美女.com曹逼| 国产精品人妻无码久久久互動交流| 91精品国产91久久青草| 久久久久久电影| 日韩乱伦视频| 天天天天操| 久久九七| 91在线国产后入风骚翘臀美女素人| 无码九九| 亚洲欧美日韩偷拍色图| 欧美日韩激情无码专区| 男男H黄动漫啪啪无遮挡网站| 欧美99| 精品十三区| 啊啊啊啊在线播放| 在线视频97| 黄色大香焦1级‘′‘| Julia在线播放亚洲久久| 欧美精品另类人妖xxxx| 91国内外在线| 少妇久久| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 精品综合久久久久久97| 大色综合| 人人操人人摸人| 欧美强奸乱能| 日韩内射视频| 东京热,男人的天堂| 韩美日操逼| 久精品无码av一区二免费国产在线观看| 欧美图片偷拍| 日本五区不卡| 私人尤物在线精品不卡| 在线观看日韩av不卡| 超碰97男人| 视频在线97| 天堂俺去俺来也www久久婷婷| 清柠毛片| 动漫av中文| 亚洲欧美国产va在线播放频| 99自拍视频在线| 亚洲麻豆精品二区三区| 亚洲凸凹超碰成人| 日B操| 95精品在线| 色哟哟AV| 日本东京热加勒比久久| 男人下部插入女人下部| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 97视频在线视频| 精品国产Av无码久久久伦古装| 青青草天天亲夜夜操网| 天天躁狠狠躁av| 日韩欧无码一区二区三区免费不卡| 日本色婷婷| 啊啊啊啊在线播放| 黑人狂躁日本妞一区二区三区| 天天做天天爽| 色网亚洲人| 日韩一区二区三区四区五区| 成人色女网| 波多野结衣之双飞调教在线播放| 97超碰国产亚洲精品资源| 黄色一区三区| 99久久久er直播网址| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 香蕉色网| 黄片免费久久久久久久| 久噜噜| 亚洲伊人久久综合97| 91色碰| 青娱乐休闲视频在线观看| 久久婷婷精品| 日韩图色| 97亚洲综合电影| 蜜臀视频网站| 欧美制服另类丝袜| 精品欧美老熟女一二区| 日本淫色网| 99无码| 午夜精品久久久99| 老熟女搡BBBB搡BBBB视频| 日欧毛片久久| 亚洲国产成人福利在线观看| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 国产精彩女在线观看视频| 青青伊人这里只有精品| 99re这里只有精品中心播放| 国产自制av蜜乳| 国产高清不卡视频| 久久久久久久亚洲Av无码| 999 久久久| 亚洲国产欧美中日韩成人综合视频| 9久9久| 99在线精品观看99| 大学生美女口爆| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 黄色高清久久无码依人| 视频黄色国产一级| 午夜经典| 视频二区美腿丝袜制服人妻欧美| 网站A V在线| 国产久久久久影院老熟女| 国模精品娜娜一二三区| 91精品丝袜久久久久久| 午夜成人福利影视| 久久久免费的精品| 伊人97| 91久久伊人婷婷青青草| 天天色播亚洲综合网站| 91伊人| 欧美午夜色妇色鬼| 丁香五月天激情网站| 七月丁香婷婷| 啊啊好多水| 久久曰曰| 亚洲国产奇米影视久久| 久久久久久九九九九九 | 国产一区二区三区视频在线看| 激情文学小说一区二区| 久久9亚洲| 国产专区第一页| 99re免费| 超碰久草| 欧美色吧综合| 日本免费一区二| 极品极品色影院| 黄色香蕉视频网站一区| 欧美色图97| 婷婷五月天久久精品视频一区二区三区| 亚洲色图日韩精品| 亚洲交换| 国产精品 午夜福利| 九九综合久久| 久久精品国产亚洲AV高级北京| 97免费视频在线| 无卡一区=区| 啊啊好多水| 粉嫩国产精品久久粉嫩| 神马久久久久久伦理片| 97操| 78精品| 福利五区| 日日黄色三级网站| 久久色激情一区二区三区| 国产热RE99久久6国产精品首| 蜜臀99久久国产| 热热热热日日漂亮永久永久国产日| 香蕉久久国产AV一区二区| 岛国A V在线免费看| 欧美高清91| 偷拍亚洲视频一区二区三区四区| 精品然女一区二区| 天堂资源欧美| 婷婷爱五月| 丁香色色网| 人人透人人操| 草草影院最新网址| 中文字幕精品一区二| 久久久96| 精品福利| 可乐操在线| 综合五月天| www.人人摸在线视频| 天天情欲宗合网| 老司机久久| 亚洲污污网站| 九九九精品一区二区无码| 亚洲一本色码中文字幕| 久久国产精品91| 青青草自拍视频在线播放| 91大胆欧美| 日韩无码嘿咻黑热久| 综合久久99| 超碰79人人乐| 日韩女优中文字幕| 人人澡人人爽人人精品| 成人欧美一区二区三区黑人一| 伊人婷婷五月天| 丰满人妻-区二区三区免费| 日本理论在线| 妺妺跟我一起洗澡没忍住| 亚洲AV无码乱码在线观看性色| 国产免费久久久久| 欧美性爱中文字幕无线码| 国产97视频免费观看| 国产福利精品最新在线| 成人精品在线观看| 亚洲av影音先锋| 999国产精品999| 久久怡红院| 亚洲综合888| 91在线限制级| 超碰97久久国| 国产精品丝袜在线| 97在线观看| 久久在肏| 超清福利精品视频在线| 欧美性五月| 激情婷婷五月天| 熟妇人妻一区二区三区| 九色 蝌蚪 熟女自| 免费精品人妻一区二区三| 欧美少妇性爱网站| 色色色色电影网| 色婷五月| 中文字幕在线观看AV| 日韩天天本| 伊人性在线视频| 欧美色图电影| 国产又黄又爽又刺激久久久久久| 91人妻素女| 日韩人妻精品久久久久| 用力操死我| 99re在线视频国产| 97超碰色色| 国产成人无码啪| 亚洲日韩成人性爱视频| 久热色情精品| 欧亚日韩综合精品国产| 2017天天操| 欧美极品美女aaaaaa级黄片| 国产精品激情久久久久久久| 婷婷在线视频| 亚洲素人网| 亚洲色图A| 一级做a爰片久久毛片图片| 91九九| 欧美日韩精品久久| av影院十区| 日韩高清黄片| 五月丁香六月婷| 99在线啪| 97超碰欧美| 亚洲偷拍自拍在线视频| 色九月综合| 亚州性色| 啪啪啪综合网| 狠狠色婷婷777| 97精品国产精品免费观看| 精品无吗m| 静品嫩模一区二区| 人妻大相焦在线| 97在线免费看视频| 在线观看国产黄色| 中文幕97| 99av| 91色婷婷综合久久中文字幕二区| 精品美女少妇一区二区三区| 3PAV乱伦视频| 国产精品青草综合久久| 日韩78m视频| 亚洲欧美色图小说| 亚洲天堂色图| 欧美A√综合网| 亲子敌伦对白在线播放| www.狠狠| 99在线观看视频在线高清| blacked精品一区国产| 美国美女AV在线| 色香综合| 天天干少妇| 一区二区三区一亚洲中文字幕、综合区灬 | 午夜精品久久久久久久| 黄色激情电影在线观看| 久久精品国产72国产精品福利| 97精品国产精品免费观看| 日本人妻伦在线中文字幕| 97日本超碰综合| 色悠久| 婷婷精品| 91岛国动作片| 激情一区二区三区在线观看| 青青五月天| 手机看片1025| 天天色综合影视网| 少妇滛荡视频| 人妻精品一区二区三区| 99精品在线| 九九九九九九综合| 色婷婷综合视频| 久久久性爱| 国语精品av| 操逼逼中文字幕| 精品美女久久一二三| 一区二区三区黄色片a| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 欧美99热| 免费在线视频97| 欧洲综合视频| 亚洲人体视频在线观看| sss视频华人在线| 国产黄色在线播放观看| 欧美夜色| 亚洲精品人妻吞精av| 欧美国产一区二区三区麻豆传媒| 2018天天干在线视频| 嫩草黄页| 日日夜夜天天| 三男一女不戴套的A片| 久艹伊人精品综合在线| 波多野结衣被操50分钟免费视频| 亚洲精品 欧美精品| 成人黑料社久久| 亚洲天天操| 肥臀熟女福利视频一区二区| 日韩中文字幕精品一区在线| 99热日| 亚洲中文字幕噜噜噜久久久| 操逼网免费无码视频| 精品人妻1区| 一区| 欧美成va视频网站| 亚洲日韩电影| 性色国产东北露脸精品视频| 一区二区三区四区免费视频| 激情情色五月天| 91色艳| 久久国产热视频97电影| 久热网| 五月天久久久| 性色av大全| 淫纸中9区| xxx亚洲午夜天堂| 日韩欧美亚洲一区二区三区影院| 就去色综合| AV丝袜少妇| 99精品在线观看| 国产精品熟女九色九色蜜臀| 国内毛片四区| 夜夜夜久久| 日本3级一区二区免费| 少妇熟女1区2区3区| 欧美九一精品久久久熟妇| 日本人妻一区二区| 淫荡少妇免费| 黑人娇小av在线播放| 色香综合天天影视综合| 啊啊啊啊视频免费| 伊人女女资源在线观看| 酒色综合网| 春色综合免费| 日本不卡二三区| 91久久国产综合久久| 人人操人人操草草| 视频不卡中文字幕| 久久熟女嫩草成人片免费| 久久111| 99热这里只有精| 久久性爱城| 乱伦一二三区| 久久老女人| 一本色道人妻久久| 精品乱码在线观看| 日韩 欧美 校园一区| 久久久久9| 女人喷水视频在线观看| 无码 黑人一区二区三区| 97国产精品视频| 麻豆成人AV| 激情终合网| 亚洲一二三精品久久网| 免费夜夜爱黄色视频毛片| 久久久夜夜嗨免费视频| 久久九九视频九九视频| 亚洲无无码αⅴ每日更新| 一二三区精品视频| 欧美春色| 麻豆天美在线| 日韩综合97p| 偷拍导航视频网站| 午夜福利在线合集| 精久久久91| 久久国产精品91| oumeisetu综合| 另类图片五月| 美女刺激久久国产欧美| 伊人AAA| 亚洲精品久久久久久久蜜桃臀| 女人午夜视频777| 国产成人免费观看在线视频| 口爆吞精在线观看| 成年女人黄网站| 国产高清MV操逼视频| 精品午夜福利国产一区二区在线观看| 国产精品免费1区2区视频| 天天夜躁日日躁狠狠2002| 2018天天日天天日| 亚洲春色欧美激情自拍| 亚洲av噜噜噜噜噜噜| 一级人妻性爱视频| 看大黄色大片原件| 亚洲中文国际强奸字幕| 国语精品内射在线观看| 综合自拍|