搜索
查看: 4235|回复: 5

[原创] 【STM32以太网在线培训】 F767Nucleo移植版Demo

[复制链接]

该用户从未签到

3

主题

31

帖子

0

蝴蝶豆

中级会员

最后登录
2018-10-15
发表于 2017-7-25 22:47:29 | 显示全部楼层 |阅读模式
本帖最后由 lymzzyh 于 2017-7-31 12:24 编辑

很多人都没有769DIS毕竟还是很贵的,不过大多数朋友都曾经有购买过F767Nucleo这里给伙伴们带来一些移植例程,文中有写错的地方还望大家批评指正。
001.jpg 002.jpg
一、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工程构建
本文涉及的软件(安装教程自行百度):
  • STM32CubeMX 4.22.0(注:需安装JRE 建议直接装JDK比较妥)
  • Keil MDK 5.23(本文不提供和谐方法。)
  • HFS 2.3(搭建测试服务器)
  • putty Release 0.70(用于串口调试,可以用自己习惯的)
  • STM32 ST-LINK Utility 4.0.0.0
putty 下载地址:http://www.putty.org/
2.1利用STM32 cubeMX工具生成可用的以太网工程模板。
打开STM32CubeMX软件,新建一个工程

1.jpg
选择F767Nucleo板
2.jpg
如下
3.jpg
打开STLINK V2-1的调试接口SWD(如果不打开接口会出现下载一次之后 stlink不再能识别设备,这也是许多新手常犯的错误)
4.jpg
配置RCC,HSE时钟为 bypass,(说一下两个模式的区别,bypass是外部直接输入时钟信号,而Crystal则是使用晶振,由于此板上并无晶振而是由STlink的MCO提供8MHz的时钟所以选择Bypass)
5.jpg
开启ETH以太网,连接方式为RMII。
7.jpg
打开FreeRTOS(非必要)和LWIP协议栈。
6.jpg
打开与STlinkV2-1相连的USART3(异步模式)(此板默认数据位宽为7bits(坑),需要到Configuration里面配置为8bits或者串口软件处修改数据位宽),该串口是用于demo演示时所需要 非以太网络通讯之必须。
8.jpg
选择配置时钟,弹出的对话框意思是不能满足外设需求 问是否自己寻求解决方法。点一下是。
9.jpg
我们将HSE的频率修改为8MHz(STlink的MCO)在2处修改为HSE3处填入216然后敲回车 会自动修正不合适的参数,下图为最终的时钟图
10.jpg
对中断进行配置
11.jpg
使能板子上蓝色按钮的中断线。因为是从board页面建立的工程 Cube的模板已经帮我们配置好了LED 和按钮 不需要再去在pinout页面配置。如果是自己的板子的话需要在pinout处配置,此处不再详细说明。该按键是用于demo演示时所需要 非以太网络通讯之必须。如有需求可自行开启ETH相关中断。
12.jpg
然后配置PHY
13.jpg
修改PHY地址为0,其他参数不用改,如有需要,可参照PHY手册在此处修改。
14.jpg
project-》setting 设置工程属性,修改工程名和生成路径,选择对应IDE,此处为keil MDK5,调整heap为0x2000(个人习惯,heap是用于malloc分配的内存池)
15.jpg
成对生成.c/.h文件勾上比较好,比如串口就会生成usart.c usart.h等等 如果不勾就全给你生成在main.c里。下面两个勾分别是 把不用的pin脚设为模拟输入以降低功耗和开启断言。断言是为了方便于调试。如果是release版本的code请不要开启断言,原则上 release是不允许存在断言的。
16.jpg
点击图示按钮生成工程,
17.jpg
然后会弹下面这个框框,大意是,freertos和sys(HAL_Delay();)用的都是systick作为心跳,可能会引起冲突,解决办法有两个 ,第一个就是不要听他哔哔,反正我至今没有出现过什么问题。第二个就是给sys换一个tim。就是开调试端口那里,第一步图。
18.jpg
生成出来的工程就已经可以获取IP地址了。可以ping通了。也就是以太网就算调通了。
2.2IAP代码移植
接下来讲的是移植的大概过程,没办法想上面那样按部就班的跟大家哔哔,要具体的代码的话可以去这里clone
里面有配置好的cube工程ico文件。两次commit分别是cube生成好调试成功的代码和移植了IAP以后的demo。
上面的此次以太网进阶培训的相关资料下载帖。

需要用到的几个文件是
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…按图修改即可
19.jpg
2)修改keil的flash配置文件为双bank:
移除原有的两个配置文件 添加双bank配置文件,如图:
20.jpg
修改network.c文件
在文件开头引用CubeMX生成的LWIP的句柄
extern struct netif gnetif;
把原有的Netif 改为gnetif,然后该删的都删。(简单来说就是网络已经初始化好了 这里只需要调用,其实此处的移植是为了和cube生成的工程结合,与芯片已没有什么太大的关系,这就是HAL的好处,移植方便简单)
将初始化函数 修改为
21.jpg
以下是原文件和修改后文件存在的差异情况。
然后在freertos.c中启动或调用iot线程/函数即可
  1. void StartDefaultTask(void const * argument)
  2. {
  3. /* init code for LWIP */
  4. MX_LWIP_Init();
  5. iot_test(0);
  6. /* USER CODE BEGIN StartDefaultTask */
  7. /* Infinite loop */
  8. for(;;)
  9. {
  10. // osThreadTerminate(NULL);
  11. osDelay(100);
  12. }
  13. /* USER CODE END StartDefaultTask */
  14. }
复制代码

最后在main.c中重定向putc和getc两个函数以实现printf和scanf即可
移植完后通过串口工具查看输出信息可以得到
**************************************************************************
*** Ethernet Training Demo for STM32F767 MCU ***
*** Firmware Remote Update Demonstration ***
**************************************************************************
*** Platform initializing… ***
Failed to get IP address! Please check your network configuration.

这种情况是没有获取到ip地址 网线没插好或者各种奇怪的原因 多重启几次就好了
**************************************************************************
*** Ethernet Training Demo for STM32F767 MCU ***
*** Firmware Remote Update Demonstration ***
**************************************************************************
*** Platform initializing… ***
Retrieving the IP address.
IP address: 10.3.1.211
*** Firmware version management ***
Press the BLUE user button within the next 5 seconds
to start firmware update to bank2
Current FW Version: 1.0.1 Jul 19 2017 17:04:17, running from bank #1
Warning: The FLASH bank #2 bank does not contain a valid boot image. Bank 1 will keep being used at next reset.
Do you want to download and program a new firmare version into FLASH bank #2? (yDo you want to download and program a new firmare version into FLASH bank #2? (y/n)
Enter the URL of the new firmware fileBy default: http://10.3.1.100/Project.sim) :read: —>
http://10.3.1.100/Project.sim
<—
Erasing Flash bank #2
Downloading and programming the new firmware into the alternate FLASH bank.
Error opening http://10.3.1.100/Project.sim

这里呢也是没有更新成功,原因是我在写帖子的时候没有开服务器,大家伙将就看啦啦啦~
要具体的代码的话可以去这里clone

评分

参与人数 1ST金币 +1 收起 理由
wlpuah + 1 很给力!

查看全部评分

回复

使用道具 举报

  • TA的每日心情
    开心
    2018-2-6 09:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    1182

    主题

    4967

    帖子

    1

    蝴蝶豆

    论坛元老

    最后登录
    2020-3-17
    发表于 2017-7-26 08:48:42 | 显示全部楼层
    多谢支持啦~~
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    41

    主题

    2582

    帖子

    282

    蝴蝶豆

    论坛元老

    最后登录
    2021-4-1
    发表于 2017-7-27 15:22:32 | 显示全部楼层
    学习学习啦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    0

    蝴蝶豆

    新手上路

    最后登录
    2018-9-14
    发表于 2018-9-12 14:40:59 | 显示全部楼层
    赞一个!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    196

    帖子

    0

    蝴蝶豆

    高级会员

    最后登录
    2020-11-3
    发表于 2018-12-7 09:17:38 | 显示全部楼层
    支持一下,学习中
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    蝴蝶豆

    新手上路

    最后登录
    2019-2-1
    发表于 2019-1-23 14:42:28 | 显示全部楼层
    github的链接挂了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-25 09:02 , Processed in 0.193953 second(s), 40 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表