本帖最后由 lymzzyh 于 2017-7-31 12:24 编辑 3 O# t5 q( o9 }2 c- y 很多人都没有769DIS毕竟还是很贵的,不过大多数朋友都曾经有购买过F767Nucleo这里给伙伴们带来一些移植例程,文中有写错的地方还望大家批评指正。 一、STM32以太网电路构成 简单来说STM32的以太网是内置MAC外接PHY,STM32与PHY之间使用RMII 或者MII通信,长篇大论我就不哔哔了,这些基础信息都可以从百度上或者链接附带的资料里获取到,这里简述一些基础概念,省去大家入门的一些烦恼。关键词:以太网 mac phy STM32F767ZI-Nulceo开发板使用的PHY是LAN8742A,通信方式是RMII。 这里简述下PHY的作用(瞎哔哔),网线是差分串行通信。是一对TX 一对RX一共四根线的通信(这里指百兆以太网,千兆是四对差分)。时钟为50M。(也就是所谓的波特率)从mac出来的信号是2bit的并行信号(RMII)。PHY的主要作用有两个: 1.将RMII的2bit并行信号调制为串行的差分信号, 2.提供50M的时钟。(RMII。差分信号的时钟均为50M) 当然还有其他的作用 比如网线的up down等等。不过上述两点为主要作用。 LAN8742A外接25M的时钟(晶振),2倍频后得到50M的时钟给自己用和输出给STM32的mac。在布线上 STM32到phy应等长布线。从phy到网变应差分布线。电路设计时还应注意阻抗匹配。不知道如何设计的可以直接找F767-nulceo的电路抄就是了。 网变:网络变压器(简单理解作用类似于TTL转RS232),不少同行图方便都使用的是带网变的RJ45连接器,例如HY911105A HR911105A等等。 二、IAP工程构建本文涉及的软件(安装教程自行百度):
STM32 cubeMX下载地址:http://www.st.com/en/development-tools/stm32cubemx.html Keil MDK 下载地址:http://www.keil.com/demo/eval/arm.htm HFS 下载地址:http://www.rejetto.com/hfs/?f=dl putty 下载地址:http://www.putty.org/ STM32 ST-LINK Utility 下载地址:http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link004.html 2.1利用STM32 cubeMX工具生成可用的以太网工程模板。打开STM32CubeMX软件,新建一个工程 " W8 i2 r) N1 ?* g选择F767Nucleo板 如下 打开STLINK V2-1的调试接口SWD(如果不打开接口会出现下载一次之后 stlink不再能识别设备,这也是许多新手常犯的错误) 配置RCC,HSE时钟为 bypass,(说一下两个模式的区别,bypass是外部直接输入时钟信号,而Crystal则是使用晶振,由于此板上并无晶振而是由STlink的MCO提供8MHz的时钟所以选择Bypass) 开启ETH以太网,连接方式为RMII。 打开FreeRTOS(非必要)和LWIP协议栈。 打开与STlinkV2-1相连的USART3(异步模式)(此板默认数据位宽为7bits(坑),需要到Configuration里面配置为8bits或者串口软件处修改数据位宽),该串口是用于demo演示时所需要 非以太网络通讯之必须。 选择配置时钟,弹出的对话框意思是不能满足外设需求 问是否自己寻求解决方法。点一下是。 我们将HSE的频率修改为8MHz(STlink的MCO)在2处修改为HSE3处填入216然后敲回车 会自动修正不合适的参数,下图为最终的时钟图 对中断进行配置 使能板子上蓝色按钮的中断线。因为是从board页面建立的工程 Cube的模板已经帮我们配置好了LED 和按钮 不需要再去在pinout页面配置。如果是自己的板子的话需要在pinout处配置,此处不再详细说明。该按键是用于demo演示时所需要 非以太网络通讯之必须。如有需求可自行开启ETH相关中断。 然后配置PHY 修改PHY地址为0,其他参数不用改,如有需要,可参照PHY手册在此处修改。 project-》setting 设置工程属性,修改工程名和生成路径,选择对应IDE,此处为keil MDK5,调整heap为0x2000(个人习惯,heap是用于malloc分配的内存池) 成对生成.c/.h文件勾上比较好,比如串口就会生成usart.c usart.h等等 如果不勾就全给你生成在main.c里。下面两个勾分别是 把不用的pin脚设为模拟输入以降低功耗和开启断言。断言是为了方便于调试。如果是release版本的code请不要开启断言,原则上 release是不允许存在断言的。 点击图示按钮生成工程, 然后会弹下面这个框框,大意是,freertos和sys(HAL_Delay();)用的都是systick作为心跳,可能会引起冲突,解决办法有两个 ,第一个就是不要听他哔哔,反正我至今没有出现过什么问题。第二个就是给sys换一个tim。就是开调试端口那里,第一步图。 生成出来的工程就已经可以获取IP地址了。可以ping通了。也就是以太网就算调通了。 2.2IAP代码移植接下来讲的是移植的大概过程,没办法想上面那样按部就班的跟大家哔哔,要具体的代码的话可以去这里clone 里面有配置好的cube工程ico文件。两次commit分别是cube生成好调试成功的代码和移植了IAP以后的demo。 上面的此次以太网进阶培训的相关资料下载帖。 / W3 S: O/ H M! _3 v: e需要用到的几个文件是 Common文件夹 以及里面的所有内容 flash_f7.c/flash_f.h network.c/network.h 原则上需要修改的仅仅是network.c文件。当然这也是由于是从F769移植到f767,flash_f7.c/flash_f.h是一样的 所以不需要移植,若移植到F4 F1等 则需要对此处做处理,而不能双bank的芯片更需要大量修改, 芯片做双bank处理: 1)使用STM32 ST-LINK Utility 修改芯片flash为双bank,target-》option Bytes…按图修改即可 2)修改keil的flash配置文件为双bank: 移除原有的两个配置文件 添加双bank配置文件,如图: 修改network.c文件 在文件开头引用CubeMX生成的LWIP的句柄 extern struct netif gnetif; 把原有的Netif 改为gnetif,然后该删的都删。(简单来说就是网络已经初始化好了 这里只需要调用,其实此处的移植是为了和cube生成的工程结合,与芯片已没有什么太大的关系,这就是HAL的好处,移植方便简单) 将初始化函数 修改为 以下是原文件和修改后文件存在的差异情况。 然后在freertos.c中启动或调用iot线程/函数即可, e4 A8 g$ m" k5 M" o0 X$ Y
/ G5 r' z( w1 U z; l 最后在main.c中重定向putc和getc两个函数以实现printf和scanf即可 移植完后通过串口工具查看输出信息可以得到
这种情况是没有获取到ip地址 网线没插好或者各种奇怪的原因 多重启几次就好了
这里呢也是没有更新成功,原因是我在写帖子的时候没有开服务器,大家伙将就看啦啦啦~ 要具体的代码的话可以去这里clone |
多谢支持啦~~ |
赞一个! |
支持一下,学习中 |
github的链接挂了 |