STM32进行以太网通信,需要  了解一下内容:

  硬件层:MAC控制器  和  PHY 和 变压器 .

  软件层:网络协议栈,例如:lwip协议栈,RL-TCPnet协议栈,FreeRTOS-TCP协议栈,uIP协议栈。

MAC控制器

  STM32F107/STM32F407自带 MAC控制器,有的芯片把MAC和PHY做到了一起,像ENC28J60。

 LWIP 协议栈 移植 需要资料如下:

官方  LWIP 源码 下载,  官方 LWIP 文档说明  最新版本 2.1.2 ,2018年12月29日15:34:07

1、网卡驱动移植,即 实现  struct netif  网卡 数据结构,里面包含数据收发函数 等等 ,详细:https://blog.csdn.net/zhzht19861011/article/details/6690534

2、操作系统接口移植,即 sys_arch.c 以及 sys_arch.h  ,cc.h 的编写 ,包含创建线程,信号量 等创建接口,以及 系统时间获取接口等等  ,详看  https://blog.csdn.net/ZCShouCSDN/article/details/80198116

3、lwip 功能 裁剪,即 lwipopts.h 文件编写  的编写,主要包含 ,内存配置,以及功能 裁剪 ,详看  :https://blog.csdn.net/slj_win/article/details/16959055

移植案例 :  https://github.com/suoZhangEmbedded/stm32h7_freertos

紧接着 以太网通信  依据 TCP\IP协议,但是这个协议太大了,STM32上运行不了,而有一个简化版的TCP/IP协议是  LWIP协议,这个LWIP 协议是可以运行在STM32上面的。

下面就是LWIP协议移植到STM32F107上  。。。。  2015年8月14日17:28:29

首先下载LWIP协议栈({{{后面发现没啥用,因为ST 给移植好了}}})和STM32F107为以太网外设专门做的库({{{后面发现不是库,是移植LWIP好的工程}}})。

LWIP协议栈下载地址:  (下载两个文件  名称分别为 contrib-1.4.1.ziplwip-1.4.1.zip)注: (2015年8月15日13:13:08这个时间 是这个版本)

http://ftp.twaren.net/Unix/NonGNU//lwip/

STM32F107为以太网外设专门做的库下载地址:(在页面的最下面: 文件名称为:stsw-stm32026.zip)  注: (2015年8月15日13:14:12这个时间 是这个版本)

http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1734/PF257862#

笔者再下载之前,以为这个文件(stsw-stm32026.zip)只是一个库函数(一个eth.C文件,一个eth.H文件) ,让我们调用.实际不是这样的,是一个移植好LWIP协议的一个好的(可以编译通过)keil工程。

笔者正在阅读这个工程,在阅读这个工程之前下载了这个工程的说明文档(和下载工程在同一个界面(AN3102Application note)),但是是英文的,笔者C和英文不是学的很好,正在阅读中…… 2015年8月16日22:10:28  

  ethernetif.c stm32_eth.c:在这个工程文档中有这样的一段话,协议栈(LWIP)和以太网控制器(MAC)的连接文件是ethernetif.c stm32_eth.c。     英文原句:For the STM32F107xx, the ethernetif.c (under Utilities\lwip-1.3.1\src\netif) and stm32_eth.c(under Libraries\STM32_ETH_Driver) files constitute the low-level layer, which is theinterface between the stack and the Ethernet controller. 这两个文件怎么连接的,现在还不清楚!

     netconf.c:为了使LWIP协议栈的周期任务能正常工作,还利用一个定时器为协议栈工作,有一个函数负责调度LWIP协议的任务。这个函数是LwIP_Periodic_Handle,定义在netconf.c中,注意这个文件不是协议栈LWIP的文件。主要功能包括:LWIP初始化,MAC地址和IP地址设置等等。

  opt.h:协议栈的初始化参数在opt.h中可以找到,依靠opt.h修改后的新文件lwipopts.h,这个文件包含了LWIP协议栈为STM32F107做的一些修改!修改内容如下:

1、DHCP是否被使能,参数设置是LWIP_DHCP
      2、TCP和UDP的连接数量,分别参数是MEMP_NUM_TCP_PCB 和MEMP_NUM_UDP_PCB
      3、堆栈的数量设置参数是MEM_SIZE
                 4、缓冲区的数量和大小,参数是 PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE
        5、更详细的请参考文件lwipopts.h 。

PHY 接口配置:MII 和RMII 为STM32F107连接PHY的 两种接口模式,在stm32f107.c文件中有两个宏定义,想用哪个接口,就把另外一个接口宏定义屏蔽掉。
此次编辑时间:2015年8月19日15:10:08

看了上面的源代码简单说明,笔者准备找个开发板试验一下(开发板硬件说明: 芯片STM32F107,DM9161,HR911105A分别对应 MAC,PHY,以太网变压器)。

2015年8月23日08:00:34 ,之所以这次更新和上次相差了很多的时间,是因为笔者想把这个工程下载到开发板运行起来,我想是不是得修改STM32F107(MAC)和DM9161(PHY)之间的连线,看了一段时间后发现开发板上的线和代码上的线是一样的,只不过PHY有个地址是1(某个引脚控制的拉高是1,拉低是0)),开发板上是1,程序里面是0,就修改这个,编译,下载到开发板,代码跑起来了,现在程序跑起来了,很是激动,虽然没我多大的贡献。MAC,PHY,以太网变压器怎么连接的稍后会加进来.

2015年8月26日11:11:33,代码跑起来了,准备进行  UDP  数据传输。

打开 ST公司官方提供的以太网例程stsw-stm32070,工程里面有两个选项,一个是FreeRTOS和Standalone,可以理解为一个是操作系统,一个是“裸奔”,笔者还没有学习过操作系统,因此在这时暂停STM32F407以太网的学习,去学习实时操作系统。2015年10月14日16:04:41

STM32 以太网学习的更多相关文章

  1. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD

  2. stm32定时器学习二——PWM设置

    /* STM32 嵌入式学习入门(5)——PWM的实现 上一篇博文介绍了定时器和PWM的基本的原理,本篇博文从代码层面来介绍PWM的具体实现.同样,还是以博主所用的开发板——正点原子开发板STM32F ...

  3. 基于STM32的学习型通用红外遥控设备的设计实现(三)

    CPU: STM32 调试平台: STM32F103ZET和STM32F103VBT 软件平台: Keil uVision4 电路设计: Altium Designer v6.9 http://blo ...

  4. 【转载-Andrew_qian】stm32中断学习

    [转载]stm32中断学习 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大 ...

  5. stm32串口学习笔记

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  6. STM32单片机学习心得——概述

    我校的课程真是跟不上时代发展,甚至还在教授8051/8052单片机的内容,于是不甘寂寞的我就自己踏入了STM32单片机的坑-- 首先,我现在大二,刚学完模拟电子技术,还没有学习数字电路技术,于是自学单 ...

  7. 【转载】stm32中断学习

    中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加 ...

  8. stm32入门学习路线个人见解

    可以说就目前的市场需求来看,stm32在单片机领域已经拥有了绝对的地位,51什么的已经过时了也只能拿来打基础了,最后依然会转到stm32来,也正是因为这样stm32的学习者越来越多,其中不难发现绝大部 ...

  9. LWIP network interface 即 LWIP 的 硬件 数据 接口 移植 详解 STM32 以太网数据 到达 的第二站: void ethernetif_input( void * pvParameters )

    根据 上一篇 文章 , ETH  DMA 数据中断 会 发送 一个信号量 ,我使用 全局 搜索 这个信号量 s_xSemaphore 得到 一下 几个 值 根据 这个 分析  我们找到了   数据 的 ...

随机推荐

  1. Spring部分面试知识

    对Spring的理解 spring是一个轻量级的开源框架,贯穿持久层.业务逻辑层.控制层.让每一个功能模块都可以独立的分开,降低耦合度,提高代码复用度.spring通过控制反转降低耦合性,一个对象的依 ...

  2. 【javascript】javascript设计模式之单例模式

    单例模式: 定义:单例模式之所以这么叫,是因为它限制一个类只能有一个实例化对象. 实现方法:判断实例是否存在,如果存在则直接返回,如果不存在就创建了再返回.(确保一个类只有一个实例对象) 特点: 命名 ...

  3. MySQL查询高速缓冲

    对mysql的优化不在行,搞过几次优化,但是都不是很理想,还是浪费资源太多.一直发现我的mysql的缓存命中率极差,情况良好的时候到达过60-70%,但是运行时间一长,只有10-20%.查了一些资料, ...

  4. 代码整洁之道读书笔记(Ch4-Ch7)

    这几章从注释.程序格式.对象与数据结构的规范以及错误处理四个方面介绍了如何使代码变得简洁易懂.不同于上次摘抄的方法,这一次我会结合第一次个人作业的代码进行分析. 第四章  注释 这一章告诉我们,好的注 ...

  5. Java基础之PDF文件的合并

    1.首先下载一个jar包:pdfbox-app-1.7.1.jar 2.代码如下: package com; import java.io.File; import java.io.IOExcepti ...

  6. Docker-commit镜像提交

    docker commit:提交容器副本使之成为一个新的镜像 docker commit -a="作者名" -m="提交的描述信息" 容器id 新建的镜像名称: ...

  7. Java代码调用存储过程和存储方法

    准备一个oracle 的JDBC jar 包:ojdbc14_11g.jar 首先找到你的 oracle 安装位置,例如: 1.创建一个JDBC数据库连接工具类: package com.test.d ...

  8. Python学习---JSONP学习180130

    同源策略机制      同源:协议://IP:端口[协议,域名,端口相同]      跨域:知道对方接口,同时对方返回的数据也必须是Jsonp格式的 问题描述:Ajax跨域请求数据的时候,实际浏览器已 ...

  9. Python学习---django模板继承180123

    django模板继承  --20180123 a.include 模板标签 b.extend(继承)模板标签 ------include 模板标签 该标签允许在(模板中)包含其它的模板的内容. 标签的 ...

  10. Linux下的Mysql备份/恢复

    数据库逻辑备份 逻辑备份:将数据库的数据以逻辑的SQL语句的方式导出 查看帮助 mysqldump --help 0.数据库开启状态 1.备份某个特定的库: mysqldump -uroot -pro ...