日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

發(fā)布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文使用了正點原子的阿波羅開發(fā)板,接下來我將粗略的對STM32F767通過STM32cubeMX進行以太網(wǎng)協(xié)議配置。

具體步驟

1.首先使能ETH,模式選擇RMII;

2.使能LWIP和FREERTOS;

因為阿波羅的開發(fā)板PHY芯片的ETH_DXT1和ETH_DXT0用的是PG13,PG14引腳,和默認的不同,所以這里改一下

3.配置時鐘,在這里我放上我自己的時鐘配置圖,只要不標紅就行,我用的是25MHz外部晶振作時鐘源 ;

4.配置ETH,由于阿波羅開發(fā)板的LAN8720芯片的PHYAD0引腳懸空,故PHY Address設(shè)置為0;

5.由于我用的STM32cubeMX的版本是將LAN8742A作為默認芯片,所以我們這里不做修改,只用將內(nèi)部參數(shù)改為LAN8720參數(shù)即可;

6.配置LWIP,本人這里不使用DHCP獲取IP地址等信息,并且我使用的是TCP,所以未對UDP使能,設(shè)置如圖;

7.配置FREERTOS,我在這里加了兩個線程備用

8.按下生成按鈕,生成項目,生成時需要選擇編譯軟件為自己用的軟件,本人使用的是V5;

由于阿波羅開發(fā)板的PHY芯片的RESET引腳是依靠PCF8574的P7位控制,所以我們要在項目中引入PCF8574的代碼,以下代碼可以在阿波羅資料盤中找到

打開main.c里的加上#include “pcf8574.h”,并在初始化部分將PCF8574初始化

/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f7xx_hal.h"

#include "cmsis_os.h"

#include "lwip.h"

#include "gpio.h"

/* USER CODE BEGIN Includes */

#include "pcf8574.h"

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

void MX_FREERTOS_Init(void);

/* USER CODE BEGIN PFP */

/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**

* @brief? The application entry point.

*

* @retval None

*/

int main(void)

{

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */

HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */

SystemClock_Config();

/* USER CODE BEGIN SysInit */

PCF8574_Init();

/* USER CODE END SysInit */

/* Initialize all configured peripherals */

MX_GPIO_Init();

/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/* Call init function for freertos objects (in freertos.c) */

MX_FREERTOS_Init();

/* Start scheduler */

osKernelStart();

/* We should never get here as control is now taken by the scheduler */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

}

/* USER CODE END 3 */

}

打開freertos.c里的加上

#include “gpio.h”

#include “sys.h”

#include “pcf8574.h”

#include “tcp_echoserver.h”,并在主線程將PCF8574初的P7管腳使能

PCF8574_WriteBit(ETH_RESET_IO,0);代碼如下

/* Includes ------------------------------------------------------------------*/

#include "FreeRTOS.h"

#include "task.h"

#include "main.h"

#include "cmsis_os.h"

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

#include "gpio.h"

#include "sys.h"

#include "pcf8574.h"

#include "tcp_echoserver.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN Variables */

/* USER CODE END Variables */

osThreadId defaultTaskHandle;

osThreadId myTaskLEDHandle;

osThreadId myTaskTCPHandle;

/* Private function prototypes -----------------------------------------------*/

/* USER CODE BEGIN FunctionPrototypes */

extern void tcp_echoserver_init(void);

/* USER CODE END FunctionPrototypes */

void StartDefaultTask(void const * argument);

void LEDTask(void const * argument);

void TCPTask(void const * argument);

extern void MX_LWIP_Init(void);

void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */

/**

* @brief? FreeRTOS initialization

* @param? None

* @retval None

*/

void MX_FREERTOS_Init(void) {

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* USER CODE BEGIN RTOS_MUTEX */

/* add mutexes, ... */

/* USER CODE END RTOS_MUTEX */

/* USER CODE BEGIN RTOS_SEMAPHORES */

/* add semaphores, ... */

/* USER CODE END RTOS_SEMAPHORES */

/* USER CODE BEGIN RTOS_TIMERS */

/* start timers, add new ones, ... */

/* USER CODE END RTOS_TIMERS */

/* Create the thread(s) */

/* definition and creation of defaultTask */

osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);

defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

/* definition and creation of myTaskLED */

osThreadDef(myTaskLED, LEDTask, osPriorityIdle, 0, 128);

myTaskLEDHandle = osThreadCreate(osThread(myTaskLED), NULL);

/* definition and creation of myTaskTCP */

osThreadDef(myTaskTCP, TCPTask, osPriorityIdle, 0, 1024);

myTaskTCPHandle = osThreadCreate(osThread(myTaskTCP), NULL);

/* USER CODE BEGIN RTOS_THREADS */

/* add threads, ... */

/* USER CODE END RTOS_THREADS */

/* USER CODE BEGIN RTOS_QUEUES */

/* add queues, ... */

/* USER CODE END RTOS_QUEUES */

}

/* USER CODE BEGIN Header_StartDefaultTask */

/**

* @brief? Function implementing the defaultTask thread.

* @param? argument: Not used

* @retval None

*/

/* USER CODE END Header_StartDefaultTask */

void StartDefaultTask(void const * argument)

{

/* init code for LWIP */

MX_LWIP_Init();

/* USER CODE BEGIN StartDefaultTask */

PCF8574_WriteBit(ETH_RESET_IO,0);? ? ? ?//???ˉPHYD???

Tcp_Server_Init();

/* Infinite loop */

for(;;)

{

osDelay(1);

}

/* USER CODE END StartDefaultTask */

}

/* USER CODE BEGIN Header_LEDTask */

/**

* @brief Function implementing the myTaskLED thread.

* @param argument: Not used

* @retval None

*/

/* USER CODE END Header_LEDTask */

void LEDTask(void const * argument)

{

/* USER CODE BEGIN LEDTask */

/* Infinite loop */

for(;;)

{

osDelay(1);

}

/* USER CODE END LEDTask */

}

/* USER CODE BEGIN Header_TCPTask */

/**

* @brief Function implementing the myTaskTCP thread.

* @param argument: Not used

* @retval None

*/

/* USER CODE END Header_TCPTask */

void TCPTask(void const * argument)

{

/* USER CODE BEGIN TCPTask */

/* Infinite loop */

for(;;)

{

osDelay(1);

}

/* USER CODE END TCPTask */

}

接下來我們的開發(fā)板連上電腦,保證電腦IP地址和開發(fā)板IP地址在同一網(wǎng)段后按Windows+R后輸入cmd回車打開CMD,在界面輸入ping xxx.xxx.xxx.xxx(xxx代表開發(fā)板IP地址),可以得到

這樣開發(fā)板就ping通了,這個時候就可以引入服務(wù)器或是客戶端的代碼,實現(xiàn)對應(yīng)功能。

總結(jié)

以上是生活随笔為你收集整理的cubemx lan8720模块_通过STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。