娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

本篇目標:在之前的硬件基礎上,修改ST官方移植lwip的工程,使PC機能ping通stm32


材料準備:


硬件基礎:stm32f407+lan9303

官方資料:包含代碼和移植手冊(stm32官方移植lwip資料)

修改代碼:包含移植后的代碼(STM32官方移植lwip修改代碼)

跟著文件路徑打開其中一個工程,先選擇不帶操作系統(tǒng)的練習測試 

文件路徑:STM32F4x7_ETH_LwIP_V1.1.1 -> Project -> Standalone -> tcp_echo_server -> MDK-ARM -> Project.uvproj


先編譯一下,出現3個Warning,其中兩個是變量定義未使用,不影響暫且不管,還有一個是ethernetif.c文件最后沒有空白行,手動添加一行,再次編譯~ 

消除所有錯誤警告~成功開始的第一步~


從main函數開始理解并修改(英文為官方注釋,中文為修改注釋):


int main(void)

{

  /*!< At this stage the microcontroller clock setting is already configured to 

       168 MHz, this is done through SystemInit() function which is called from

       startup file (startup_stm32f4xx.s) before to branch to application main.

       To reconfigure the default setting of SystemInit() function, refer to

       system_stm32f4xx.c file

     */


  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);


#ifdef SERIAL_DEBUG

  DebugComPort_Init();  

#endif


  /*Initialize LCD and Leds */ 

  //LCD_LED_Init();    //硬件沒有LCD,也暫時不用LED,將函數注釋掉


  /* configure ethernet (GPIOs, clocks, MAC, DMA) */

  ETH_BSP_Config();    //MAC-PHY配置函數,主要理解修改函數


  /* Initilaize the LwIP stack */

  LwIP_Init();    //lwip初始化函數


  /* tcp echo server Init */

  //tcp_echoserver_init();    //tcp服務器建立函數,暫時只建立ping工程,將函數注釋掉


  /* Infinite loop */

  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);

  } 

}


main函數中有兩個修改:


注釋 LCD_LED_Init() 函數,暫時用不到

注釋 tcp_echoserver_init() 函數,暫時用不到

其次進入主要配置函數 ETH_BSP_Config() :


這個函數中修改的內容只有一個,找到 DP83848_PHY_ADDRESS 的宏定義(在 stm32f4x7_eth_bsp.h 的第52行),修改原先的 0x01 為 0x00 地址,那么這個地址是怎么來的,等到代碼解析的時候再做解剖

函數中重點關注 ETH_GPIO_Config() 函數和 ETH_MACDMA_Config() ,這兩個函數分別是配置RMII接口相關GPIO口的復用,配置MAC控制器和使能DMA

接著看 ETH_GPIO_Config() 函數: 

由于官方移植lwip用的是MII接口,而之前搭建的硬件接口是RMII,所以需要修改相關宏定義和 GPIO口的復用


void ETH_GPIO_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;


    /* Enable GPIOs clocks */

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|

                           RCC_AHB1Periph_GPIOB|

                           RCC_AHB1Periph_GPIOC,

                           ENABLE);     //我們只用到了A,B,C三種引腳,所以修改成只使能A,B,C三個的時鐘


  /* Enable SYSCFG clock */

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能SYSCFG外設時鐘


  /* Configure MCO (PA8) */

  //配置PA8(做為MCO功能)輸出時鐘信號

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;  

  GPIO_Init(GPIOA, &GPIO_InitStructure);              



  /* MII/RMII Media interface selection --------------------------------------*/

#ifdef MII_MODE

 #ifdef PHY_CLOCK_MCO


  RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); //在PA8引腳上輸出25MHZ的時鐘信號

 #endif /* PHY_CLOCK_MCO */


  SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII);  //與PHY芯片通訊選擇MII模式


#elif defined RMII_MODE  //這里要修改宏定義,注釋MII_MODE,取消注釋RMII_MODE,選擇RMII接口模式與PHY芯片進行通訊 


  RCC_MCO1Config(RCC_MCO1Source_PLLCLK,RCC_MCO1Div_2); //添加時鐘函數,在PA8引腳上輸出50MHZ時鐘信號


  SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); //與PHY芯片通訊選擇RMII模式

#endif


/* Ethernet pins configuration ************************************************/

   /*

        ETH_MDIO -------------------------> PA2

        ETH_MDC --------------------------> PC1

        ETH_RMII_REF_CLK------------------> PA1

        ETH_RMII_CRS_DV ------------------> PA7

        ETH_RMII_RXD0 --------------------> PC4

        ETH_RMII_RXD1 --------------------> PC5

        ETH_RMII_TX_EN -------------------> PB11

        ETH_RMII_TXD0 --------------------> PB12

        ETH_RMII_TXD1 --------------------> PB13

                                                  */

  //修改下面所有對GPIO的初始化為對應RMII接口GPIO的初始化,而RMII所用到的引腳在上面的列表中,共9個引腳

  /* Configure PA1, PA2 and PA7 */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH);

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);


  /* Configure PB11,PB12 and PB13 */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);   

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_ETH);

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH);


  /* Configure PC1, PC4 and PC5 */

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5;

  GPIO_Init(GPIOC, &GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);

  GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);

  GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);

}


總結修改之前,先做一下RMII接口相關引腳的功課:


ETH_MDIO ————————> PA2

ETH_MDC ————————–> PC1

ETH_RMII_REF_CLK—————> PA1

ETH_RMII_CRS_DV —————> PA7

ETH_RMII_RXD0 ——————> PC4

ETH_RMII_RXD1 ——————> PC5

ETH_RMII_TX_EN —————–> PB11

ETH_RMII_TXD0 ——————> PB12

ETH_RMII_TXD1 ——————> PB13

修改總結:


修改GPIO時鐘使能函數 RCC_AHB1PeriphClockCmd() ,因為只用到了ABC三個引腳,所以修改成只對A,B,C三個引腳進行時鐘使能

修改宏定義,因為用的是RMII接口,所以要注釋掉MII_MODE的宏定義,取消注釋RMII_MODE的宏定義,這兩個宏定義在main.h文件的79行和87行

添加配置PHY時鐘函數 RCC_MCO1Config() ,添加在 #elif defined RMII_MODE 的下面即可

修改GPIO口初始化成RMII接口的GPIO,這里包括了對GPIOA,GPIOB,GPIOC的初始化以及將三個GPIO口的復用成RMII接口所用

接下來要來看 ETH_MACDMA_Config() 函數中的最后一個函數 ETH_Init() ,這個函數包含了所有MAC控制器相關初始化的配置,所以定位到這個函數 

stm32f4xf_eth.c第416行開始:


    /* Reset Timeout counter */

    timeout = 0;

    /* Read the result of the auto-negotiation */

//    RegValue = ETH_ReadPHYRegister(PHYAddress, PHY_SR);

    /* Configure the MAC with the Duplex Mode fixed by the auto-negotiation process */

//    if((RegValue & PHY_DUPLEX_STATUS) != (uint32_t)RESET)

//    {

      /* Set Ethernet duplex mode to Full-duplex following the auto-negotiation */

      //注釋掉其他所有內容,只留下下面兩個函數:配置為全雙工

      ETH_InitStruct->ETH_Mode = ETH_Mode_FullDuplex;  

//    }

//    else

//    {

      /* Set Ethernet duplex mode to Half-duplex following the auto-negotiation */

//      ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex;           

//    }

    /* Configure the MAC with the speed fixed by the auto-negotiation process */

//    if(RegValue & PHY_SPEED_STATUS)

//    {  

      /* Set Ethernet speed to 10M following the auto-negotiation */

//      ETH_InitStruct->ETH_Speed = ETH_Speed_10M; 

//    }

//    else

//    {   

      /* Set Ethernet speed to 100M following the auto-negotiation */ 

      //注釋掉其他所有內容,只留下下面兩個函數:配置為100M以太網

      ETH_InitStruct->ETH_Speed = ETH_Speed_100M;

//    }


修改內容:


注釋掉 stm32f4xf_eth.c 第416-441行的其他內容,只留下 ETH_InitStruct->ETH_Mode = ETH_Mode_HalfDuplex; 和 ETH_InitStruct->ETH_Speed = ETH_Speed_100M;

至此為止,代碼修改結束,編譯下載到板子上 

如果想要修改ip地址,可以找到main.h里面的宏定義:


/*Static IP ADDRESS: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */

#define IP_ADDR0   192

#define IP_ADDR1   168

#define IP_ADDR2   0

#define IP_ADDR3   10


修改成自己想要的IP地址便可以了,接下來用pc機來ping一下


ping之前,要確定兩件事:


首先確定pc機連入的網絡ip地址和stm32的ip地址是不是同一個網段: 

  1. 確定網段 
    這里192.168.0.1和192.168.0.10就處于同一個網段

  2. 其次如果是將stm32用網線接入路由器,則要確定stm32所使用的ip地址沒有被占用,檢測方法就是接入stm32前,先ping設定的地址,看能不能ping通,不能ping通表示沒有被占用;這里是直接用網線連接stm32和pc機,所以不用擔心這個問題


接下來可以用pc機ping下載好程序的stm32 
win+R打開運行,輸入cmd,回車 
在命令行下輸入ping 192.168.0.10 
ping通成功,有圖有真相 
ping


總結: 
官方移植程序幫忙做了很多事情,可以方便使用,那么修改也不外乎這么幾個地方,多多測試注意就可以成功,當能ping通,搭建好硬件軟件環(huán)境之后就可以安心地一步步調用lwip的API接口函數建立服務器,客戶端等等了。


關鍵字:STM32  移植lwip  工程修改 引用地址:STM32移植lwip之官方工程修改

上一篇:STM32F407VGT6+LAN8720 調試筆記
下一篇:STM32F407 以太網 外部提供時鐘源的驅動修改錯誤總結

推薦閱讀

人們總將機器人和機械手與高度發(fā)展的自動化制造業(yè)聯(lián)系在一起。精準、高效、靈巧的機械手早已在諸多工業(yè)領域成為人類的好幫手,通過不斷協(xié)同合作,為我們的生活、出行、家居帶來各種智能化產品。 然而,這些同樣靈巧的機械手也正默默地推動著地球的環(huán)保事業(yè),但很少受到關注。直到最近蘋果的一幅廣告,闖入人們的眼簾:這則廣告正是蘋果公司為回應每年4...
在汽車上,安全氣囊和安全帶一樣都是屬于典型的被動安全保護裝置,安全氣囊的英文名稱為SRS,“SRS”的全稱是Supplemental Inflatable Restraint System,原意是輔助乘員約束系統(tǒng),從這里就可以看出氣囊是“輔助性的”,并不是作為主要的安全保障作用的。我們可以簡單將安全氣囊視為安全帶的輔助裝置。安全氣囊的結構原理汽車安全氣囊一般由傳感器、微...
STM32Cube 是一個全面的軟件平臺,包括了ST產品的每個系列。平臺包括了STM32Cube 硬件抽象層(一個STM32抽象層嵌入式軟件,確保在STM32系列最大化的便攜性)和一套的中間件組件(RTOS, USB, FatFs, TCP/IP, Graphics, 等等).直觀的STM32微控制器的選擇和時鐘樹配置微控制器圖形化配置外圍設備和中間件的功能模式和初始化參數C代碼生成項目覆蓋STM32微控...
集微網消息,韓國科學技術信息通信部6月24日宣布,明年將在國家研發(fā)項目上投入23.5萬億韓元(合208.46億美元)。其中,2.48萬億韓元(合22億美元)將用于生物技術和醫(yī)療保健、未來汽車和系統(tǒng)級芯片(SoC)產業(yè)。上述年度預算將在本月提交給韓國財政與經濟部,如果獲得通過,將于9 月提交給國民議會。據悉,韓國去年在國家研發(fā)項目上投入金額為22.5 萬億...

史海拾趣

問答坊 | AI 解惑

MAX743雙輸出集成穩(wěn)壓器

MAX743雙輸出集成穩(wěn)壓器…

查看全部問答∨

從責、權、利統(tǒng)一到團隊合作

責、權、利統(tǒng)一的思想在人類歷史長河中一直存在。在中國古代的傳統(tǒng)文化中,就有責、權、利的思想體現,《岳陽樓記》中的“先天下之憂而憂,后天下之樂而樂”道出了一個封建士大夫立志要為天下蒼生謀福解憂的抱負。在十年浩劫中,由于時代的原因,很 ...…

查看全部問答∨

ARM9200的usb工作不穩(wěn)定???

使用ARM9200+ USB Modem ,內核選項使用USB ACM驅動,系統(tǒng)運行后,驅動加載成功,也可以撥號成功, 但是通過監(jiān)視,發(fā)現通訊時發(fā)送數據正常,接收數據基本都有亂碼,FCS校驗都出錯,所以產生大量丟包。 開始懷疑是系統(tǒng)ACM驅動的問題,但是換ARM241 ...…

查看全部問答∨

請問wince環(huán)境下如何通過gprs遠程無線與exchange服務器同步?

windowsmobile下手機上有個內置的activesync客戶端一直在運行的,wince下不知道有沒有這個東西,如果有,使用方式和wm下是一樣的嗎?謝謝…

查看全部問答∨

EK-LM3S811_ND Rev3在部分XP系統(tǒng)下驅動安裝問題

首先,提一點我的EK-LM3S811_ND Rev3板載調試器用的是LMeb3601.然后呢,我就在我的XP系統(tǒng)上安裝的驅動,一開始只能裝一個就是如圖所示的COM7,其余兩個如何也裝不上,我當時懷疑是板子的問題,查資料,詢問有經驗的人,兩天過后突然想,是不是我的 ...…

查看全部問答∨

利用CCSV5.1自帶的430ware的強大資源庫學習MSP430

本人為在校大學生,以前一直用的是51.八月初的時候被老師拉過來參加“TI杯”模擬電子專題邀請賽,這才接觸到了MSP430。學校發(fā)了三塊開發(fā)板,一塊launchpad、一塊MSP430FR5739、一塊是MSP430F5529。這些板子用著感覺都挺好的,只可惜賽后都被收回去 ...…

查看全部問答∨

lcd屏幕驅動問題

我現在有個lcd屏幕,2440,wince5.0下,修改了部分驅動后顯示呈現鏡像,就是像照鏡子一樣,如何修改驅動,把它顯示正常? 我想是不是修改掃描的方向,我原來的屏幕每行是從左往右顯示,而現在的屏幕是從右往左,所以導致界面顯示反了,如果是這樣 ...…

查看全部問答∨

AD使用問題,求助

想添加3D模型,可是這個確認按鈕不在了,怎么破。或者是哪位大神有和諧的更好的AD10軟件,給分享一下,萬分感謝 …

查看全部問答∨
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 台东县| 潼南县| 南投县| 徐闻县| 西乡县| 平潭县| 沅江市| 德州市| 彭阳县| 开化县| 运城市| 双桥区| 永春县| 南阳市| 万宁市| 伊宁市| 桦川县| 上高县| 肥城市| 中江县| 凤冈县| 汉川市| 蓝山县| 临高县| 巴彦县| 固安县| 江城| 巴林左旗| 东兴市| 南充市| 新兴县| 永新县| 吴江市| 石泉县| 咸丰县| 灯塔市| 碌曲县| 渑池县| 怀安县| 马山县| 江口县|