STM32F4 LAN8720以及LWIP的移植调试记录 (3)

发布者:快乐时刻最新更新时间:2018-04-22 来源: eefocus关键字:STM32F4  LAN8720  LWIP  移植调试 手机看文章 扫描二维码
随时随地手机看文章

LAN8720配置: 
IP: 192.168.192.30 
Gateway: 192.168.192.1


检测到高频率的ARP包

包的内容在询问192.168.192.1的mac地址,并要求应答者发往192.168.192.30。 
可以判断为LAN8720可能要夸网段发包,但是找不到网管。 
于是把LAN8720的网关改为192.168.192.15, 即PC机的IP。 
然后使用wireshark抓包。 
能够看到高频的错误包信息。 
这里写图片描述 
从抓到的包可以看到,IP地址和端口都不是想要的。 
查到在sendto函数的IP地址赋值,原子的例程,赋值方式如下:

upcb->remote_ip=*addr;1

而pcb中remote_ip的类型和addr的类型相同,都为:struct ip_addr *

/* This is the aligned version of ip_addr_t,
   used as local variable, on the stack, etc. */
struct ip_addr {
  u32_t addr;
};12345

于是把自己的代码改成:

pcb->remote_ip.addr = 0x0FC0A8C0;1

于是发出去了。

发送内容是数组时会死在发送函数里。

发送前的call stack: 
发送前的call stack

调用完sendto后的call stack: 
这里写图片描述 
那么在后边弹栈的时候就会崩。

用原子的例程去试,代码也会掉进Hardfault。 
原子的例程:


//UDP服务器发送数据

void udp_demo_senddata(struct udp_pcb *upcb)

{

    struct pbuf *ptr;

    ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)tcp_demo_sendbuf),PBUF_POOL); //申请内存

    if(ptr)

    {

        ptr->payload=(void*)tcp_demo_sendbuf; 

        udp_send(upcb,ptr); //udp发送数据

        pbuf_free(ptr);//释放内存

    } 


奇怪的地方在于 

ptr->payload = (void*)tcp_demo_sendbuf; 

payload没用使用memcpy而是直接被一个指针赋值。 

按网上的例子把这里改成:


memset(ptr->payload, 0 , ptr->len);

memcpy(ptr->payload, dataptr, sendsize); 


然后就不报错了。不知道为啥原子的能跑通。

调recvfrom函数崩掉了


int len;

len = recvfrom(socket_n, _commandBuffer, len, MSG_DONTWAIT, (sockaddr *)&remoteaddr, &remoteaddrlen);


问题在于传入的第三个参数len 是缓冲区长度。 

而申请到的len误作为值传入。 

在recvfrom函数中调用了memset 对缓冲区清零。然后代码就崩了。


关键字:STM32F4  LAN8720  LWIP  移植调试 引用地址:STM32F4 LAN8720以及LWIP的移植调试记录 (3)

上一篇:STM32F407和LAN8720调试记录 (1)
下一篇:STM32移植LWIP网线热插入网络不通的解决办法

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

STM32F407 串口调试总结
使用开发板的串口通讯例程修改了一个自己板子STM32F407的UART4,发现两边收发的数据但是错误的; 刚开始怀疑是我的USB转串口模块坏了,但在模块上RX脚直接接TX脚,数据发送和接收是正常,说明USB转串口模式是没坏的;然后就怀疑UART4是不是比较特殊,代码需要其他的特殊配置,在自己板子RX脚也是直接接TX脚,进入调试状态查看收发数据,发现也是正常的,也查看了手册和网上资料并没有提到UART4的特殊性,说明我的代码配置是没问题。 最后去看了开发板与我自己板子的电路图,发现原来是板子的晶振频率不对,我的板子晶振频率是8MHz,,开发板晶振频率是25MHz; 使用标准库: 在 stm32f4xx.h 中默认是2
[单片机]
第43章 STM32F429的LTDC应用之汉字小字库和全字库制作
43.1 初学者重要提示 学习本章节前,务必优先学习第42章,需要对点阵字体字符编码有个认识。 LTDC驱动设计和相关问题在第41章有详细说明。 本章节为大家讲解的小字库和全字库方法,简单易用,是直接以C文件格式存储到内部Flash的。支持12点阵,16点阵,24点阵和32点阵的ASCII以及GB2312编码汉字显示。 本章节用到的字库软件下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=202 。 43.2 使用MakeDot小软件生成C文件格式小字库方法 生成方法比较简单,这里做个介绍: 43.2.1 第1步,准备好显示的字符 比如要显示如下字符,采用
[单片机]
第43章 <font color='red'>STM32F4</font>29的LTDC应用之汉字小字库和全字库制作
基于STM32F411的cm级超声波测距系统
本项目通过HC-SR04超声波传感器和STM32F411开发板,以精确到cm的精度测量目标物体的距离。 STM32F411RE开发板 x1 HC-SR04超声波传感器 x1 跳线 若干 其中,HC-SR04超声波传感器可以0.3cm精度读取2-400cm范围距离,而且超声波发射器和接收器组合在一起,适合大多数个人爱好项目。主要性能包括: 工作电源:5VDC 工作电流:15mA 工作频率:40KHz 最大距离:4m 最小距离:2cm 测量角度:15度 分辨率:0.3cm 触发输入信号:10uS TTL脉冲 回升输出信号:TTL脉冲,与测量成距离成正比 当传感器接收到一个触发信号,就发出一个40KHz突发信号
[单片机]
基于<font color='red'>STM32F4</font>11的cm级超声波测距系统
使用STM32CubeMX进行STM32F429 LCD编程<二>层配置
一.配置重载 所有层的寄存器均执行影子操作。一旦对某个寄存器执行写操作,便不应在重载完成前再次进行修改。 因此,如果在尚未重载时对同一寄存器执行新的写操作,则将覆盖之前的配置。 该控制通过配置寄存器SRCR来完成。 在HAL_LTDC_ConfigLayer(stm32f4xx_hal_ltdc.c中)函数中有: /* Set the Immediate Reload type */ hltdc- Instance- SRCR = LTDC_SRCR_IMR; 或使用宏: __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(&hltdc); 二.层和层混合 最多可单独使能、禁止和配置两个层。层显示顺序固
[单片机]
关于STM32F4定时器时钟频率问题
从时钟树中我们可以得知 (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线 (2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线 从STM32F4的内部时钟树可知, (1)当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟; (2)而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM
[单片机]
关于<font color='red'>STM32F4</font>定时器时钟频率问题
STM32F429之GPIO使用
STM32 IO模式 (1)浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 (2)带上拉输入_IPU——IO内部上拉电阻输入 (3)带下拉输入_IPD—— IO内部下拉电阻输入 (4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电 (5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变 。可以读IO输入电平变化,实现C51的IO双向功能 (6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输
[单片机]
stm32F4XX之窗口看门狗 HAL库
首先讲一下独立看门狗和窗口看门狗之间的区别。 独立看门狗Iwdg——独立于系统之外,因为有独立时钟,一般是外部低速时钟。主要用于监视硬件错误。 窗口看门狗wwdg——系统内部的故障探测器,采用内部RCC时钟,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作用了。主要用于监视软件错误 1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的。窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器(不受系统时钟限制,即使系统时钟坏了也能工作),窗口看门狗是用的系统时钟
[单片机]
<font color='red'>stm32F4</font>XX之窗口看门狗 HAL库
移植u-boot-2010.09到S3C2440(五)—— 通过OPENJTAG、OPENOCD、ECLIPSE进行调试
OPENJTAG是买的百问网的,坑爹啊,180大洋,贵。这里说一句,OPENJTAG不是百问网的独家正版,这个东西是开源的,百问网说这东西是他自己的,说别人是盗版的,这个嘿嘿。。。。就算别人是根据他的做出来的,做人要谦虚啊。有句话说的好,要做就不要怕别人模仿。话说,好像国内很多个人都做过OPENJTAG。而且,他这个东西里面的插件都是别人的。给的网址都过期N年了。。。当然我自己是做不出来的。 它家的这个硬件性能,极其慢,必须等S3C2440运行一小段时间,稳定了,再连openocd才能连接的上硬件,还有好像是这个usb转串口做的也一般,输入存在丢失。一会的少一堆输入。 不得不说,现在最便宜的在linux下调试的硬件设备,我
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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