利用stm32的lwip TCP/IP协议栈的通信的思路

发布者:星辰小鹿最新更新时间:2016-10-05 来源: eefocus关键字:stm32  lwip  TCP  IP协议栈  通信 手机看文章 扫描二维码
随时随地手机看文章
利用stm32f103vet6作为平台,enc28j60网卡,lwip tcp/ip作为协议栈进行相应的程序编写。

Stm32作为服务器与stm32作为客户端程序编写的基本步骤,思路清理:

1、stm32作为服务器端

利用stm32的lwip TCP/IP协议栈的通信的思路 - yuanzhaoming901030@126 - wit_yuans space

 

当stm32作为服务器端的时候,首先有一点要明确的是端口与ip的确定性,当然,后期需要改变的是,如果服务器地址的变动,就需要相应的做些程序的改变。

程序的步骤如下所示:

1、利用lwip对网卡做相应的初始化工作,例如ip地址,网络掩码,以及网关的操作。

2、对服务器端的相应操作。(包括pcb控制块的获取,结构体的初始化工作。)

3、绑定相应的远程计算机,设置相应的ip地址和端口。

4、监听相应的信息

注意:监听的时候,需要重新设置的是pcb结构体的内存布局,节省内存空间。监听其实也是一个获取信息的过程,控制块在进行回调的时候,是有主机相关的参与,控制块也会相应的改变。

5、连接

在监听相应的端口的操作完毕之后,数据的接收和发送的工作就在这个时刻完成,在接收数据的程序当中,相应的可以通过一个tcp_write的操作将数据显示在浏览器当中。需要明确的是,一个send的数据,和一个write的功能是有差别的。

最后注意一点:

由于stm32是一个服务器端,因此不可避免的是,服务器端的tcp连接是不用手动进行断开的,那么有两个操作是附带的。一个是pcb控制块的内存空间是不用进行释放的,另外一个就是tcp的连接是不用断开的。

 

2、stm32作为客户端

利用stm32的lwip TCP/IP协议栈的通信的思路 - yuanzhaoming901030@126 - wit_yuans space

 

Stm32作为客户端,所需要的操作和stm32作为服务器端的思想有一个转变的过程,思路如下:

1、初始化网卡的相关信息。客户端的相关操作有,ip地址,掩码,网关的操作。

2、pcb块的获取。进行相关的结构体的初始化,分配内存空间。

3、进行连接。前提是有Ip地址和相应的端口可以给出,这里API给出了相关的回调方法(函数)。

4、释放掉pcb块的内存。

5、断开tcp的连接。

2013年7月11日晚上:

今天一天都在调试tcp_connect()函数,唉,现在分析一下原因:一、网上的资料,弄来弄去,都是一个将stm32当作服务器,很少是将stm32当作客户端的,也许,配置pc服务器对它们来说是一件费力的事情。二、没有资料,只好自己一下下花时间的去调试,可悲的是,晚上才明白原来自己把网络的远程地址的赋值方法设置的是有一定问题的,我是按照给的方案塞地址的,这种方法不对。三、我怀疑的是我搭建的服务器有问题,确实,再我回头搞服务器的时候,它却根本不听我的话。三、就是电脑的防火墙,这个我只能是听网上的说这个东东。

解决办法是:上面我给的思路是没有问题的,按照那个思路,离成功不远,也许一次能成功,都是靠慢慢来的。而且,昨天,我在做这个测试的完毕,想上网的时候,给电脑插上网线,我的电脑不能上网了,郁闷,难道我还得考虑网卡的问题,而且,网卡灯是闪着的,却不能上……,当然,今天我是测速过ping的。wireshark也是做了哦。

服务器的配置,可以用C++进行配置,当然也可以用java来配置,这个比C++简单多了。

代码附上:

package ServerAndCustomer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
 public static void main(String[] args) throws Exception {
  ServerSocket server = new ServerSocket(10000);
  Socket socket = server.accept();
  BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  String line = br.readLine();
  System.out.println(line);
  socket.close();
  server.close();
 }

}
当然了,一般是需要给客户端写上测试程序的:

 

package ServerAndCustomer;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class customer {
 public static void main(String[] args) throws Exception{
  Socket socket = new Socket(InetAddress.getLocalHost(), 10000);
  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
  bw.write("i am customer");
  
  bw.close();
  socket.close();
 }
}
终于将代码与思路理清,lwip还是有很多的内容值得我们学习啊…

关键字:stm32  lwip  TCP  IP协议栈  通信 引用地址:利用stm32的lwip TCP/IP协议栈的通信的思路

上一篇:stm32的IAP学习
下一篇:stm32的相关网络问题

推荐阅读最新更新时间:2024-03-16 15:13

基于stm32的pwm呼吸灯
这一节的程序所涉及到的硬件是比较简单,主要是考察对stm32时钟的应用 原理性质的东西我就不多说了,参考书目为: 《STM32库开发实战指南》 刘火良,杨森著 《STM32开发指南(库函数版本)》 正点原子著 使用定时器来控制I/O口输出PWM波形,从而驱动LED灯出现类似呼吸频率一般的亮灭。 硬件电路图: 我的收获: 1 这是STM32数据手册上对TIM3通用定时器复用功能重映象的描述,假设让PA6作为PWM输出,从图中可以看出PA6对应TIM3的通道1, 使能TIM3通道1的函数为 TIM_OC1Init();1 同样的,如果想要使能PA7,它对应的是TIM3的通道2,那么使能通道2的函数便是: TIM_OC2Init(
[单片机]
基于<font color='red'>stm32</font>的pwm呼吸灯
STM32编程小总结
1.在主函数的正式调用里,RCC的配置一定要在各外设的函数调用之前。 2.外设调试出现问题时,一定先考虑是不是没有打开外设的时钟。并且RCC配置和外设时钟的打开要在配置寄存器之前。 3.使用模块化编程可以使程序简单易读,可移植性高,下一次调用方便。但是可能会出现很多问题,必须一一克服。 在主函数里,把需要用得到的各模块配置函数调用写入,这一点很重要。 4.模块化编程时,一定要确保模块的.c文件添加进了工程目录,否则会出现:Undefined Symbol的错误提示,这一点要牢记。 5.中断服务函数必须要写进stm32f10x.it.c里面。否则会出问题。 6.有时添加的模块太多可能会调试不出来,这时考虑把GPI
[单片机]
OFDM水声通信定时同步的FPGA实现
  正交频分复用(Orthogonal Frequency DivisionMultiplexing,OFDM)技术是一种多载波调制技术,它将宽带信道分解为相互正交的一组窄带子信道,利用各个子信道进行并行数据传输,因此其频谱利用率高、抗多径衰落能力强。目前已经在数字视频广播(DVB-T2)、无线局域网(802.11a/g)等系统中成功得到应用,并且成为第四代移动通信的核心技术之一。水声信道是一个时、空、频变的多径信道,它具有强多径、窄频带和强噪声等特点,将OFDM传输技术应用到水声通信中,已成为水声通信的研究热点之一。    OFDM 系统 自身的正交多载波调制特点,决定了其对同步误差十分敏感。能否实现准确的符号定时同步和载波
[网络通信]
基于官方库的STM32操作U盘注意的问题
前几天调试了stm32f105基于官方库STM32_USB-Host-Device_Lib_V2.2.0的示例代码读取优盘,调试成功。 在官方库文件STM32_USB-Host-Device_Lib_V2.2.0下Project/USB_Host_Examples/MSC,打开工程。根据你的外部晶振,需要修改系统频率和USB时钟设置。 我用的外部晶振是8M的为例,打开文件system_stm32f10x.c文件,找到函数static void SetSysClockTo72(void) 以下为源码 /** * @brief Sets System clock frequency to 72MHz and configu
[单片机]
浅谈STM32芯片的存储结构
一、前言 本篇介绍STM32芯片的存储结构,ARM公司负责提供设计内核,而其他外设则为芯片商设计并使用,ARM收取其专利费用而不参与其他经济活动,半导体芯片厂商拿到内核授权后,根据产品需求,添加各类组件,生产芯片售卖。图1为STM32的组成示意图,其中Cortex-M3内核、调试系统都是ARM公司设计,内部总线、外设、存储、时钟复位等都由ST公司开发。可以明显看出总线是cpu、内存、外设传递信息的公用通道,芯片上的各个部件通过总线相连接。 图1 STM32芯片简要结构图 内核通过总线访问各个外设,现在通往外设的“路”已经铺好,还需要规定各个外设的“门牌号”,以便精准控制每个外设。ARM Cortex-M3系列的处理器,采用存储
[单片机]
浅谈<font color='red'>STM32</font>芯片的存储结构
基于STM32的PWM呼吸灯系统设计
一、简述 记--使用定时器4输出PWM来实现呼吸灯效果。 在人眼辨识能力范围内,调节LED亮的时间,达到LED灯的亮度不同。例:给低电平LED就亮,如果一个脉冲中全是低电平那么LED最亮,如果一个脉冲一半是高电平,一半是低电平,那么LED就显得有点暗,这样调整脉冲中的高低电平的比例就可以达到LED的亮度调节。 二、效果 LED1逐渐由暗变亮,接着由亮变暗。 三、工程结构 四、源文件 #include stm32f4xx.h #include led.h #include pwm.h //粗延时 void delay_ms(int ms) { int i,j; for(i=0; i m
[单片机]
基于<font color='red'>STM32</font>的PWM呼吸灯系统设计
2020年中国国际信息通信展览会在京举行 5G成亮点
10月14日,2020年中国国际信息通信展览会在北京国家会议中心开幕。本届展会主题为“网融万物,智向未来”。本届展会是在疫情防控常态化形势下,我国举办的首个国家级信息通信领域专业展会。博览会上,新基建、5G+行业应用、工业互联网、数字中国、新型智慧城市等领域的相关技术和应用是展示重点。 从企业来看,中国电信、中国移动、中国联通都直观地展示5G应用和最新技术进展,中国广电重点展示有线电视网络整合和5G相关内容,中国铁塔重点展示面向运营商的电信基础设施共建共享成果。中国信科、华为、中兴通讯、中国普天、中国通用技术集团、爱立信、诺基亚贝尔等国内外信息技术企业都围绕自身业务和行业热点进行展示。 展会特别举办了“电信普遍服务和网络扶
[手机便携]
基于FPGA设计安全的汽车通信网络
汽车工业正在经历一场无线技术革命,但安全威胁不解决,则可能削弱这块新兴的市场。由于高速网络连接正设法进入汽车领域,设计师面临新通信标准实施的挑战。许多已经习惯于漫长开发周期的设计师, 现在则在为迅速给新型车辆配备用户需求的电子设备而进行竞争。为调整上市时间并驾驭出现的多个标准,设计师正转向采用fpga(现场可编程门阵列)。遗憾的是,由于汽车工业匆忙采用下一代基于fpga的汽车远程信息系统,几乎没有设计师能够充分明白他们选择的fpga在安全上意味着什么。构建安全的网络首先要设计安全的系统,而且选择适当的元件可能对大型网络和相关预订收入有重要影响。 从发动机控制模块,到涉及乘客舒适与安全的驾驶室内部系统,已经出现了汽车远程信息系统
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved