查看: 2013|回复: 0

【STM32F746G-Discovery】网络LwIP

[复制链接]
  • TA的每日心情
    奋斗
    2023-7-6 08:48
  • 签到天数: 169 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-7-6 08:49:45 | 显示全部楼层 |阅读模式
    分享到:
    网络芯片采用的是LAN8742A,网口采用的是HR961160C。

    对应于STM32F上的引脚为:

    通过函数MPU_Config();配置MPU;
    static void MPU_Config(void){  MPU_Region_InitTypeDef MPU_InitStruct;    /* Disable the MPU */  HAL_MPU_Disable();  /* Configure the MPU attributes as WT for SRAM */  MPU_InitStruct.Enable = MPU_REGION_ENABLE;  MPU_InitStruct.BaseAddress = 0x20010000;  MPU_InitStruct.Size = MPU_REGION_SIZE_256KB;  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;  MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;  MPU_InitStruct.Number = MPU_REGION_NUMBER0;  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;  MPU_InitStruct.SubRegionDisable = 0x00;  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;  HAL_MPU_ConfigRegion(&MPU_InitStruct);  /* Enable the MPU */  HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);}通过函数CPU_CACHE_Enable();使能CPU的缓存。
    HAL初始化 与系统时钟配置。
    HAL_Init();SystemClock_Config();这里使用了FreeRTOS,所以这里在main中只新建了一个任务为StartThread,然后就开始了任务调度。这样是没有初始化网络等外设的。那么就看一下StartThread任务。
    可以看到LCD、LED等等外设的初始化都在BSP_Config函数中。
    tcpip的配置使用到的函数有tcpip_init、Netif_Config()、http_server_netconn_init()。
    static void StartThread(void const * argument){   /* Initialize LCD and LEDs */  BSP_Config();    /* Create tcp_ip stack thread */  tcpip_init(NULL, NULL);    /* Initialize the LwIP stack */  Netif_Config();    /* Initialize webserver demo */  http_server_netconn_init();    /* Notify user about the network interface config */  User_notification(&gnetif);  #ifdef USE_DHCP  /* Start DHCPClient */#if defined(__GNUC__)  osThreadDef(DHCP, DHCP_thread, osPriorityBelowNormal, 0, configMINIMAL_STACK_SIZE * 5);#else  osThreadDef(DHCP, DHCP_thread, osPriorityBelowNormal, 0, configMINIMAL_STACK_SIZE * 2);#endif    osThreadCreate (osThread(DHCP), &gnetif);#endif  for( ;; )  {    /* Delete the Init Thread */     osThreadTerminate(NULL);  }}在这里又新建了一个任务为:DHCP_thread,通过DHCP服务,会给开发板分配一个IP地址。这时,LCD上会显示相应的信息。
    同时删除了之前的初始化任务。也就是StartThread任务。
    osThreadTerminate(NULL);网线连接。

    显示器显示:

    可以看到分配到的IP地址了。
    ping一下。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-20 16:01 , Processed in 0.134239 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.