用户工具

站点工具


icore4t_44
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
购买链接点击购买
版本 日期 作者 修改内容
V0.1 20201021 FMJ 初次建立




实验四十四:LWIP_DNS实验——域名

一、 实验目的与意义

  1. 了解DNS的作用
  2. 了解LWIP中DNS的使用
  3. 掌握以太网调试工具的使用
  4. 掌握KEILMDK 集成开发环境使用方法

二、 实验设备及平台

  1. iCore4T双核心板、扩展底板;
  2. JLINK(或相同功能)仿真器;
  3. Micro USB线缆;
  4. 以太网通讯线缆
  5. Keil MDK 开发平台;
  6. STM32CubeMX开发平台;
  7. TCP通讯测试工具
  8. Putty串口调试工具
  9. 装有WIN XP(及更高版本)系统的计算机。

三、 实验原理

1、DNS简介

  • 域名系统(Domain Name System,DNS)是Internet上解决网上机器命名的一种系统。Internet上当一台主机要访问另外一台主机时,必须首先获知其地址,TCP/IP中的IP地址是由四段以“.”分开的数字组成,这种方式存在记忆不方便的问题,因此采用域名系统来管理名字和IP的对应关系。
  • 域名可将一个IP地址关联到一组有意义的字符,用户访问一个网站的时候,既可以输入该网站的IP地址,也可以输入其域名。例如:微软公司的Web服务器的IP地址是207.46.230.229,其对应的域名是www.microsoft.com,不管用户在浏览器中输入的是207.46.230.229还是www.microsoft.com,都可以访问其Web网站。DNS极大地方便了人们对网站的访问。
  • 本实验例程采用的LWIP 版本位1.4.1,其中包含了DNS协议,在LWIP—DHCP例程的基础上进行域名的解析。

四、 实验程序

1. 主函数

int main(void)
{
  /* USER CODE BEGIN 1 */
	int cnt;
  /* USER CODE END 1 */
  /*MCU Configuration-----------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
i2c.initialize();
axp152.initialize();
axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER]
axp152.set_dcdc2(1200);//[FPGA INT & PLL D]
axp152.set_aldo1(2500);//[FPGA PLL A]
axp152.set_dcdc4(3300);//[POWER_OUTPUT]
axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable]
axp152.set_aldo2(3300);//[FPGA BK3][Adjustable]
axp152.set_dldo1(3300);//[FPGA BK7][Adjustable]
axp152.set_dldo2(3300);//[FPGA BK5][Adjustable]
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ETH_Init();
MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
usart2.printf("\033[1;32;40m");//设置字体终端为绿色
usart2.printf("\r\nHello, I am iCore4T!\r\n");	//串口信息输出 
//LWIP初始化
while(lwip.initialize())//lwip初始化
{
//ETH初始化失败
	usart2.printf("\r\nETH initialize error!\r\n\r\n");	
}
	NETMPU_Config();
	eth_tcps.initialize();
	usart2.initialize(115200);
 /* USER CODE END 2 */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	if((cnt ++ / 800000) % 2){
		LED_ON;
	}else{
		LED_OFF;
	}
	lwip.periodic_handle();
	key.process();
	//tcp process
	if(eth_tcps.receive_ok_flag == 1){
		eth_tcps.receive_ok_flag = 0;
		eth_tcps.send_data(eth_tcps.tcppcbnew);	
	}
  }
 /* USER CODE END 3 */
}

2.DNS测试函数(在配置LWIP的DNS功能前,需要将lwipopts.h中的LWIP_DNS宏定义,定义为1,否则无法使用DNS功能,针对编译报错的情况,需要在dns.h包含ip_addr.h和err.h))

static void dns_test(const char *hostname)
{
     struct ip_addr cipaddr_DNS;
	//获取域名信息
     dns_gethostbyname(hostname,&cipaddr_DNS,NULL,NULL);
	//将解析到的IP转换为字符串
	char *ptr = ip_ntoa(&cipaddr_DNS);
 
	usart2.printf("解析 %s 网址\r\n",hostname);
	usart2.printf("解析的DNS: %s\r\n",ptr);
}

3.按键处理函数

static void process(void)
{
	//按键处理
	if(key.value != key.bak_value){
		switch(key.value){
			case ARM_KEY:
				lwip.lwip_dhcp_task();//获取DHCP信息
my_dns.dns_test("www.baidu.com");//对百度进行域名解析
				break;
		}
		key.bak_value = key.value;
	}
}

五、 实验步骤

  1. 把仿真器与iCore4T的SWD调试口相连(直接相连或者通过转接器相连);
  2. 采用12V电源为iCore4T及底板供电;
  3. 把iCore4T通过Micro USB线与计算机相连,便于与计算机通讯;
  4. 把iCore4T通过以太网与路由设备连接;
  5. 打开Keil MDK 开发环境,并打开本实验工程,并烧写程序到iCore4T上;
  6. 通过putty打开对应串口,按下ARM按键即可获取DHCP及解析的DNS信息。
  7. 采用同一网络中的电脑,在浏览器中输入解析得到的IP地址,进行网页的访问。

六、 实验现象

  • ARM按键每按下一次,在putty将打印DHCP信息,如图所示。从图中可以看到iCore4T的DNCP信息和解析的http://www.baidu.com的IP地址。

  • 在浏览器上输入iCore4T解析得到的IP地址,可以进入百度的首页。

icore4t_44.txt · 最后更改: 2020/10/21 14:25 由 fmj