基於STM32 W5500 的DNS移植

2021-08-15 07:55:18 字數 1741 閱讀 5957

dns: domain name system,網域名稱系統。簡單理解,我們平時在瀏覽器上輸入的都是網域名稱,如www.baidu.com,這種網域名稱便於人們的記憶和溝通。你可以很輕鬆的記住10個網域名稱,但要你記住10個純數字的ip位址,那就比較費勁了,但電腦通訊的時候是通過ip來通訊的。那麼dns就可以解決這個問題,把網域名稱轉化為ip位址。具體dns的詳細內容可參考該文章:

#define  max_domain_name   16       // for example "www.google.com"

#define ipport_domain 53 ///< dns server port number

#define socket_dns         2//定義乙個socket口,w5500有8個,0-7都行

wiz_netinfo gwiznetinfo = ,

.ip = ,

.sn = ,

.gw = ,

.dns = ,

.dhcp = netinfo_dhcp};

uint8_t dns_2nd[4]=;//定義乙個備用的dns

uint8_t domain_name="www.baidu.com";//網域名稱

uint8_t domain_ip[4]=;//存放dns返回的網域名稱對應的ip位址

void dns_test(void)

else

if ((ret != -1) && ((ret = dns_run(dns_2nd, domain_name, domain_ip))>0)) // retry to 2nd dns

else

if(ret == -1)

else

if(ret > 0)

}

dns返回值有三個:-1、0和1,如下:

/*

* @brief dns process

* @details send dns query and receive dns response

* @param dns_ip : dns server ip

* @param name : domain name to be queryed

* @param ip_from_dns : ip address from dns server

* @return -1 : failed. @ref max_domin_name is too small \n //返回-1,輸入的網域名稱太長,定義的網域名稱最大值太小

* 0 : failed (timeout or parse error)\n//返回-1,超時了

* 1 : success//成功

* @note this funtion blocks until success or fail. max time = @ref max_dns_retry * @ref dns_wait_time

*/int8_t dns_run(uint8_t * dns_ip, uint8_t * name, uint8_t * ip_from_dns);

呼叫dns_test()函式,進行dns測試,向2個dns查詢www.baidu.com的ip位址。

void w5500_chipinit(void)

STM32 W5500 MQTT使用記錄

第一次嘗試寫部落格,不為別的,為了積累一些知識和記錄下使用的遇到的問題。1.實現mqtt協議,要基於tcpip協議,則首先要能正確的使用w5500 並配置成客戶端,可以正常的鏈結伺服器並傳輸資料,關於w5500的使用,還在學習中,現在除錯是基於原來的工程,所以省了很多時間除錯。只是學習的如何寫客戶端...

基於STM32的串列埠通訊

序列通訊一般是以幀格式傳輸資料,即一幀一幀的傳輸,每一幀都含有起始訊號,資料資訊以及停止資訊等。資料各個位同時傳輸,速度快,但是占用引腳資源多。eg led1602 資料按位順序傳輸,占用引腳資源少,但是速度相對較慢。一位一位傳輸 bit iic spi 串列埠通訊 單工,半雙工,全雙工 同步通訊 ...

基於STM32的恆流源設計

本設計以stm32f103rct6為主控晶元,利用mos管的恆流區特點,設計恆流源。設計電流範圍為1 300ma。基本原理圖 q2為n溝道mos管,在正常工作情況下,運放與mos管之間構成深度負反饋,使得輸入控制電壓與vr虛短,近似相等。這可以得到負載電流 3.1.電源 電路圖如圖所示 電源由 12...