Uip在STM32平台移植之建立UDP链接

发布者:脑力风潮最新更新时间:2018-04-28 来源: eefocus关键字:Uip  STM32  移植  建立UDP链接 手机看文章 扫描二维码
随时随地手机看文章

在STM32上通过建立UDP连接实现数据的传输。在上节提到采用的是轻型的TCP/IP协议栈Uip,在Uip协议中实现UDP连接的创建,需要以下步骤:

第一步,打开支持UDP协议的配置项,支持的UDP连接的个数,参考上节的配置文件。

第二步,确定本地的IP地址和端口号(192.168.0.100  9999),远程主机的IP地址和端口号(192.168.0.22 9998)

#define IP_ADDR1  192 
#define IP_ADDR2  168
/#define IP_ADDR3   3
/#define IP_ADDR4   100

#define  UDP_REMOTE_PORT  9998 
#define  UDP_LOCAL_PORT   9999

第三步,UDP创建连接初始化,

void Udp_Init(void)
{
uint8_t i = 0;
uip_ipaddr_t ipaddr;
for(i = 0; i< UIP_UDP_CONNS; i++)
{
if(&uip_udp_conns[i] != NULL)
{
uip_udp_remove(&uip_udp_conns[i]);
}
}
//创建UDP连接
         uip_ipaddr(ipaddr,192, 168, 0, 22);   
uip_udp_conn = uip_udp_new(&ipaddr, HTONS(UDP_REMOTE_PORT));
 
//绑定本地端口
if(uip_udp_conn != NULL)
{
uip_udp_bind(uip_udp_conn, HTONS(UDP_LOCAL_PORT));
}
}

将此UDP初始化函数,放在uip协议栈初始化之后。

UDP应用层数据处理函数的实现

#ifndef UIP_UDP_APPCALL
#define UIP_UDP_APPCALL     Udp_Appcall
#endif

void Udp_Appcall(void)

{

uint32_t i ;
       u8 strloadlen = 0;
        uip_ipaddr_t ipaddr;

 u8 targetIp[4], netMask[4], gateway[4], macaddr[6],netip[4];
       char netMaskbuff[16], macaddrbuff[20],gatewayBuf[16];
memset(str,0,100);
udpip_buf = (struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN];
udp_datelen = (udpip_buf->len[0] << 8) + udpip_buf->len[1] - UIP_IPUDPH_LEN;//HTONS(udpip_buf->len);
         udp_appbuf = (char *)uip_appdata; 

      memcyp(str,udp_appbuf,udp_datelen);

        myudp_send(str,strlen(str)); 

}

根据需要,实现对数据的处理,编译完成后,下载值目标板,复位。

第四步,将所使用的PC机的IP地址设置成192.168.0.22,打开网络调试助手,将协议类型设置为UDP,本地端口号设置成 UDP_REMOTE_PORT,点击连接,即可创建UDP连接,此时即可通过在网络助手,向目标板发送UDP数据包。


关键字:Uip  STM32  移植  建立UDP链接 引用地址:Uip在STM32平台移植之建立UDP链接

上一篇:STM32F103VCT6+W5500 UDP通信成功
下一篇:W5500通过上位机控制实现调节LED灯带的亮度

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

基于STM32的双路信号源及配置平台设计
随着在雷达探测、仪表测量、化学分析等领域研究的不断深入,不仅要求定性的完成目标检测,更加需要往高精度、高分辨率成像的方向发展。一方面,产生频率、幅度灵活可控,尤其是低相位噪声、低杂散的频率源对许多仪器设备起着关键作用。另一方面,电子元器件实际性能参数并非理想以及来存在自外部内部的干扰,大量的误差因素会严重影响系统的准确性。双路参数可调的信号源可有效地对系统误差、信号通道间不平衡进行较调,并且可以产生严格正交或相关的信号,这在弱信号检测中发挥重要作用。为此本文采用双通道DDS方法,以STM32为控制器,完成了一种高分辨率灵活可调的双路信号源电路设计。 1 DDS原理及系统方案 1.1 DDS工作原理 直接数字频率合成(DDS)是一种以
[单片机]
基于<font color='red'>STM32</font>的双路信号源及配置平台设计
详细解析STM32中的堆栈机制
刚拿到STM32时,你只编写一个死循环 编译后,就会发现这么个程序已用了1600多的RAM,这要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,分析.map文件,你会发现是堆和栈占用的 在startup_stm32f10x_md.s文件中,它的前面几行就有以下定义: 这下明白了吧,STM32在启动的时候,RAM首先分配给使用到的全局变量,还有调用库占用的一些数据(不太清楚是什么数据),然后再将剩余的空间分配给Heap和Stack。由于内存空间是启动时实现分配好的,所以当动态分配内存的需求过多的时候,就会产生堆栈空间不足的问题。 查阅网上的资料,理解堆和栈的区别: - (1)栈区(stack):由编译器自动
[单片机]
详细解析<font color='red'>STM32</font>中的堆栈机制
关于stm32的所有下载程序方法
1.使用isp下载 1.使用isp下载的时候保证BOOT0=1,BOOT1=0,这样进入系统系统存储器启动(为了避免有串口输出等程序在flash当中运行扰乱下载),这种模式启动的程序通过串口下载进去,使用Flash Loader Demonstrator下载 BOOT1=x BOOT0=0 从用户闪存flash启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1 BOOT0=1 从内置SRAM启动,这种模式可以用于调试 2.使用isp工具的时候当按下复位键才能进入系统存储模式,才能编程flash芯片,编程完成之后马上进入flash启动,此时再次
[单片机]
STM32的时钟分割
TIM_TimeBaseStructure.TIM_ClockDivision ;//时钟分割 TIMx_CCMR1 寄存器 Fck_int是定时器的输入频率(TIMxCLK),一般是 72Mhz,而 则是根据 TIMx_CR1 的 CKD 的设置来确定的,如果 CKD 设置为 00,那么 = 。 N 值就是滤波长度,举个简单的例子:假设 IC1F =0011,并设置 IC1 映射到通道 1 上,且为上升沿触发,那么在捕获到上升沿的时候,再以的频率,连续采样到 8 次通道 1 的电平,如果都是高电平,则说明确实是一个有效的触发,就会触发输入捕获中断(如果开启了的话)。这样可以滤除那些高电平脉宽低于 8 个采样周期的脉冲信号
[单片机]
STM32 中的 assert_param 函数
我们在学STM32的时候函数assert_param出现的几率非常大,上网搜索一下,网上一般解释断言机制,做为程序开发调试阶段时使用。下面我就谈一下我对这些应用的看法,学习东西抱着知其然也要知其所以然。 4 断言机制函数assert_param 我们在分析库函数的时候,几乎每一个函数的原型有这个函数assert_param();下面以assert_param(IS_GPIO_ALL_PERIPH(GPIOx));为例说一下我的理解,函数的参数IS_GPIO_ALL_PERIPH(GPIOx),我们可以寻找到原型 #define IS_GPIO_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH))
[单片机]
<font color='red'>STM32</font> 中的 assert_param 函数
stm32重启调试笔记
#stm32重启调试笔记 本文章主要解决在使用stm32+ucos进行嵌入式软件开发中遇到的系统重启现象查找与解决。 1 、重启原因 系统重启又多种可能:1、看门狗中断;2、内存泄漏;3、软件重启。 首先看一下stm32的手册关于系统重启的状态寄存器,其中详细的记录了几个系统重启的原因(低功耗复位标志、窗口看门狗复位标志、) 寄存器详细信息: 查看寄存器值 a:通过debug查看,在代码进入main函数时加入断电,通过查看RCC寄存器值可以明了的查看相关状态 b:在查看之后应该清除中断信息,这样下次重启时才能知道重启原因。加入下面一条语句。 /*打印中断标志字*/ void print_reboot
[单片机]
<font color='red'>stm32</font>重启调试笔记
C语言宏定义的使用原理
使用STM32开发的朋友不知道是否有发现过这样的一些宏定义? 如下: #if defined (__CC_ARM) #pragma anon_unions #endif 看到上面的语句一开始确实搞不懂为什么要写这些东西,通过上网去查询,才搞明白这其中的使用原理。 上面的代码段我们可以看到两部分的内容: 1) __CC_ARM 2) #pragma anon_unions 这两个都有啥用呢? 待我一一道来! 1、__CC_ARM 是 ARM 编译中的宏选项 __CC_ARM 是一个编译器的选项,在ARM开发中根据开发环境的不同,有好几个可选的宏选项。
[单片机]
一文详解STM32输入捕获
输入捕获是处理器捕获外部输入信号的功能,基于定时器抓取输入信号指定触发方式之间的长度。具体有下面三种触发情况: 1、 上升沿触发 2、 下降沿触发 3、 上下都触发 当触发条件发生后,捕获比较寄存器锁定当前的计数值,如果开启了中断或者DMA,就可以通过中断或DMA及时获得数据进行处理。有时可能遇到上一次触发的标志还没清除,下次触发就发生了,此时会将over-capture标志置位,对于可能出现over-capture的情况,建议先读取数据再清除标志,避免在读取标志后及读取数据前这段时间错过over-capture。 配置输入捕获的步骤: 1. 打开定时器和对应输入引脚的时钟 2. 配置引脚为对应的复用功能 3. 配置基
[单片机]
一文详解<font color='red'>STM32</font>输入捕获
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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