This commit is contained in:
2026-04-23 17:20:51 +08:00
parent 4c4cfa76b4
commit c185b3d8b9
77 changed files with 13811 additions and 24616 deletions

View File

@@ -27,13 +27,14 @@ static void bsp_W5500_Init(void);
static void bsp_W5500_Task(void);
static void Write_SOCK_Data_Buffer(bsp_W5500_Class_t *pW5500_Class, u8 *dat_ptr, u16 size);
static void network_monitor_task(void);
void bsp_W5500_Socket_Set(bsp_W5500_Class_t *pW5500_Class);
bsp_W5500_t W5500 =
{
.Gateway_IP = {192,168,100,1}, /*<2A><><EFBFBD><EFBFBD>IP<49><50>ַ*/
.Sub_Mask = {255,255,255,0}, /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
.Phy_Addr = {0x0c,0x29,0xab,0x7c,0x00,0x01}, /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(MAC)*/
.IP_Addr = {192,168,100,101}, /*<2A><><EFBFBD><EFBFBD>IP<49><50>ַ*/
.IP_Addr = {192,168,100,201}, /*<2A><><EFBFBD><EFBFBD>IP<49><50>ַ*/
.Interrupt_Process = bsp_W5500_Interrupt_Process,
@@ -462,7 +463,9 @@ void W5500_Hardware_Reset(void)
*******************************************************************************/
void W5500_Init(void)
{
#define STM32F4_UID_BASE 0x1FFF7A10 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬϵ<C6AC><CFB5><EFBFBD>޸Ĵ˵<C4B4>ַ
u16 i = 0;
u32 uid[3] = {0};
Write_W5500_1Byte(MR, RST); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λW5500,<2C><>1<EFBFBD><31>Ч,<2C><>λ<EFBFBD><CEBB><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>0
@@ -479,6 +482,23 @@ void W5500_Init(void)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ,PHY_ADDRΪ6<CEAA>ֽ<EFBFBD>u8<75><38><EFBFBD><EFBFBD>,<2C>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ψһ<CEA8><D2BB>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵַ
// <20>õ<EFBFBD>ֵַ<D6B7><D6B5>Ҫ<EFBFBD><D2AA>IEEE<45><45><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>OUI<55>Ĺ涨<C4B9><E6B6A8>ǰ3<C7B0><33><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>̴<EFBFBD><CCB4><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڱ<D6BD><DAB1><EFBFBD>Ϊż<CEAA><C5BC>
//ʹ<>õ<EFBFBD>Ƭ<EFBFBD><C6AC>UID
uid[0] = *(u32*)(STM32F4_UID_BASE);
uid[1] = *(u32*)(STM32F4_UID_BASE + 4);
uid[2] = *(u32*)(STM32F4_UID_BASE + 8);
pW5500->Phy_Addr[0] = uid[1] >> 8;
pW5500->Phy_Addr[1] = uid[1];
pW5500->Phy_Addr[2] = uid[2] >> 24;
pW5500->Phy_Addr[3] = uid[2] >> 16;
pW5500->Phy_Addr[4] = uid[2] >> 8;
pW5500->Phy_Addr[5] = uid[2];
// <20><><EFBFBD>ñ<EFBFBD><C3B1>ع<EFBFBD><D8B9><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
pW5500->Phy_Addr[0] = (pW5500->Phy_Addr[0] & 0xFE) | 0x02;
Write_W5500_nByte(SHAR, pW5500->Phy_Addr, 6);
// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>IP<49><50>ַ,IP_ADDRΪ4<CEAA>ֽ<EFBFBD>u8<75><38><EFBFBD><EFBFBD>,<2C>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>
@@ -694,10 +714,25 @@ IntDispose:
{
pW5500->W5500_Class[i].TR_Data_State |= BSP_W5500_PORT_DATA_RECEIVE; // <20>˿ڽ<CBBF><DABD>յ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
}
if (Socket_Flag & IR_TIMEOUT) // Socket<65><74><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>䳬ʱ<E4B3AC><CAB1><EFBFBD><EFBFBD>
{
Write_W5500_SOCK_1Byte(pW5500->W5500_Class[i].SocketPort, Sn_CR, CLOSE); // <20>رն˿<D5B6>,<2C>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pW5500->W5500_Class[i].TR_Data_State = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬0x00,<2C>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
if (Socket_Flag & IR_TIMEOUT) {
// 1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>жϱ<D0B6>־λ (<28><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
Write_W5500_SOCK_1Byte(pW5500->W5500_Class[i].SocketPort, Sn_IR, Socket_Flag);
// 2. ǿ<>ƹر<C6B9>Socket<65><74>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>λ
Write_W5500_SOCK_1Byte(pW5500->W5500_Class[i].SocketPort, Sn_CR, CLOSE);
// 3. (ǿ<><C7BF><EFBFBD>Ƽ<EFBFBD>) <20><><EFBFBD><EFBFBD>һС<D2BB><D0A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ȴ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>ɹرղ<D8B1><D5B2><EFBFBD>
HAL_Delay(10);
// 4. <20>ؼ<EFBFBD><D8BC>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD>Socket<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
// bsp_W5500_Socket_Init <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Socket<65><74><EFBFBD><EFBFBD>
bsp_W5500_Socket_Init(&pW5500->W5500_Class[i]);
// bsp_W5500_Socket_Set <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>ģʽ<C4A3><CABD>TCP Server<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Socket_Listen
bsp_W5500_Socket_Set(&pW5500->W5500_Class[i]);
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>״̬<D7B4><CCAC>־λ
pW5500->W5500_Class[i].Run_State = 0;
pW5500->W5500_Class[i].TR_Data_State = 0;
}
}
}
@@ -707,6 +742,15 @@ IntDispose:
goto IntDispose;
}
/**
* @brief <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Socket<65><74>Keep-Alive<76><65><EFBFBD><EFBFBD>
* @param s: Socket<65>˿ں<CBBF> (0~7)
* @param interval_5s: <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>λ5<CEBB><EFBFBD><EBA3AC><EFBFBD><EFBFBD>2<EFBFBD><32>ʾ10<31>롣0<EBA1A3><30>ʾ<EFBFBD><CABE><EFBFBD>á<EFBFBD>
*/
void w5500_set_keepalive(SOCKET s, uint8_t interval_5s)
{
Write_W5500_SOCK_1Byte(s, Sn_KPALVTR, interval_5s);
}
void bsp_W5500_Socket_Set(bsp_W5500_Class_t *pW5500_Class)
{
@@ -718,7 +762,10 @@ void bsp_W5500_Socket_Set(bsp_W5500_Class_t *pW5500_Class)
case BSP_W5500_PORT_RUN_MODE_TCP_SERVER:
{
if (Socket_Listen(pW5500_Class->SocketPort) == TRUE)
{
pW5500_Class->Run_State = BSP_W5500_PORT_RUN_STATE_INIT;
w5500_set_keepalive(pW5500_Class->SocketPort, 2);
}
else
pW5500_Class->Run_State = 0;
}break;
@@ -763,6 +810,7 @@ static void bsp_W5500_Init()
static void bsp_W5500_Task(void)
{
u8 i;
for(i=0;i<BSP_W5500_PORT_NUM;i++)
{
bsp_W5500_Socket_Set(&pW5500->W5500_Class[i]); /*W5500<30>˿ڳ<CBBF>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/