V0.005.0
This commit is contained in:
@@ -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>*/
|
||||
|
||||
Reference in New Issue
Block a user