HAL 库 STM32F4 裸机 LAN8720 实验

HAL 库 STM32F4 裸机 LAN8720 实验

1 实验环境

  • STM32F407ZGT6
  • STM32CubeMX version 6.12.0
    在这里插入图片描述
    在这里插入图片描述

2 基本配置

2.1 时钟

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2 串口

在这里插入图片描述

在这里插入图片描述

3 网络配置

3.1 原理图

注意: 本次实验的 LAN8720 复位引脚直连了 MCU 的复位引脚,所以我没有手动添加引脚来复位,如果单独配置复位引脚,那么清参考别的教程配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.2ETH

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.3LWIP

在这里插入图片描述

在这里插入图片描述

4. 代码

4.1 报错 Error: L6218E: Undefined symbol sio_open (referred from slipif.o).

把 slipif.c 内容全部删除

4.2 串口

uart.c
/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */


/* USER CODE BEGIN 1 */

// 加入以下代码,支持printf函数,而不用勾选use MicroLIB
// #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#if 1
// #pragma import(__use_no_semihosting)
// 标准库需要的支持函数
//struct __FILE {
//    int handle;
//};

 FILE __stdout;
// 定义_sys_exit()以避免使用半主机模式
 void _sys_exit(int x) { x = x; }
// 重定义fputc函数
int fputc(int ch, FILE *f) {
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0x0001);
    return ch;
}
#endif

/* USER CODE END 1 */

main.c

/* USER CODE BEGIN 0 */
#include "stdio.h"
#include "lan8742.h"

uint8_t RecvData[255];
void UartTxCallback(UART_HandleTypeDef *huart1)
{
    HAL_UART_Receive_IT(huart1, RecvData, 1);
}

void UartRxCallback(UART_HandleTypeDef *huart1)
{
    HAL_UART_Transmit_IT(huart1, RecvData, 1);
}

/* USER CODE END 0 */


  /* USER CODE BEGIN 2 */

	 HAL_UART_RegisterCallback(&huart1, HAL_UART_TX_COMPLETE_CB_ID, UartTxCallback);
	 HAL_UART_RegisterCallback(&huart1, HAL_UART_RX_COMPLETE_CB_ID, UartRxCallback);
	 HAL_UART_Receive_IT(&huart1, RecvData, 1);

  /* USER CODE END 2 */

在这里插入图片描述

4.3 网络

main.c


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  MX_LWIP_Process();
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

ethernetif.c 打印寄存器值


/* USER CODE BEGIN 0 */
#include "stdio.h"

/* USER CODE END 0 */

/* USER CODE BEGIN LOW_LEVEL_INIT */

     uint32_t addr;
     if(ETH_PHY_IO_ReadReg(LAN8742A_PHY_ADDRESS, LAN8742_PHYI1R,&addr) == 0){
        printf("LAN8742_PHYI1R: %d\n", addr);
     }
     if(ETH_PHY_IO_ReadReg(LAN8742A_PHY_ADDRESS, LAN8742_PHYI2R,&addr) == 0){
        printf("LAN8742_PHYI2R: %d\n", addr);
     }

/* USER CODE END LOW_LEVEL_INIT */

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值