完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.使用的芯片是STM32F429、PHY是dp83848.
软件工程使用的是原子大概的F429+UCOSii+LWIP的工程,修改了PhyAddress为0x01, 同时修改了/* Section 4: Extended PHY Registers */ #define PHY_SR ((uint16_t)16) //DP83848的PHY状态寄存器地址 #define PHY_SPEED_STATUS ((uint16_t)0x0002) //DP83848 PHY速度值掩码 #define PHY_DUPLEX_STATUS ((uint16_t)0x0004) //DP83848 PHY连接状态值掩码 但是连接上网络之后就是ping不通。望各位给点调试思路。 软件运行之后现象: 1.RJ45黄灯常亮,绿灯一直在闪烁; 2.仿真查看lwip_comm_init初始化都是正常的。 3.程序一直在进中断服务函数,UCOSII任务运行都是正常的。 void ETH_IRQHandler(void) { OSIntEnter(); while(ETH_GetRxPktSize(ETH_Handler.RxDesc)) { lwip_pkt_handle();//处理以太网数据,即将数据提交给LWIP } //清除中断标志位 __HAL_ETH_DMA_CLEAR_IT(Ð_Handler,ETH_DMA_IT_R); __HAL_ETH_DMA_CLEAR_IT(Ð_Handler,ETH_DMA_IT_NIS); OSIntExit(); } |
|
相关推荐
14个回答
|
|
DP83848.c的代码
[C] 纯文本查看 复制代码 #include "DP83848IVV.h"#include "lwip_comm.h"#include "delay.h"#include "malloc.h"#include "includes.h"ETH_HandleTypeDef ETH_Handler; //以太网句柄ETH_DMADescTypeDef *DMARxDscrTab;//以太网DMA接收描述符数据结构体指针ETH_DMADescTypeDef *DMATxDscrTab;//以太网DMA发送描述符数据结构体指针 uint8_t *Rx_Buff; //以太网底层驱动接收buffers指针 uint8_t *Tx_Buff; //以太网底层驱动发送buffers指针 //DP83848初始化//返回值:0,成功;// 其他,失败u8 DP83848_Init(void){ u8 macaddress[6]; macaddress[0]=lwipdev.mac[0]; macaddress[1]=lwipdev.mac[1]; macaddress[2]=lwipdev.mac[2];macaddress[3]=lwipdev.mac[3]; macaddress[4]=lwipdev.mac[4];macaddress[5]=lwipdev.mac[5]; ETH_Handler.Instance=ETH; ETH_Handler.Init.AutoNegotiation=ETH_AUTONEGOTIATION_ENABLE;//使能自协商模式 ETH_Handler.Init.Speed=ETH_SPEED_100M;//速度100M,如果开启了自协商模式,此配置就无效 ETH_Handler.Init.DuplexMode=ETH_MODE_FULLDUPLEX;//全双工模式,如果开启了自协商模式,此配置就无效 ETH_Handler.Init.PhyAddress=DP83848_PHY_ADDRESS;//DP83848地址 ETH_Handler.Init.MACAddr=macaddress; //MAC地址 ETH_Handler.Init.RxMode=ETH_RXINTERRUPT_MODE; //轮训接收模式 ETH_Handler.Init.ChecksumMode=ETH_CHECKSUM_BY_HARDWARE;//硬件帧校验 ETH_Handler.Init.MediaInterface=ETH_MEDIA_INTERFACE_RMII;//RMII接口 if(HAL_ETH_Init(Ð_Handler)==HAL_OK) { return 0; //成功 } else return 1; //失败}//ETH底层驱动,时钟使能,引脚配置//此函数会被HAL_ETH_Init()调用//heth:以太网句柄void HAL_ETH_MspInit(ETH_HandleTypeDef *heth){ GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_ETH_CLK_ENABLE(); //开启ETH时钟 __HAL_RCC_GPIOA_CLK_ENABLE();//开启GPIOA时钟__HAL_RCC_GPIOB_CLK_ENABLE();//开启GPIOB时钟 __HAL_RCC_GPIOC_CLK_ENABLE();//开启GPIOC时钟 __HAL_RCC_GPIOG_CLK_ENABLE();//开启GPIOG时钟 /*网络引脚设置 RMII接口 ETH_MDIO -------------------------> PA2 ETH_MDC --------------------------> PC1 ETH_RMII_REF_CLK------------------> PA1 ETH_RMII_CRS_DV ------------------> PA7 ETH_RMII_RXD0 --------------------> PC4 ETH_RMII_RXD1 --------------------> PC5 ETH_RMII_TX_EN -------------------> PG11 //DP83848 此引脚使用的PG11 ETH_RMII_TXD0 --------------------> PG13 ETH_RMII_TXD1 --------------------> PG14*/ //PA1,2,7 GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_7; GPIO_Initure.Mode=GPIO_MODE_AF_PP; //推挽复用 GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 GPIO_Initure.Alternate=GPIO_AF11_ETH; //复用为ETH功能 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化 //修改为PG11 GPIO_Initure.Pin=GPIO_PIN_11; //PG11 HAL_GPIO_Init(GPIOG,&GPIO_Initure); //始化 //PC1,4,5 GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; //PC1,4,5 HAL_GPIO_Init(GPIOC,&GPIO_Initure); //初始化 //PG13,14 GPIO_Initure.Pin=GPIO_PIN_13|GPIO_PIN_14; //PG13,14 HAL_GPIO_Init(GPIOG,&GPIO_Initure); //初始化 HAL_NVIC_SetPriority(ETH_IRQn,0,0); //网络中断优先级应该高一点 HAL_NVIC_EnableIRQ(ETH_IRQn);}//读取PHY寄存器值u32 DP83848_ReadPHY(u16 reg){ u32 regval; HAL_ETH_ReadPHYRegister(Ð_Handler,reg,®val); return regval;}//向DP83848指定寄存器写入值//reg:要写入的寄存器//value:要写入的值void DP83848_WritePHY(u16 reg,u16 value){ u32 temp=value; HAL_ETH_ReadPHYRegister(Ð_Handler,reg,&temp);}//得到DP83848的速度模式//返回值://001:10M半双工//101:10M全双工//010:100M半双工//110:100M全双工//其他:错误.u8 DP83848_Get_Speed(void){u8 speed;speed=((DP83848_ReadPHY(16)&0x06)>>1); //从DP83848的16号寄存器中读取网络速度和双工模式return speed;}extern void lwip_pkt_handle(void);//在lwip_comm.c里面定义//中断服务函数void ETH_IRQHandler(void){ OSIntEnter(); while(ETH_GetRxPktSize(ETH_Handler.RxDesc)) { lwip_pkt_handle();//处理以太网数据,即将数据提交给LWIP } //清除中断标志位 __HAL_ETH_DMA_CLEAR_IT(Ð_Handler,ETH_DMA_IT_R); __HAL_ETH_DMA_CLEAR_IT(Ð_Handler,ETH_DMA_IT_NIS); OSIntExit(); }//获取接收到的帧长度//DMARxDesc:接收DMA描述符//返回值:接收到的帧长度u32 ETH_GetRxPktSize(ETH_DMADescTypeDef *DMARxDesc){ u32 frameLength = 0; if(((DMARxDesc->StatusÐ_DMARXDESC_OWN)==(uint32_t)RESET) && ((DMARxDesc->StatusÐ_DMARXDESC_ES)==(uint32_t)RESET) && ((DMARxDesc->StatusÐ_DMARXDESC_LS)!=(uint32_t)RESET)) { frameLength=((DMARxDesc->StatusÐ_DMARXDESC_FL)>>ETH_DMARXDESC_FRAME_LENGTHSHIFT); } return frameLength;}//为ETH底层驱动申请内存//返回值:0,正常// 其他,失败u8 ETH_Mem_Malloc(void){ DMARxDscrTab=mymalloc(SRAMIN,ETH_RXBUFNB*sizeof(ETH_DMADescTypeDef));//申请内存DMATxDscrTab=mymalloc(SRAMIN,ETH_TXBUFNB*sizeof(ETH_DMADescTypeDef));//申请内存 Rx_Buff=mymalloc(SRAMIN,ETH_RX_BUF_SIZE*ETH_RXBUFNB);//申请内存Tx_Buff=mymalloc(SRAMIN,ETH_TX_BUF_SIZE*ETH_TXBUFNB);//申请内存if(!(u32)&DMARxDscrTab||!(u32)&DMATxDscrTab||!(u32)&Rx_Buff||!(u32)&Tx_Buff){ETH_Mem_Free();return 1;//申请失败}return 0;//申请成功}//释放ETH 底层驱动申请的内存void ETH_Mem_Free(void){ myfree(SRAMIN,DMARxDscrTab);//释放内存myfree(SRAMIN,DMATxDscrTab);//释放内存myfree(SRAMIN,Rx_Buff);//释放内存myfree(SRAMIN,Tx_Buff);//释放内存 } |
|
|
|
各位给点调试的思路,目前不知道怎么继续调试下去了
|
|
|
|
期待回复啊!!!
|
|
|
|
不懂,帮顶
|
|
|
|
这块直接移植的是原子哥的程序,还没动。现在的问题是我移植ping不通,程序仿真过程中程序会不断的进ETH_IRQHandler中断(系统任务运行正常)。
不知道接下来如何调试了 |
|
|
|
|
|
|
|
是打开的
|
|
|
|
插上网线 LINK LED 不亮。LINK_ACT LED 一直在闪烁
|
|
|
|
|
|
|
|
原子大哥的ETH_TX_EN接的PB11,我使用的PG11引脚。单片机MAC是如何识别使用的是哪个引脚呢?现在是可以接收到数据接收到数据之后不会响应!
仿真根据调试发现,可以接收到ping的数据包!但是程序接收到数据是怎么处理的不是很明白。 接收函数运行到这里就不知道跑哪去了! [C] 纯文本查看 复制代码 err_t ethernetif_input(struct netif *netif){err_t err;struct pbuf *p;p=low_level_input(netif); //调用low_level_input函数接收数据if(p==NULL) return ERR_MEM;err=netif->input(p, netif); //调用netif结构体中的input字段(一个函数)来处理数据包if(err!=ERR_OK){LWIP_DEBUGF(NETIF_DEBUG,("ethernetif_input: IP input errorn"));pbuf_free(p);p = NULL;} return err;} |
|
|
|
|
|
|
|
问题解决了,之前一直是可以接收,但是发送不了。还是引脚配置的问题。我使用Cube重新生成的引脚配置搞定了!
|
|
|
|
请问引脚配置什么问题呢?
|
|
|
|
记忆中是以太网TX的引脚配置错了,主要是还是检查移植之后的对应的引脚是否都正确,如果不确定可以使用cube进行引脚配置在对比查看
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2568 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2363 浏览 5 评论
3209 浏览 3 评论
2836 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2787 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
665浏览 1评论
904浏览 0评论
1025浏览 0评论
668浏览 0评论
498浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:26 , Processed in 1.368011 second(s), Total 104, Slave 86 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号