FreeRTOS LwIP STM32CubeMX

前言

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_ENETH_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 ..., 默認配置DebugST-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通, 程序正常運行.

微信公衆號

歡迎掃描二維碼關注我的微信公衆號, 及時獲取最新文章:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章