STM32 以太網學習


 

STM32進行以太網通信,需要  了解一下內容:

  硬件層:MAC控制器  和  PHY 和 變壓器 .

  軟件層:網絡協議棧,例如:lwip協議棧,RL-TCPnet協議棧,FreeRTOS-TCP協議棧,uIP協議棧。

 

MAC控制器

  STM32F107/STM32F407自帶 MAC控制器,有的芯片把MAC和PHY做到了一起,像ENC28J60。

 

 LWIP 協議棧 移植 需要資料如下:

 官方  LWIP 源碼 下載 ,   官方 LWIP 文檔說明  最新版本 2.1.2 ,2018年12月29日15:34:07

1、網卡驅動移植,即 實現  struct netif  網卡 數據結構,里面包含數據收發函數 等等 ,詳細:https://blog.csdn.net/zhzht19861011/article/details/6690534

2、操作系統接口移植,即 sys_arch.c 以及 sys_arch.h  ,cc.h 的編寫 ,包含創建線程,信號量 等創建接口,以及 系統時間獲取接口等等  ,詳看  https://blog.csdn.net/ZCShouCSDN/article/details/80198116

3、lwip 功能 裁剪,即 lwipopts.h 文件編寫  的編寫,主要包含 ,內存配置,以及功能 裁剪 ,詳看  :https://blog.csdn.net/slj_win/article/details/16959055

4、lwip 收發數據的 數據結構 pbuf 結構 嵌超全的LWIP內存管理經驗總結

 

移植案例 :  https://github.com/suoZhangEmbedded/stm32h7_freertos

 

 

 

緊接着 以太網通信  依據 TCP\IP協議,但是這個協議太大了,STM32上運行不了,而有一個簡化版的TCP/IP協議是  LWIP協議,這個LWIP 協議是可以運行在STM32上面的。

下面就是LWIP協議移植到STM32F107上  。。。。  2015年8月14日17:28:29

首先下載LWIP協議棧({{{后面發現沒啥用,因為ST 給移植好了}}})和STM32F107為以太網外設專門做的庫({{{后面發現不是庫,是移植LWIP好的工程}}})。

LWIP協議棧下載地址:  (下載兩個文件  名稱分別為 contrib-1.4.1.ziplwip-1.4.1.zip注: (2015年8月15日13:13:08這個時間 是這個版本)

http://ftp.twaren.net/Unix/NonGNU//lwip/

STM32F107為以太網外設專門做的庫下載地址:(在頁面的最下面: 文件名稱為:stsw-stm32026.zip)  注: (2015年8月15日13:14:12這個時間 是這個版本)

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1734/PF257862#

 

      筆者再下載之前,以為這個文件(stsw-stm32026.zip)只是一個庫函數(一個eth.C文件,一個eth.H文件) ,讓我們調用.實際不是這樣的,是一個移植好LWIP協議的一個好的(可以編譯通過)keil工程。

     筆者正在閱讀這個工程,在閱讀這個工程之前下載了這個工程的說明文檔(和下載工程在同一個界面(AN3102Application note)),但是是英文的,筆者C和英文不是學的很好,正在閱讀中…… 2015年8月16日22:10:28  

  ethernetif.c stm32_eth.c:在這個工程文檔中有這樣的一段話,協議棧(LWIP)和以太網控制器(MAC)的連接文件是ethernetif.c stm32_eth.c。     英文原句:For the STM32F107xx, the ethernetif.c (under Utilities\lwip-1.3.1\src\netif) and stm32_eth.c(under Libraries\STM32_ETH_Driver) files constitute the low-level layer, which is theinterface between the stack and the Ethernet controller. 這兩個文件怎么連接的,現在還不清楚!

     netconf.c:為了使LWIP協議棧的周期任務能正常工作,還利用一個定時器為協議棧工作,有一個函數負責調度LWIP協議的任務。這個函數是LwIP_Periodic_Handle,定義在netconf.c中,注意這個文件不是協議棧LWIP的文件。主要功能包括:LWIP初始化,MAC地址和IP地址設置等等。

  opt.h:協議棧的初始化參數在opt.h中可以找到,依靠opt.h修改后的新文件lwipopts.h,這個文件包含了LWIP協議棧為STM32F107做的一些修改!修改內容如下:

                 1、DHCP是否被使能,參數設置是LWIP_DHCP
      2、TCP和UDP的連接數量,分別參數是MEMP_NUM_TCP_PCB 和MEMP_NUM_UDP_PCB
      3、堆棧的數量設置參數是MEM_SIZE
                 4、緩沖區的數量和大小,參數是 PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE
        5、更詳細的請參考文件lwipopts.h 。

PHY 接口配置:MII 和RMII 為STM32F107連接PHY的 兩種接口模式,在stm32f107.c文件中有兩個宏定義,想用哪個接口,就把另外一個接口宏定義屏蔽掉。
此次編輯時間:2015年8月19日15:10:08

看了上面的源代碼簡單說明,筆者准備找個開發板試驗一下(開發板硬件說明: 芯片STM32F107,DM9161,HR911105A分別對應 MAC,PHY,以太網變壓器)

2015年8月23日08:00:34 ,之所以這次更新和上次相差了很多的時間,是因為筆者想把這個工程下載到開發板運行起來,我想是不是得修改STM32F107(MAC)和DM9161(PHY)之間的連線,看了一段時間后發現開發板上的線和代碼上的線是一樣的,只不過PHY有個地址是1(某個引腳控制的拉高是1,拉低是0)),開發板上是1,程序里面是0,就修改這個,編譯,下載到開發板,代碼跑起來了,現在程序跑起來了,很是激動,雖然沒我多大的貢獻MAC,PHY,以太網變壓器怎么連接的稍后會加進來.

2015年8月26日11:11:33,代碼跑起來了,准備進行  UDP  數據傳輸。

 打開 ST公司官方提供的以太網例程stsw-stm32070,工程里面有兩個選項,一個是FreeRTOS和Standalone,可以理解為一個是操作系統,一個是“裸奔”,筆者還沒有學習過操作系統,因此在這時暫停STM32F407以太網的學習,去學習實時操作系統。2015年10月14日16:04:41


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM