请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
lymzzyh 发布时间:2017-7-25 22:47
本帖最后由 lymzzyh 于 2017-7-31 12:24 编辑 3 O# t5 q( o9 }2 c- y

2 }# E+ c% A; Q: M9 I9 n2 g, v很多人都没有769DIS毕竟还是很贵的,不过大多数朋友都曾经有购买过F767Nucleo这里给伙伴们带来一些移植例程,文中有写错的地方还望大家批评指正。
% G$ n2 C, M* Y 001.jpg 002.jpg
8 n$ D$ p) f5 E9 t+ F一、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* t% o9 N& M+ `' @1 b; h, P3 j
putty 下载地址:http://www.putty.org/
2.1利用STM32 cubeMX工具生成可用的以太网工程模板。
打开STM32CubeMX软件,新建一个工程
" W8 i2 r) N1 ?* g
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。
上面的此次以太网进阶培训的相关资料下载帖。
/ 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…按图修改即可
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线程/函数即可, e4 A8 g$ m" k5 M" o0 X$ Y
  1. void StartDefaultTask(void const * argument)
    ' `7 G! G2 z4 ]% Q& ~4 v
  2. {
    6 J) ^( e" O# o+ [. V
  3. /* init code for LWIP *// }! E1 M0 ^/ _% f" o2 o- _
  4. MX_LWIP_Init();
      c, @/ w! T5 }" l: c4 S. }
  5. iot_test(0);4 y9 p! g3 U2 ~% K' r  T1 ~
  6. /* USER CODE BEGIN StartDefaultTask */
    5 _/ h, E0 {4 r
  7. /* Infinite loop */. m# h$ I% \' f- M: Z' _
  8. for(;;)3 L" C2 L- V. ^2 Z! \
  9. {
    $ k) M$ M% T2 X) E& h' A" Q
  10. // osThreadTerminate(NULL);
    6 A$ H9 h/ E- J3 h9 f% k; w1 G
  11. osDelay(100);
    2 p8 {7 a  r, C! X$ [5 o
  12. }
    $ r; s5 {- q9 b0 l% k/ P  I
  13. /* USER CODE END StartDefaultTask */
    - H4 U1 [. x1 P+ ?
  14. }
复制代码
/ G5 r' z( w1 U  z; l
最后在main.c中重定向putc和getc两个函数以实现printf和scanf即可
移植完后通过串口工具查看输出信息可以得到
**************************************************************************
. F6 p8 `$ f# r*** Ethernet Training Demo for STM32F767 MCU ***
- W7 m0 Q2 i  Q0 v- y; D  @, T5 {$ G*** Firmware Remote Update Demonstration ***3 K8 Y& {. @5 Y! ^1 I
**************************************************************************
*** Platform initializing… ***
Failed to get IP address! Please check your network configuration.
( m7 n6 ^2 U; e& t3 `
这种情况是没有获取到ip地址 网线没插好或者各种奇怪的原因 多重启几次就好了
**************************************************************************: b3 I7 ~, j2 k) S8 w
*** Ethernet Training Demo for STM32F767 MCU ***
6 ^! N0 M* J1 |  A( m9 i0 X*** Firmware Remote Update Demonstration ***
' b: w2 {1 ~  S8 {" F; O% I**************************************************************************
*** Platform initializing… ***
Retrieving the IP address.0 ~4 }( [% R* g& p) \& [. f2 v
IP address: 10.3.1.211
*** Firmware version management ***
Press the BLUE user button within the next 5 seconds
; e. c7 V' c* F  _/ K9 eto start firmware update to bank2
Current FW Version: 1.0.1 Jul 19 2017 17:04:17, running from bank #1
. a# c$ }2 M7 ~+ b( N; X' _Warning: The FLASH bank #2 bank does not contain a valid boot image. Bank 1 will keep being used at next reset.
- @4 O, Q2 j  G6 I, E% eDo 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: —>4 a1 y0 B  X9 O1 N+ `6 B, l4 }
http://10.3.1.100/Project.sim
( u$ @; Y# U5 z# i* _4 h6 H<—
7 x2 A  N2 b7 W0 {/ m; uErasing Flash bank #2
6 l: X, m- k8 f  l9 l0 @Downloading and programming the new firmware into the alternate FLASH bank.
3 ^7 W! ~7 g- J! FError opening http://10.3.1.100/Project.sim
- W! q3 U; |) d# M
这里呢也是没有更新成功,原因是我在写帖子的时候没有开服务器,大家伙将就看啦啦啦~
要具体的代码的话可以去这里clone

! ^5 q; R3 M( f8 q% a

评分

参与人数 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 手机版