This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C129ENCPDT网络例程问题



实验 TivaWare_C_Series-2.1.4.178\examples\boards\dk-tm4c129x\enet_lwip

例程中初始化了液晶和图形库,我仅仅搭建了最小系统,在初始化液晶的过程中会进Fault ISR ,为啥? 

例程是dhcp获取ip的,我把网线插到无限路由器扔获取不到ip

 ROM_FlashUserGet(&ui32User0, &ui32User1);
if((ui32User0 == 0xffffffff) || (ui32User1 == 0xffffffff))
{
while(1)
{代码会一直死在这}
}

把这段代码屏蔽,修改为静态ip

pui8MACArray[0] = 2;
pui8MACArray[1] = 0;
pui8MACArray[2] = 0;
pui8MACArray[3] = 1;
pui8MACArray[4] = 2;
pui8MACArray[5] = 3;//伪造mac地址

ipaddr=inet_addr("192.168.1.33");
netmask=inet_addr("255.255.255.0");
gw=inet_addr("192.168.1.1");

lwIPInit(g_ui32SysClock, pui8MACArray, ipaddr, netmask, gw, IPADDR_USE_STATIC);

LocatorInit();// 在这里创建udp,绑定本地ip,端口23
LocatorMACAddrSet(pui8MACArray);
LocatorAppTitleSet("DK-TM4C129X enet_lwip");

 httpd_init();//网页服务器

ROM_IntPrioritySet(INT_EMAC0, ETHERNET_INT_PRIORITY);
ROM_IntPrioritySet(FAULT_SYSTICK, SYSTICK_INT_PRIORITY);

到这里网络就算初始化完了。下载代码 在网络共享中心发现了本地连接,但是ping这个ip是没有任何响应的,不知为何

while(1)
{
ui32NewIPAddress = lwIPLocalIPAddrGet();
UARTprintf("ip:%d,%d,%d,%d\r\n",addr[3]=(ui32NewIPAddress >> 24) & 0xff,
addr[2]=(ui32NewIPAddress >> 16) & 0xff,
addr[1]=(ui32NewIPAddress >> 8) & 0xff,
addr[0]= ui32NewIPAddress & 0xff);
ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, GPIO_PIN_6);
ROM_SysCtlDelay(10000000);
ROM_GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_6, 0);
ROM_SysCtlDelay(10000000);
}

我一直打印ip地址,刚上电的时候ip全是255,过几秒ip就一直是0了~~~

代码上传好几次都失败了~留个Q 778575669

  • 增大堆栈能否解决。

    设置断点,尝试找出从哪进去的 FaultISR;

    https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/374640

  • 你好 堆栈是在启动文件里设置吗

    Stack EQU 0x00000800

    Heap EQU 0x00000000

    为何第二个设置的是0呢? 尝试改大了 也不行

    ip一直是0的问题解决了 是因为auto ip的宏忘关了 现在lwIPLocalIPAddrGet可以获取到ip了 本地连接也有 但就是ping不通

  • 请问 SW-EK-TM4C129EXL-2.1.4.178.exe 和SW-DK-TM4C129X-2.1.4.178.exe 这两个有什么区别呢? 我对比下代码 前里面有液晶的初始化 是跟开发板对应的吧?

    第二个就是裸机的 是这样吗

  • 分别对应官方DK和EK的板子,仅此而已。EK相当于一个最小系统板,官方都有原理图的。

  • 解决方法:

    1.ip地址的高位和低位搞反了,要想使用inet_addr函数去写,应该这样写,高位在前

    ipaddr=inet_addr("10.1.168.192");
    netmask=inet_addr("0.255.255.255");
    gw=inet_addr("1.1.168.192");

    或者写成 lwIPInit(SysClock, pui8MACAddr, 0xc0a8010a, 0xffffff00, 0xc0a80101, IPADDR_USE_STATIC);

    mac地址一直获取不到  自己编一个吧

    大循环里打印的时候也改下

    2.修改为静态ip,要把dhcp和auto ip的宏关掉,在lwipop.h中

    3.关于硬件方面,四根通信线要加49.9的上拉,不然网口识别不到。

    发送和接收的线可以两两调换位置,这个好像是网口带有自动翻转功能吧

    4.调试中最重要的,本地连接识别到了网线插入,但是协商网络速度失败,所以我手动设置为10m全双工的通信模式,在本地连接-属性-配置-高级-连接方式和模式里,电脑网卡原本设置的自动侦测,现改为10m全双工,ping命令ok,

    自动侦测 本地连接一会建立 一会断开 如此循环

    100m全双工 ping失败 半双工 也失败,10m的全、半双工都ok,换台电脑也不行。