前言
STM32CubeMX_以太網_RMII_LwIP_UDP
很早之前的這篇中用的是RAW API
, 直接在While(1)中輪詢, 不能多線程工作, 本篇用STM32CubeMX 5.4.0創建FreeRTOS LwIP工程, 可以多線程. 仍然使用的是ST官方的NUCLEO-F767ZI
板子, 板子外掛的網絡PHY芯片是LAN8742.
新建工程
步驟如下:
- MCU選擇: 打開
STM32CubeMX
, 點擊ACCESS TO MCU SELECTOR
, 選擇STM32F767ZI
Pinout & Configuration
->System Core
->SYS
->Debug
選擇Serial Wire
, 調試端口配置爲SWD,Timebase Source
選擇一個TIM3
, 這樣可以避免HAL庫和FreeRTOS都默認用Systick
.Pinout & Configuration
->System Core
->RCC
->HSE
選擇Crystal/Ceramic Resonator
Clock Configuration
:
ETH配置
Pinout & Configuration
-> Connectivity
-> ETH
-> Mode
選擇 RMII
:
然後發現引腳中默認的如下圖, 和原理圖不匹配, 主要是ETH_TX_EN
和 ETH_TXD0
, 找到原理圖中的引腳, 單擊自己去重映射就好了, 配置完後引腳應爲下面兩圖:
原理圖中LAN8742的PHYAD0
引腳下拉到地, PHY Address
改爲0:
勾選ETH中斷(要用FreeRTOS
):
FreeRTOS配置
Pinout & Configuration
-> Middleware
-> FREERTOS
, Interface
選擇CMSIS_V2
:
點擊Tasks and Queues
中的defaultTask
, Stack Size
從128(運行不起來)改爲1024或更大:
LwIP配置
Pinout & Configuration
-> Middleware
-> LwIP
, 勾選使能:
Configuration
-> General Setting
中把默認的DHCP改爲靜態IP: 192.168.0.10.
生成代碼
Project Manager
-> Project
-> Browse
選擇工程位置(Project Location
), 填入工程名(Project Name
), Toolchain/IDE
選擇 MDK-ARM
.
Project Manager
-> Code Generator
-> 勾選Copy only the necessary library files
, 還有Generate peripheral initialization as a pair of .c/.h files per periphral
點擊右上角 GENERATE CODE
按鈕生成代碼, 打開工程.
Keil 點擊魔術棒或者Project
-> Options for Target ...
, 默認配置Debug
爲ST-link Debugger
, 點擊Setting
-> Flash Download
-> 勾選Reset and Run
, 這樣下載後可以自動復位運行.
編譯下載運行ping
第一次編譯可能時間比較長, 編譯完後下載. 連接好網線到PC, PC注意切換以太網口, 別搞成WiFi了, IP地址如下:
因爲STM32CubeMX裏面配置的靜態IP是 192.168.0.10
, 所以PC的IP需要同一網段任意其他IP即可.
編譯下載, 打開windows終端, ping一下192.168.0.10
:
可以ping通, 程序正常運行.
微信公衆號
歡迎掃描二維碼關注我的微信公衆號, 及時獲取最新文章: