你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32以太网在线培训】 F767Nucleo移植版Demo

[复制链接]
lymzzyh 发布时间:2017-7-25 22:47
本帖最后由 lymzzyh 于 2017-7-31 12:24 编辑
* E7 h7 g/ e4 X! ^8 V. `* Y5 I- d3 T! h
很多人都没有769DIS毕竟还是很贵的,不过大多数朋友都曾经有购买过F767Nucleo这里给伙伴们带来一些移植例程,文中有写错的地方还望大家批评指正。
; ^$ ?- ]: ~, j5 {2 U7 G& Q7 v 001.jpg 002.jpg 8 |/ J" ~# c6 ~$ P7 \+ ^
一、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
    % g( J' h1 O1 U  ^0 M' Y
putty 下载地址:http://www.putty.org/
2.1利用STM32 cubeMX工具生成可用的以太网工程模板。
打开STM32CubeMX软件,新建一个工程
- M9 C/ }5 k* y
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。
上面的此次以太网进阶培训的相关资料下载帖。
; {6 `# N, w/ k1 ^) T# S* o; `
需要用到的几个文件是
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线程/函数即可
" [( K( ?8 W& a  t$ ~! H
  1. void StartDefaultTask(void const * argument)6 M: z4 ^: G3 W% T
  2. {
    ' l  L) O( w# p) C7 G6 i
  3. /* init code for LWIP */1 {; |6 n: Q9 z0 F+ K$ U5 }
  4. MX_LWIP_Init();; w# x0 ]7 M7 R9 y/ o3 M
  5. iot_test(0);( \- Z5 I5 Z, D! d# z# M" P
  6. /* USER CODE BEGIN StartDefaultTask */
    6 E3 N5 \1 y7 E+ M- s
  7. /* Infinite loop */- n* _/ n, L0 I! A
  8. for(;;)
    0 b% b$ i7 E2 L4 G& K0 W
  9. {7 s  `" ?7 g1 @6 g. T2 Z! r5 [
  10. // osThreadTerminate(NULL);, Z! L" L. Q9 P- Z
  11. osDelay(100);) r! G) K' k% k0 s) Y
  12. }4 H+ d& K( n3 \/ N
  13. /* USER CODE END StartDefaultTask *// f+ w/ s5 T" G- N
  14. }
复制代码
: D2 b" y1 T( w7 ~
最后在main.c中重定向putc和getc两个函数以实现printf和scanf即可
移植完后通过串口工具查看输出信息可以得到
**************************************************************************" I! E/ _# Q2 c& |; v) \, c+ ?
*** Ethernet Training Demo for STM32F767 MCU ***
. j* l  E! Z4 U' R5 H4 F+ O8 d*** Firmware Remote Update Demonstration ***7 s+ g! N- [/ D7 ^8 v( a7 F8 U
**************************************************************************
*** Platform initializing… ***
Failed to get IP address! Please check your network configuration.
* T$ U, P# E* x$ t% ]/ v
这种情况是没有获取到ip地址 网线没插好或者各种奇怪的原因 多重启几次就好了
**************************************************************************# n9 k. Z- A# ]; ?7 K7 T- _. I
*** Ethernet Training Demo for STM32F767 MCU ***7 ~" O& Y3 p( R5 _/ A0 H* \, E
*** Firmware Remote Update Demonstration ***5 j% h" }* F+ u9 h  u/ i
**************************************************************************
*** Platform initializing… ***
Retrieving the IP address.* E' j0 K- y' B9 ?9 s, C
IP address: 10.3.1.211
*** Firmware version management ***
Press the BLUE user button within the next 5 seconds
, A5 e" e' `. I% J  ?to start firmware update to bank2
Current FW Version: 1.0.1 Jul 19 2017 17:04:17, running from bank #1
8 P2 l$ @. t) j+ ~Warning: The FLASH bank #2 bank does not contain a valid boot image. Bank 1 will keep being used at next reset.
; N5 M7 l* h7 ?' ]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: —>$ i3 B' M2 M0 _
http://10.3.1.100/Project.sim
5 v" r5 R$ B3 }<—( j* {8 W; i( h
Erasing Flash bank #25 G8 [" O, ?# w$ a. Y
Downloading and programming the new firmware into the alternate FLASH bank.3 }" P6 q5 E$ G4 u0 B8 c
Error opening http://10.3.1.100/Project.sim
1 }: l8 X  U; v1 n. i9 r
这里呢也是没有更新成功,原因是我在写帖子的时候没有开服务器,大家伙将就看啦啦啦~
要具体的代码的话可以去这里clone
5 J, F* z! F' f, m' R

评分

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

查看全部评分

收藏 3 评论5 发布时间:2017-7-25 22:47

举报

5个回答
zero99 回答时间:2017-7-26 08:48:42
多谢支持啦~~
埃斯提爱慕 回答时间:2017-7-27 15:22:32
提示: 作者被禁止或删除 内容自动屏蔽
wlpuah 回答时间:2018-9-12 14:40:59
赞一个!
访客1989 回答时间:2018-12-7 09:17:38
支持一下,学习中
eepfis 回答时间:2019-1-23 14:42:28
github的链接挂了

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版