前言
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通, 程序正常运行.
微信公众号
欢迎扫描二维码关注我的微信公众号, 及时获取最新文章: