0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32配合W5500網(wǎng)卡連接華為云物聯(lián)網(wǎng)平臺通信

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-05-17 09:26 ? 次閱讀

【1】W5500網(wǎng)卡

W5500是一種基于TCP/IP協(xié)議的網(wǎng)絡(luò)通訊芯片,可以提供網(wǎng)絡(luò)連接功能,相當(dāng)于是一種嵌入式以太網(wǎng)控制器,具有低功耗、高速傳輸、易于集成等特點(diǎn)。W5500芯片能夠支持TCP、UDP、IPv4、ARP、ICMP、IGMP等協(xié)議,使得它變得非常適合用于嵌入式設(shè)備與互聯(lián)網(wǎng)之間的通信需求,例如智能家居、工業(yè)控制、遠(yuǎn)程監(jiān)控等場景。W5500網(wǎng)卡還有一個特點(diǎn)是它支持硬件協(xié)議堆棧,這意味著它可以非??斓貓?zhí)行協(xié)議棧中的操作,從而大大提高了數(shù)據(jù)傳輸?shù)男?。同時,W5500還具有較低的功耗,因此非常適合嵌入式設(shè)備這種資源受限的場景。

W5500芯片通過SPI總線與MCU進(jìn)行通信,MCU需要實(shí)現(xiàn)SPI總線協(xié)議來控制W5500進(jìn)行數(shù)據(jù)交互。

【2】SPI協(xié)議

SPI(Serial Peripheral Interface)協(xié)議是一種串行外設(shè)接口協(xié)議,是一種全雙工、同步的接口技術(shù),通常用于連接微控制器和外設(shè),例如傳感器、存儲器、顯示器等。SPI協(xié)議傳輸效率高,使用簡單,開銷較小,因此被廣泛應(yīng)用于嵌入式系統(tǒng)中。

SPI協(xié)議使用主從模式,主設(shè)備可以控制多個從設(shè)備,從設(shè)備不能主動向主設(shè)備發(fā)送數(shù)據(jù)或信息。SPI協(xié)議具有以下幾個重要的信號線:

  1. SCLK:時鐘線,由主設(shè)備提供,用于同步主從設(shè)備之間的數(shù)據(jù)傳輸。
  2. MOSI(Master Out Slave In):主輸出從輸入線,由主設(shè)備提供,用于向從設(shè)備發(fā)送數(shù)據(jù)。
  3. MISO(Master In Slave Out):主輸入從輸出線,由從設(shè)備提供,用于向主設(shè)備發(fā)送數(shù)據(jù)。
  4. SS(Slave Select):從設(shè)備選擇信號線,由主設(shè)備提供。當(dāng)主設(shè)備需要與某個從設(shè)備通信時,將該線電平拉低,以選擇需要通信的從設(shè)備。

SPI協(xié)議的數(shù)據(jù)傳輸是基于數(shù)據(jù)字節(jié)的傳輸,主設(shè)備每次通過MOSI線發(fā)送一個字節(jié),從設(shè)備通過MISO線接受該字節(jié),并回傳一個字節(jié)。數(shù)據(jù)的傳輸順序可以根據(jù)時鐘線(SCLK)的極性和相位配置為四種不同的模式。SPI協(xié)議支持的模式受閃存、RAM、I/O和模擬/數(shù)字轉(zhuǎn)換器等外設(shè)和類型的限制。

【3】W5500建立TCP協(xié)議通信

以下是STM32通過W5500建立TCP通信,并訪問TCP服務(wù)器,完成數(shù)據(jù)收發(fā)的示例代碼。

代碼中使用了STM32 HAL庫,W5500的IP地址和端口號需要根據(jù)實(shí)際情況進(jìn)行設(shè)置。

#include "main.h"
#include "stdio.h"
#include "stm32f1xx_hal.h"
#include "wizchip_conf.h"
#include "socket.h"
#include "dhcp.h"
?
/* Private variables */
SPI_HandleTypeDef hspi1;
?
/* Private function prototypes */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);
void W5500_Init(void);
uint8_t socket;
uint8_t buf[1024];
?
int main(void)
{
 /* MCU Configuration */
 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_SPI1_Init();
?
 /* W5500 Initialization */
 W5500_Init();
?
 /* Connect to TCP Server */
 uint8_t server_ip[4] = {192, 168, 1, 100};
 uint16_t server_port = 5000;
 uint8_t connected = 0;
?
 while (!connected)
  {
  if (getSn_SR(socket) == SOCK_CLOSED)
   {
   socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (socket == 0xFF)
    {
    /* Error: Failed to create socket */
    }
   else
    {
    /* Configure socket */
    uint8_t dest_ip[4] = {192, 168, 1, 200};
    uint16_t dest_port = 5000;
    uint8_t buf[4];
    IINCHIP_WRITE(Sn_DIPR(socket), dest_ip);
    IINCHIP_WRITE(Sn_DPORT(socket), dest_port);
    IINCHIP_SOCKET_CONTROL(socket, Sn_CR_OPEN);
    HAL_Delay(10);
?
    /* Try to connect to server */
    IINCHIP_SOCKET_CONTROL(socket, Sn_CR_CONNECT);
    HAL_Delay(1000);
    if (getSn_SR(socket) == SOCK_ESTABLISHED)
     {
     connected = 1;
     }
    else
     {
     /* Connection failed */
     IINCHIP_SOCKET_CONTROL(socket, Sn_CR_CLOSE);
     HAL_Delay(10);
     }
    }
   }
  }
?
 /* Send Data to Server */
 uint8_t tx_data[4] = {0x01, 0x02, 0x03, 0x04};
 write(socket, tx_data, sizeof(tx_data));
?
 /* Receive Data from Server */
 int rx_len = 0;
 while (1)
  {
  rx_len = getSn_RX_RSR(socket);
  if (rx_len > 0)
   {
   read(socket, buf, rx_len);
   /* Data received from server, do something */
   }
= SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
HAL_SPI_Init(&hspi1);
}
/* GPIO Initialization */
static void MX_GPIO_Init(void) 
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin : PA4 */
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
/* System Clock Configuration */
void SystemClock_Config(void) 
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
in the RCC_OscInitTypeDef structure. */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 
{
    Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) 
{
    Error_Handler();
}
}

【4】封裝MQTT協(xié)議報文

下面使用MQTT client library for Contiki來連接MQTT服務(wù)器。這個庫適用于不同的平臺,包括STM32。在使用前,需要根據(jù)需求進(jìn)行一些配置,例如: 指定MQTT服務(wù)器的地址和端口號,配置MQTT客戶端ID和主題等。

#include "contiki.h"
#include "contiki-net.h"
#include "mqtt.h"
?
#include "stm32f1xx_hal.h"
#include "wizchip_conf.h"
#include "w5500.h"
?
/* MQTT Configuration */
#define SERVER_IP_ADDR "192.168.1.100"
#define SERVER_PORT 1883
#define MQTT_CLIENT_ID "mqtt_stm32"
#define MQTT_TOPIC "example_topic"
?
/* Network Configuration */
static wiz_NetInfo gWIZNETINFO = { .mac = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06},
                  .ip = {192, 168, 1, 200},
                  .sn = {255, 255, 255, 0},
                  .gw = {192, 168, 1, 1},
                  .dns = {8, 8, 8, 8},
                  .dhcp = NETINFO_STATIC };
?
/* W5500 Buffer */
static uint8_t buf[2048];
?
/* Prototypes */
static void MX_SPI1_Init(void);
static void MX_GPIO_Init(void);
void SystemClock_Config(void);
void Error_Handler(void);
void W5500_Select(void);
void W5500_UnSelect(void);
uint8_t W5500_WriteByte(uint8_t b);
uint8_t W5500_ReadByte(void);
void MQTT_Callback(struct mqtt_connection *m, void *userdata, mqtt_event_t event, mqtt_data_t *data);
?
/* MQTT Connection */
static struct mqtt_connection mqtt_conn;
static struct mqtt_message *msg_ptr = NULL;
static uint8_t mqtt_connected = 0;
?
PROCESS(mqtt_process, "MQTT Process");
?
AUTOSTART_PROCESSES(&mqtt_process);
?
/* MQTT Process */
PROCESS_THREAD(mqtt_process, ev, data)
{
 PROCESS_BEGIN();
?
 /* Initialize W5500 */
 reg_wizchip_cs_cbfunc(W5500_Select, W5500_UnSelect);
 reg_wizchip_spi_cbfunc(W5500_ReadByte, W5500_WriteByte);
 wizchip_init(buf, buf);
?
 /* Configure Network */
 ctlnetwork(CN_SET_NETINFO, (void*)&(gWIZNETINFO));
?
 /* DHCP Initialization */
 uint8_t /* Enable DHCP */ dhcp_client_start();
?
/* Wait for DHCP to finish */
while (gWIZNETINFO.dhcp == NETINFO_DHCP) 
{
    HAL_Delay(1000);
    // wait for DHCP to finish }
    /* Print IP Address */
    printf("IP address: %d.%d.%d.%dn", gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3]);
    /* Configure MQTT Connection */
    memset(&mqtt_conn, 0, sizeof(mqtt_conn));
    mqtt_conn.state = MQTT_INIT;
    mqtt_conn.host = SERVER_IP_ADDR;
    mqtt_conn.port = SERVER_PORT;
    mqtt_conn.client_id = MQTT_CLIENT_ID;
    mqtt_conn.user_data = NULL;
    mqtt_conn.user_name = NULL;
    mqtt_conn.password = NULL;
    mqtt_conn.protocol_version = MQTT_VERSION_3_1_1;
    mqtt_conn.keep_alive = 60;
    /* Connect to MQTT Server */
    mqtt_connect(&mqtt_conn);
    /* Wait for MQTT Connection to Finish */
    while (!mqtt_connected) 
    {
        PROCESS_PAUSE();
    }
    /* Publish Message to MQTT Server */
    static char msg[100] = "Hello from STM32 using MQTT protocol!";
    msg_ptr = mqtt_msg_publish_init(msg, strlen(msg), MQTT_TOPIC, MQTT_QOS_LEVEL_0, MQTT_RETAIN_OFF);
    mqtt_publish(&mqtt_conn, msg_ptr);
    /* Wait for Message to be Sent */
    while (mqtt_conn.out_buffer_sent == 0) 
    {
        PROCESS_PAUSE();
    }
    /* Subscribe to MQTT Topic */
    mqtt_subscribe(&mqtt_conn, MQTT_TOPIC, MQTT_QOS_LEVEL_0);
    /* Loop Forever */
    while (1) 
    {
        PROCESS_PAUSE();
    }
    PROCESS_END();
}
  
?
/* SPI Initialization / static void MX_SPI1_Init(void) { / SPI1 parameter configuration*/
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
HAL_SPI_Init(&hspi1);
}
/* GPIO Initialization */
static void MX_GPIO_Init(void) 
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin : PA4 */
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
/* System Clock Configuration */
void SystemClock_Config(void) 
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters
in the RCC_OscInitTypeDef structure. */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 
{
    Error_Handler();
}
/** Initializes the CPU, AHB and APB buses clocks */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) 
{
    Error_Handler();
}
  
}
?
/* Error Handler */
void Error_Handler(void) 
{
while (1) 
{
    // error } }
    /* W5500 Select */
    void W5500_Select(void) 
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET);
    }
    /* W5500 Unselect */
    void W5500_UnSelect(void) 
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET);
    }
    /* W5500 Write Byte */
    uint8_t W5500_Writebyte(uint8_t b) 
    {
        uint8_t res;
        HAL_SPI_TransmitReceive(&hspi1, &b, &res, 1, HAL_MAX_DELAY);
        return res;
    }
  
