国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Clion開發(fā)STM32之W5500系列(綜合實驗)

這篇具有很好參考價值的文章主要介紹了Clion開發(fā)STM32之W5500系列(綜合實驗)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

說明

  1. 此為w5500模塊的綜合實驗測試模塊,包含dhcp、dns、ntp
  2. 以上三個模塊的驅動參考之前的文章,本篇不做說明.
  3. 使用的開發(fā)芯片 stm32f103vet6系列,外設接口使用的spi2

實驗內容:

  1. 通過dhcp動態(tài)獲取ip,
  2. 通過dns解析NTP服務域名的ip
  3. 通過NTP服務ip獲取時間

w5500配置驅動

/*******************************************************************************
 *  Copyright (c) [scl]。保留所有權利。
 *     本文僅供個人學習和研究使用,禁止用于商業(yè)用途。
 ******************************************************************************/

#include "app_conf.h"
#include "w5500_config.h"


#if APP_CONFIG_W5500
#define  APP_CONFIG_W5500_DHCP      (1) /*W5500 應用層--DHCP*/
#define  APP_CONFIG_W5500_DNS       (1) /*W5500 應用層--DNS*/
#define  APP_CONFIG_W5500_NTP       (1) /*W5500 應用層--NTP*/

#define DBG_ENABLE
#define DBG_SECTION_NAME "w5500"
#define DBG_LEVEL W5500_DBG_LEVEL

#include "sys_dbg.h"
#include "w5500_dhcp.h"
#include "w5500_dns.h"
#include "w5500_ntp.h"

#define W5500_CS stm_port_define(B,12)
#define W5500_RST stm_port_define(C,7)


static SPI_HandleTypeDef *w5500_spi = NULL;

static void send_and_rec_bytes(uint8_t *in_dat, uint8_t *out_data, uint16_t len) {
    while (HAL_SPI_GetState(w5500_spi) != HAL_SPI_STATE_READY);
    HAL_SPI_TransmitReceive(w5500_spi, in_dat, out_data, len, 1000);
    while (HAL_SPI_GetState(w5500_spi) != HAL_SPI_STATE_READY);
}

static void send_only(uint8_t *in_data, uint16_t len) {
    HAL_SPI_Transmit(w5500_spi, in_data, len, 1000);
}

static void W5500_RST_HIGH(void) { stm_pin_high(W5500_RST); }

static void W5500_RST_LOW(void) { stm_pin_low(W5500_RST); }

static void W5500_CS_LOW(void) { stm_pin_low(W5500_CS); }

static void W5500_CS_HIGH(void) { stm_pin_high(W5500_CS); }

static bool w5500_dhcp_after_init(SOCKET s, uint8_t try_cnt, uint32_t wait_ms);

static bool w5500_dns_after_init(SOCKET s, uint8_t *domain, uint8_t try_cnt, uint32_t wait_ms);

static bool w5500_ntp_after_init(SOCKET s, uint8_t try_cnt, uint32_t wait_ms);

static void W5500_Driver_MspInit(void) {
    stm32_pin_mode(W5500_CS, pin_mode_output);  /*CS*/
    stm32_pin_mode(W5500_RST, pin_mode_output); /*RST*/
    stm_pin_low(W5500_RST);
    stm_pin_low(W5500_CS);
    /*初始化SPI外設*/
    /*W5500 支持 SPI 模式 0 及模式 3..MOSI 和 MISO 信號無論是接收或發(fā)送,均遵從從最高標志位(MSB)到最低標志位(LSB)的傳輸序列。*/
    bsp_SpiHandleInit(w5500_spi, SPI_BAUDRATEPRESCALER_2, spi_mode_3);
}

module_w5500_t w5500_conf = {
        .base_conf={
                .socket_num = 4,
                .rx_size={4, 4, 4, 4},
                .tx_size={4, 4, 4, 4},
        },
        .net_conf={
                .ip={192, 168, 199, 12},
                .gw={192, 168, 199, 1},
                .sub={255, 255, 255, 0},
        },
        .driver={
                .cs_high = W5500_CS_HIGH,
                .cs_low = W5500_CS_LOW,
                .rst_high= W5500_RST_HIGH,
                .rst_low=W5500_RST_LOW,
                .delay = HAL_Delay,
                .send_and_rec_bytes = send_and_rec_bytes,
                .send_only =send_only
        },
        .api = {
                .msp_init=W5500_Driver_MspInit,
        }
};
uint8_t ntp_domain[] = {"ntp.ntsc.ac.cn"}; /*ntp域名*/
static struct dns_conf net_dns_cnf = { /*dns服務配置*/
        .dns_server_ip={114, 114, 114, 114},
        .dns_port = 53,
        .delay_ms_cb = HAL_Delay
};
static struct ntp_conf net_ntp_conf = {
//        .ntp_server={114, 118, 7, 163},
        .ntp_port = 123,
        .delay_ms_cb = HAL_Delay
};


static void w5500_pre_init(void) {
    /*一般做數(shù)據(jù)加載,此時系統(tǒng)時鐘使用的是內部時鐘,如需要使用系統(tǒng)時鐘的外設不在此進行初始化*/
    w5500_spi = conv_spi_handle_ptr(handle_get_by_id(spi2_id));
    /*初始化資源*/
    module_w5500_init(&w5500_conf);
    uint32_t uid0 = HAL_GetUIDw0();
    uint32_t uid1 = HAL_GetUIDw1();
    uint32_t uid2 = HAL_GetUIDw2();
    uint8_t mac[6] = {0, uid0 >> 8, uid1, uid1 >> 8, uid2, uid2 >> 8};
    memcpy(w5500_conf.net_conf.mac, mac, sizeof(mac));
#if APP_CONFIG_W5500_DHCP /*使用dhcp*/
    dhcp_config_registry(&w5500_conf);
    w5500_conf.net_conf_init = dhcp_init;/*使用dhcp init*/
#endif
}

static void w5500_init(void) {

    w5500_conf.api.msp_init();/*初始化*/
    w5500_conf.net_conf_init();

}


static void w5500_after_init(void) {
    uint8_t try_cnt;
    SOCKET sn = 1;/*使用的socket*/
#if APP_CONFIG_W5500_DHCP
    try_cnt = 10;
    if (!w5500_dhcp_after_init(sn, try_cnt, 500)) {
        LOG_D("w5500_dhcp_after_init try cnt over:%d", try_cnt);
        return;
    }
#endif
    uint8_t ip[4];
    w5500_reg_ip_read(ip);
    LOG_D("w5500_reg_ip_read:%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
    w5500_reg_gw_read(ip);
    LOG_D("w5500_reg_gw_read:%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
#if APP_CONFIG_W5500_DNS
    try_cnt = 5;
    dns_config_set(&net_dns_cnf);
    if (!w5500_dns_after_init(sn, ntp_domain, try_cnt, 500)) {
        LOG_D("w5500_dns_after_init try cnt over:%d", try_cnt);
        return;
    }

#endif

#if APP_CONFIG_W5500_NTP
    try_cnt = 5;
    ntp_config_set(&net_ntp_conf);
    if (!w5500_ntp_after_init(sn, try_cnt, 500)) {
        LOG_D("w5500_ntp_after_init try cnt over:%d", try_cnt);
        return;
    }
#endif
}

app_init_export(w5500_net_conf, w5500_pre_init, w5500_init, w5500_after_init);

#if APP_CONFIG_W5500_DHCP

static bool w5500_dhcp_after_init(SOCKET s, uint8_t try_cnt, uint32_t wait_ms) {
    for (uint8_t i = 0; i < try_cnt; ++i) {
        if (do_dhcp(s, wait_ms)) {
            return true;
        }
    }
    return false;
}

#endif
#if APP_CONFIG_W5500_DNS

static bool w5500_dns_after_init(SOCKET s, uint8_t *domain, uint8_t try_cnt, uint32_t wait_ms) {
    for (int i = 0; i < try_cnt; ++i) {
        if (do_dns(s, domain, net_ntp_conf.ntp_server, wait_ms)) {
            LOG_D("dns parse result ip:%d.%d.%d.%d",
                  net_ntp_conf.ntp_server[0], net_ntp_conf.ntp_server[1],
                  net_ntp_conf.ntp_server[2], net_ntp_conf.ntp_server[3]
            );
            return true;
        }
    }
    return false;
}

#endif

#if APP_CONFIG_W5500_NTP

static bool w5500_ntp_after_init(SOCKET s, uint8_t try_cnt, uint32_t wait_ms) {
    struct net_date_time *nt_tm = NULL;
    for (int i = 0; i < try_cnt; ++i) {
        nt_tm = ntp_date_time_get(s, wait_ms);
        if (nt_tm != NULL) {
            LOG_D("NTP TIME:%d-%02d-%02d %02d:%02d:%02d",
                  nt_tm->year, nt_tm->month, nt_tm->day,
                  nt_tm->hour, nt_tm->min, nt_tm->sec
            );
            HAL_TIM_Base_Start_IT(handle_get_by_id(tim6_id));
            return true;
        }
    }
    return false;
}

#endif
#endif





測試結果

Clion開發(fā)STM32之W5500系列(綜合實驗),STM32相關驅動,stm32,嵌入式硬件,單片機文章來源地址http://www.zghlxwxcb.cn/news/detail-603948.html

到了這里,關于Clion開發(fā)STM32之W5500系列(綜合實驗)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Clion開發(fā)STM32之ESP8266系列(四)

    Clion開發(fā)STM32之ESP8266系列(四)

    上一篇: Clion開發(fā)STM32之ESP8266系列(三) 實現(xiàn)esp8266需要實現(xiàn)的函數(shù) 串口3中斷函數(shù)的自定義(這里沒有使用HAL提供的) 封裝esp8266服務端的代碼和測試 核心配置頭文件(添加一些宏定義) sys_core_conf.h文件中 源碼 對應的串口3中斷函數(shù)的編寫 頭文件 源文件 本次設置esp8266模塊的IP為

    2024年02月08日
    瀏覽(52)
  • 【正點原子STM32連載】第六十六章 綜合測試實驗摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

    【正點原子STM32連載】第六十六章 綜合測試實驗摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

    1)實驗平臺:正點原子stm32f103戰(zhàn)艦開發(fā)板V4 2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html# 為了方便大家使用和驗證綜合例程,本章內容是綜合例程的使用介紹。目的是展示STM32F1的強大處理

    2024年02月02日
    瀏覽(21)
  • STM32開發(fā) | Clion搭建STM32開發(fā)環(huán)境

    STM32開發(fā) | Clion搭建STM32開發(fā)環(huán)境

    做嵌入式開發(fā)的人對STM32這個平臺應該都是非常熟悉的,在國內尤其流行,很多產(chǎn)品里面都是基于這個平臺做的方案。多數(shù)人在開發(fā)STM32的時候用的都是 Keil 這個老牌IDE,很大一部分原因是因為大多數(shù)人最初是從51單片機學習過來的,51就是基于Keil去開發(fā)的,然后遷移到STM32的

    2023年04月12日
    瀏覽(25)
  • STM32+Clion多線程開發(fā)

    STM32+Clion多線程開發(fā)

    目錄 創(chuàng)建多線程 freertos.c main.cpp main_app.h 二值信號量 相關API介紹 (1) osSemaphoreCreate (2)osSemaphoreDelete (3)osSemaphoreRelease (4)osSemaphoreWait 實際使用 創(chuàng)建信號量(freertos.c) 在頭文件中外部引用(freertos_inc.h) main.c 關于clion使用printf,參考【教程】手把手教你用Clion進行STM32開

    2024年03月15日
    瀏覽(33)
  • 【使用W5500實現(xiàn)UDP、TCP通信】

    一、W5500介紹 W5500是一個集成的以太網(wǎng)模塊,這個模塊上攜帶TCP/IP協(xié)議,控制器只需要通過SPI協(xié)議讀寫其寄存器便可以以網(wǎng)絡的方式進行數(shù)據(jù)交互。 W5500模塊自帶10個引腳,但由于使用其官方庫,只需使用六個引腳便可以進行數(shù)據(jù)交互,這六個引腳分別為:VCC、GND、MISO、MOSI、

    2023年04月08日
    瀏覽(15)
  • STM32CubeMX聯(lián)合CLion開發(fā)環(huán)境搭建

    STM32CubeMX聯(lián)合CLion開發(fā)環(huán)境搭建

    1.1 STM32CubeMX STM32CubeMX是一種圖形化配置工具,用于為STM32微控制器生成啟動代碼和初始化配置。它可以幫助簡化STM32項目的初始化過程,并提供了一種可視化的方式來配置引腳、時鐘、外設和中斷等。HAL(Hardware Abstraction Layer)庫是STMicroelectronics提供的一種高級API層,用于編寫

    2024年02月11日
    瀏覽(30)
  • Clion開發(fā)STM32之驅動開發(fā)(ST7735S篇)

    ST7735S數(shù)據(jù)手冊 字庫頭文件(module_st7735s_font.h) 頭文件(module_st7735s.h) 源文件(module_st7735s.c) 實現(xiàn)對應的驅動接口 測試單元

    2024年02月07日
    瀏覽(70)
  • 優(yōu)雅的使用CLion開發(fā)STM32 2023最新版本~

    優(yōu)雅的使用CLion開發(fā)STM32 2023最新版本~

    一共需要的資料如下 ?代表需要魔法 沒有標注可直接訪問 Clion 下載鏈接 cubemx 下載鏈接 mingw 下載連接 ? 安裝完直接解壓到文件夾 并且把bin文件的路徑存入path環(huán)境變量 gcc 下載鏈接? 安裝完直接解壓到文件夾 并且把bin文件的路徑存入path環(huán)境變量 openocd 下載鏈接 安裝完直接

    2024年02月16日
    瀏覽(39)
  • cubeMX+CLion開發(fā)STM32,添加DSP庫

    cubeMX+CLion開發(fā)STM32,添加DSP庫

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言 一、使用cubeMX創(chuàng)建工程并添加DSP庫 二、修改Cmake配置 總結 前段時間看了改用CLion做STM32的開發(fā),使用cubeMX添加DSP庫,生成項目后編譯報錯undefined reference to `arm_sin_f32\\\',參考了很多文章都是

    2024年02月13日
    瀏覽(25)
  • 從零開始教你使用Clion優(yōu)雅開發(fā)STM32(三)Clion嵌入式開發(fā)必備插件

    從零開始教你使用Clion優(yōu)雅開發(fā)STM32(三)Clion嵌入式開發(fā)必備插件

    (一)軟件安裝與環(huán)境配置 (二)移植工程文件到其他芯片 (三)Clion嵌入式開發(fā)必備插件 文章目錄 前言 1)Chinese(simplified) 2)CodeGlance Pro 3)File Watchers? 4)Key Promoter X 5)CodeGlance Pro 6)Monokai Pro Theme 7)Rainbow Brackets?Lite 8)Serial Port??Monitor 總結 前段時間,稚暉君用 Cl

    2024年02月06日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包