stm32 移植RTL8201F(正点原子例程为例)

最近在工作中需要使用RTL8201F,在网上找了很多帖子,没有找到合适的,自己翻资料移植了一个。
模板工程使用的是正点原子的f407探索版的例程,原子使用的是LAN8720,需要把他的驱动修改成为我们自己用的RTL8201F。
1.将PHY_TYPE改成我们自己需要的RTL8201
图片
2.根据RTL8201芯片手册修改SR寄存器速度和模式
在这里插入图片描述

我们可以从手册看到,SR寄存器地址和speed和DUPLEX的比特位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

根据手册修改成我们需要的值,
定义PHY_ID寄存器地址
在这里插入图片描述通过读取该地址查找我们的PHY地址和判断PHY是否启动
定义页选择寄存器、RMII模式设置寄存器、省电模式寄存器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相关定义如下
在这里插入图片描述
3.在PHY初始化设置位置修改成我们自己的代码
在这里插入图片描述

  //查找PHY_addr
  for(int i = 0 ;i <31;i++)
  {
		phyreg = 0;
		heth->Init.PhyAddress = i;
		HAL_ETH_ReadPHYRegister(heth, PHY_ID, &phyreg);
		if(phyreg == 0x1c)
		{
			heth->Init.PhyAddress = i;
			break;
		}
		HAL_Delay(PHY_RESET_DELAY);
  }
  
 //设置页寄第七页准备配置RMII模式
  if((HAL_ETH_WritePHYRegister(heth,PHY_PAGE_ADDR,PHY_PAGE_7)) != HAL_OK)
{
		/* In case of write timeout */
		err = ETH_ERROR;

		/* Config MAC and DMA */
		ETH_MACDMAConfig(heth, err);

		/* Set the ETH peripheral state to READY */
		heth->State = HAL_ETH_STATE_READY;

		/* Return HAL_ERROR */
		return HAL_ERROR;
}

在这里插入图片描述

我的板子需要PHY提供REF_CLK,大家如果有外部时钟,可以直接填手册上写的7FFB


//设置RMII模式
if((HAL_ETH_WritePHYRegister(heth,PHY_PAGE_7_MODE,0x6ffb)) != HAL_OK)
	{
		/* In case of write timeout */
		err = ETH_ERROR;

		/* Config MAC and DMA */
		ETH_MACDMAConfig(heth, err);

		/* Set the ETH peripheral state to READY */
		heth->State = HAL_ETH_STATE_READY;

		/* Return HAL_ERROR */
		return HAL_ERROR;
	} 
回到第0if((HAL_ETH_WritePHYRegister(heth,PHY_PAGE_ADDR,0)) != HAL_OK)
{
	/* In case of write timeout */
	err = ETH_ERROR;

	/* Config MAC and DMA */
	ETH_MACDMAConfig(heth, err);

	/* Set the ETH peripheral state to READY */
	heth->State = HAL_ETH_STATE_READY;
	printf("ETH reset timeout!! \r\n");
	/* Return HAL_ERROR */
	return HAL_ERROR;
} 

配置PMSR寄存器
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3e5120700be04172a24269fb93c76cae.webp#pic_center)

我这里的REF_CLK是OUTPUT模式需要关闭省电模式,如果大家不是则不需要配置该项
//

```c
if((HAL_ETH_WritePHYRegister(heth,PHY_PSMR,0x8000)) != HAL_OK)
{
	/* In case of write timeout */
	err = ETH_ERROR;

	/* Config MAC and DMA */
	ETH_MACDMAConfig(heth, err);

	/* Set the ETH peripheral state to READY */
	heth->State = HAL_ETH_STATE_READY;
	printf("ETH reset timeout!! \r\n");
	/* Return HAL_ERROR */
	return HAL_ERROR;
} 

4.配置ETH模式
在lwip_comm.c里的lwip_link_thread
这个函数是检测网线连接情况的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过读取link status来判断网线是否插入
当有网线插入时,启动PHY自协模式,等待自协完成,读取PHY速度和双工模式,将对应的模式配置到ETH中,启动ETH
//

void lwip_link_thread( void * argument )
{
    uint32_t regval = 0;
    struct netif *netif = (struct netif *) argument;
    int link_again_num = 0;

    while(1)
    {
        /* 读取PHY状态寄存器,获取链接信息 */
        HAL_ETH_ReadPHYRegister(&g_eth_handler,PHY_BSR, &regval);

        /* 判断链接状态 */
        if((regval & PHY_LINKED_STATUS) == 0)
        {
            g_lwipdev.link_status = LWIP_LINK_OFF;

            link_again_num ++ ;

            if (link_again_num >= 2)                    /* 网线一段时间没有插入 */
            {
                continue;
            }
            else                                        /* 关闭虚拟网卡及以太网中断 */
            {
#if LWIP_DHCP                                           /* 如果使用DHCP的话 */
                g_lwip_dhcp_state = LWIP_DHCP_LINK_DOWN;

                dhcp_stop(netif);
#endif
                HAL_ETH_Stop(&g_eth_handler);
                netif_set_down(netif);
                netif_set_link_down(netif);
            }
        }
        else                                            /* 网线插入检测 */
        {
            link_again_num = 0;
//			printf("检测到有网线插入 \r\n");
            if (g_lwipdev.link_status == LWIP_LINK_OFF)/* 开启以太网及虚拟网卡 */
            {
				HAL_ETH_WritePHYRegister(&g_eth_handler, PHY_BCR, PHY_AUTONEGOTIATION);
				uint8_t timeout = 100;
				do{
					HAL_ETH_ReadPHYRegister(&g_eth_handler,PHY_BSR, &regval);
					vTaskDelay(1);
					timeout--;
					if(timeout==0)
					{
						g_lwipdev.link_status = LWIP_LINK_OFF;
						goto exit;
					}
				}while(((regval & PHY_AUTONEGO_COMPLETE) != PHY_AUTONEGO_COMPLETE));

				HAL_ETH_ReadPHYRegister(&g_eth_handler, PHY_SR, &regval);
				if(regval & PHY_SPEED_STATUS)
				{
					g_eth_handler.Init.Speed = ETH_SPEED_100M;
				}
				else
				{
					g_eth_handler.Init.Speed = ETH_SPEED_10M;
				}

				if(regval & PHY_DUPLEX_STATUS)
				{
					g_eth_handler.Init.DuplexMode = ETH_MODE_FULLDUPLEX;

				}
				else
				{
					g_eth_handler.Init.DuplexMode = ETH_MODE_HALFDUPLEX;
				}
                g_lwipdev.link_status = LWIP_LINK_ON;
                HAL_ETH_Start(&g_eth_handler);
                netif_set_up(netif);
                netif_set_link_up(netif);
				exit:;
            }
        }

        vTaskDelay(100);
    }
}

5.设置IP
正点原子的工程默认打开DHCP,如果想使用静态IP需要在,lwipopts.h关闭
在这里插入图片描述

在lwip_comm.c的lwip_comm_default_ip_set函数设置成自己需要的ip
在这里插入图片描述
在这里插入图片描述

6.测试
以上步骤做完之后,编译程序下载到板子里面,我们通过串口助手可以查看到初始化信息
在这里插入图片描述

打开命令行PING 一下看看
在这里插入图片描述

可以ping通的
我们继续使用网络助手
在这里插入图片描述

可以连接上
在这里插入图片描述

串口助手页提示有ip连接到
在这里插入图片描述

我们的移植工作就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947870.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3588+麒麟国产系统+FPGA+AI在电力和轨道交通视觉与采集系统的应用

工业视觉识别系统厂家提供的功能主要包括&#xff1a; 这些厂家通过先进的视觉识别技术&#xff0c;实现图像的采集、处理与分析。系统能够自动化地完成质量检测、物料分拣、设备监控等任务&#xff0c;显著提升生产效率和产品质量。同时&#xff0c;系统具备高度的灵活性和可扩…

Linux umami网站统计工具自定义API开发

Linux umami网站统计工具自定义API开发 一、src/queries/analytics/下添加调用sql查询文件&#xff1a;二、src/queries/index.js文件中增加导出模块内容&#xff1a;三、src/pages/api/下根据目录添加接口方法文件&#xff1a;四、构建项目&#xff0c;启动。1、到umami目录&a…

Meta 的新策略,将 AI 生成的角色整合到其社交媒体平台

一、Meta新年规划及引人注目的举措 多元规划背景&#xff1a;在新的一年&#xff0c;Meta制定了多维度的战略规划&#xff0c;旨在巩固并拓展其在科技领域的影响力。增强现实与元宇宙是其长期布局的重点方向&#xff0c;期望借此塑造未来互联网的交互形态&#xff1b;面对TikTo…

微信小程序滑动解锁、滑动验证

微信小程序简单滑动解锁 效果 通过 movable-view &#xff08;可移动的视图容器&#xff0c;在页面中可以拖拽滑动&#xff09;实现的简单微信小程序滑动验证 movable-view 官方说明&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/movable-view.ht…

SWM221系列芯片之电机应用及控制

经过对SWM221系列的强大性能及外设资源&#xff0c;TFTLCD彩屏显示及控制进行了整体介绍后&#xff0c;新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下&#xff0c;SWM221系列芯片以其卓越性能与创新设计&#xff0c;受…

软考教材重点内容 信息安全工程师 第 12 章网络安全审计技术原理与应用

12.1.1 网络安全审计概念 网络安全审计是指对网络信息系统的安全相关活动信息进行获取、记录、存储、分析和利用的工作。网络安全审计的作用在于建立“事后”安全保障措施&#xff0c;保存网络安全事件及行为信息&#xff0c;为网络安全事件分析提供线索及证据&#xff0c;以便…

代码随想录算法训练营day21

代码随想录算法训练营 —day21 文章目录 代码随想录算法训练营前言一、669. 修剪二叉搜索树递归法迭代法 二、108.将有序数组转换为二叉搜索树递归法迭代法 三、538.把二叉搜索树转换为累加树递归法 总结 前言 今天是算法营的第21天&#xff0c;希望自己能够坚持下来&#xf…

Jetson系列部署YOLOv8模型教程

简介 NVIDIA Jetson系列是专为边缘计算设计的紧凑型计算模块&#xff0c;其目标用户为AI开发者、嵌入式系统工程师以及需要在设备端实时进行数据处理与AI推断的创新者。通过提供灵活的硬件平台&#xff0c;结合NVIDIA强大的GPU计算资源&#xff0c;Jetson系列能够支持复杂的机…

Python 3 与 Python 2 的主要区别

文章目录 1. 语法与关键字print 函数整数除法 2. 字符串处理默认字符串类型字符串格式化 3. 输入函数4. 迭代器和生成器range 函数map, filter, zip 5. 标准库变化urllib 模块configparser 模块 6. 异常处理7. 移除的功能8. 其他重要改进数据库操作多线程与并发类型注解 9. 总结…

word中编号统一格式

不要手敲编号&#xff0c;要利用工具来。要善于利用多级编号和编号&#xff0c;分别对标题和段落进行组织 尤其是段落和标题特别多的时候&#xff0c;像毕设、标书这些 为什么呢&#xff1f;因为这样更方便修改&#xff0c;后续的增加和删除段落&#xff0c;编号会自动排列&am…

MySQL8安装与卸载

1.下载mysql MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 2.解压mysql安装包 解压到自己定义的目录&#xff0c;这里解压就是安装&#xff0c;解压后的路径不要有空格和中文。 3.配置环境变量 配置环境变量可以方便电脑在任何的路径…

牛客网刷题 ——C语言初阶——JZ15 二进制中1的个数

1.题目描述 题目OJ链接 描述 输入一个整数 n &#xff0c;输出该数32位二进制表示中1的个数。其中负数用补码表示。 2.思路 求2进制中1的个数&#xff0c;可以转换为求每一位&#xff0c;1的个数&#xff0c;1&1还是1 所以判断如果该数值&1为真&#xff0c;我们就co…

SAP物料主数据界面增加客制化字段、客制化页签的方式

文章目录 前言一、不增加页签&#xff0c;只增加客制化字段二、增加物料主数据页签 前言 【SAP系统MM模块研究】 #SAP #MM #物料 #客制化 #物料主数据 项目上难免会遇到客户要在物料主数据的界面上&#xff0c;增加新字段的需求。 实现方式有&#xff1a; &#xff08;1&…

十一、Vue 自定义指令详解

文章目录 一、自定义指令概念二、自定义指令的基本语法全局自定义指令局部自定义指令三、指令钩子函数bindinsertedupdatecomponentUpdatedunbind四、指令的参数传递简单参数传递动态参数传递五、自定义指令的应用场景权限控制动画效果第三方库集成六、自定义指令的双向绑定双向…

《Spring Framework实战》1:Spring简介

欢迎观看《Spring Framework实战》视频教程 Spring简介 目录 1. Spring简介 2. Spring项目 3. Spring 能做什么&#xff1f; Spring 使 Java 简单化。 Spring 使 Java 现代化。 Spring 使 Java 富有成效。 Spring 使 Java 反应性。 Spring 使 Java 轻松上云。 Sprin…

利用KPaaS平台提升企业审批流程的透明度

企业的审批流程不仅影响决策效率&#xff0c;还直接关联到组织的透明度和运营效果。传统的审批流程通常由多个环节和系统构成&#xff0c;每一个环节都可能存在信息不对称的现象。例如&#xff0c;某一审批节点的负责人可能并不清楚当前的审批状态&#xff0c;而在其他环节&…

重塑信任与价值:MHX如何定义数字资产新规则

在全球经济逐步数字化的浪潮中&#xff0c;数字资产交易正以惊人的速度成为主流投资方式。然而&#xff0c;这个市场充满机遇的同时&#xff0c;也因规则不透明、风险过高等问题让许多投资者望而却步。在这样的背景下&#xff0c;MHX曼哈顿数字资产交易所以全新的思维和创新的交…

《向量数据库指南》——应对ElasticSearch挑战,拥抱Mlivus Cloud的新时代

在当今数据驱动的商业环境中,向量数据库的应用正变得愈加重要。随着人工智能和机器学习的快速发展,尤其是在自然语言处理、图像识别及推荐系统等领域,向量数据库以其强大的存储和检索能力,迎来了广泛的应用机会。然而,在实际应用中,企业在选择和实施向量数据库方案时,常…

基于SpringBoot的网上订餐系统(源码+数据库+文档)

亲测完美运行带论文&#xff1a;文末获取源码 文章目录 项目简介&#xff08;论文摘要&#xff09;运行视频包含的文件列表&#xff08;含论文&#xff09;前台运行截图后台运行截图 项目简介&#xff08;论文摘要&#xff09; 随着我国经济的飞速发展&#xff0c;人们的生活速…

【保姆级】sql注入之堆叠注入

一、堆叠注入的原理 mysql数据库sql语句的默认结束符是以";"号结尾&#xff0c;在执行多条sql语句时就要使用结束符隔 开,而堆叠注入其实就是通过结束符来执行多条sql语句 比如我们在mysql的命令行界面执行一条查询语句,这时语句的结尾必须加上分号结束 select * fr…