/* W5500 Read
byte */ uint8_t W5500_Readbyte(void) 
{
    uint8_t b = 0xff;
    HAL_SPI_TransmitReceive(&hspi1, &b, &b, 1, HAL_MAX_DELAY);
    return b;
}
/* MQTT Callback */
void MQTT_Callback(struct mqtt_connection *m, void *userdata, mqtt_event_t event, mqtt_data_t *data) 
{
    switch (event) 
    {
        case MQTT_EVENT_CONNECTED: printf("MQTT connectedn");
        mqtt_connected = 1;
        break;
        case MQTT_EVENT_DISCONNECTED: printf("MQTT disconnectedn");
        mqtt_connected = 0;
        break;
        case MQTT_EVENT_PUBLISHED: printf("MQTT message publishedn");
        break;
        case MQTT_EVENT_SUBACK: printf("MQTT subscribed to topicn");
        break;
        case MQTT_EVENT_UNSUBACK: printf("MQTT unsubscribed from topicn");
        break;
        case MQTT_EVENT_DATA: printf("MQTT received messagen");
        printf("Topic: %.*sn", data->topic_name_size, data->topic_name);
        printf("Message: %.*sn", data->data_size, (char *)data->data);
        break;
        default: break;
    }
}
  
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44389

    瀏覽量

    629066
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2895

    文章

    43569

    瀏覽量

    367156
  • 網(wǎng)卡
    +關(guān)注

    關(guān)注

    3

    文章

    296

    瀏覽量

    27262
  • STM32
    +關(guān)注

    關(guān)注

    2260

    文章

    10832

    瀏覽量

    352829
  • 華為云
    +關(guān)注

    關(guān)注

    3

    文章

    2365

    瀏覽量

    17121
收藏 人收藏

    評論

    相關(guān)推薦

    WIZnet W5500的特點(diǎn)和應(yīng)用介紹

    `W5500是一款全硬件TCP/IP嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡易的互聯(lián)網(wǎng)連接方案。W5500集成了TCP/IP協(xié)議棧,10
    發(fā)表于 05-05 13:28

    W5500芯片通信問題

    w5500網(wǎng)絡(luò)通信問題:電腦做服務(wù)器,w5500做客戶端,自發(fā)自收,500ms一次,剛開始正常,過一會電腦端收到的數(shù)據(jù)就不對了,如圖:可能是哪兒的問題, 程序里面的接收buff嗎
    發(fā)表于 12-11 21:23

    TM4C1294與W5500通信

    stm32W5500通信移植到TM4C1294中,可以實(shí)現(xiàn)1294ping通W5500.1294的spi本身發(fā)送和接收通過示波器測試過波形,數(shù)據(jù)正確。用1294去讀取
    發(fā)表于 11-28 19:06

    WIZnet W5500系列培訓(xùn)活動之“MQTT協(xié)議講解和實(shí)踐(接入OneNET)”

    設(shè)備連接。在本期培訓(xùn)中,我們將以STM32+W5500為硬件平臺,一步步剖析MQTT的協(xié)議原理及其在OneNET平臺的應(yīng)用案例。趕緊報名吧,讓我們一起領(lǐng)略MQTT和OneNET
    發(fā)表于 01-12 13:19

    聯(lián)網(wǎng)卡平臺是什么?聯(lián)網(wǎng)卡平臺哪個好?

    一定會被公之于眾,受到行業(yè)內(nèi)的譴責(zé)唾棄。  2.聯(lián)網(wǎng)卡平臺的實(shí)力。實(shí)力是聯(lián)網(wǎng)卡平臺提供穩(wěn)定長
    發(fā)表于 01-22 10:37

    W5500+MQTT+DHCP

    各位大神,早上好!想實(shí)現(xiàn)W5500+mqtt協(xié)議實(shí)現(xiàn)和onenet平臺通信W5500連接路由
    發(fā)表于 04-10 08:52

    基于FPGA和W5500的以太網(wǎng)傳輸系統(tǒng)實(shí)現(xiàn)

    以太網(wǎng)控制器W5500芯片主要通過Socket編程進(jìn)行協(xié)議通信,共有8個可供使用,采用SPI傳輸協(xié)議進(jìn)行各個寄存器的參數(shù)配置,最高數(shù)據(jù)傳輸速率可達(dá)80MHz。W5500的內(nèi)部功能框圖,
    發(fā)表于 08-07 10:10

    W5500以太網(wǎng)芯片分享!

    w5500 集成硬件TCPIP協(xié)議棧,內(nèi)置MAC/PHY,開發(fā)容易,使用簡單。適用于,醫(yī)療、安防、工業(yè)、智能家居、智能電表等聯(lián)網(wǎng)領(lǐng)域。特點(diǎn)及優(yōu)勢全硬件TCP/IP協(xié)議棧- 支持TCP、UDP
    發(fā)表于 09-26 19:33

    基于W5500以太網(wǎng)控制器的評估套件

    ETHWIZCLICK,基于W5500以太網(wǎng)控制器的評估套件。 ETH Wiz click帶有W5500,一個48針,10/100 BASE-TX獨(dú)立以太網(wǎng)控制器,帶有硬連線TCP /
    發(fā)表于 08-17 09:39

    stm32+W5500 與 阿里微消息隊(duì)列 MQTT版本

    本帖最后由 北洋水師 于 2021-7-23 11:00 編輯 目的: STM32 + W5500 嵌入式以太網(wǎng)卡訪問 阿里微消息隊(duì)列 MQTT 服務(wù)器、實(shí)現(xiàn)基礎(chǔ)的發(fā)布和訂閱。
    發(fā)表于 07-23 10:55

    硬件SPI外設(shè)與以W5500通信驅(qū)動以太網(wǎng)模塊

    本篇詳細(xì)的記錄了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外設(shè)與以W5500通信,驅(qū)動以太網(wǎng)模塊。1. 準(zhǔn)備工
    發(fā)表于 08-12 07:52

    STM32之如何使用野火w5500網(wǎng)絡(luò)模塊

    STM32之如何使用野火w5500網(wǎng)絡(luò)模塊
    發(fā)表于 10-13 09:06

    基于stm32w5500以太網(wǎng)有哪些應(yīng)用呢

    以太網(wǎng)模型是由哪些應(yīng)用層組成的?基于stm32w5500以太網(wǎng)有哪些應(yīng)用呢?
    發(fā)表于 10-27 06:30

    使用W5500進(jìn)行以太網(wǎng)設(shè)計(jì)

    單片機(jī)型號:STM32L053R8T6現(xiàn)象描述:使用W5500進(jìn)行以太網(wǎng)設(shè)計(jì),用網(wǎng)線直接連接設(shè)備通信正常,使用家用無線路由器(自己用TP-L
    發(fā)表于 01-12 06:32

    W5500以太網(wǎng)控制器的數(shù)據(jù)手冊和使用STM32F40實(shí)現(xiàn)W5500檢測ping通

    W5500 是一款全硬件 TCP/IP 嵌入式以太網(wǎng)控制器,為嵌入式系統(tǒng)提供了更加簡易互聯(lián)網(wǎng)連接的方案。W5500 集成了 TCP/IP 協(xié)
    發(fā)表于 09-09 08:00 ?47次下載
    <b class='flag-5'>W5500</b>以太<b class='flag-5'>網(wǎng)</b>控制器的數(shù)據(jù)手冊和使用<b class='flag-5'>STM32</b>F40實(shí)現(xiàn)<b class='flag-5'>W5500</b>檢測ping通