Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: w5100
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Метценгерштейн
связка STM32 + W5100

на пинги стала откликаться. шлю прогой netCat данные по UDP, но ничего не принимаю.
шлю так:

-u 192.168.30.1 3001 (тут enter нажимаю)
dffgdfgdr (любой текст)

так же проделываю это с прогой COM Port Data Emulator
там выбираю client mode, указываю порт, IP, случайные данные.

почему-то просто ничего не считываю в переменную в ф-ии IINCHIP_READ();

Код
uint8_t IINCHIP_READ(uint16_t addr)
{      
uint8_t temp=0;

off (WIZ_SCS);

Delay_ms(1);

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI1,0x0f);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI1);

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI1,((addr & 0xFF00) >> 8));
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI1);

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI1,(addr & 0x00FF));
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI1);

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData (SPI1,0xff);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
temp=SPI_I2S_ReceiveData(SPI1);

Usart1_Send_String( (char *) temp );
Usart1_Send_String("\r\n");

Delay_ms(1);

on (WIZ_SCS);

return temp;      
}


/********************************************************************************
*****************/
/********************************************************************************
*****************/
void WIZnet_main (void)
{
    WIZ_Init();

uint8_t recv_msg[8];
      
      // режим сервера
      socket (1, Sn_MR_UDP, 3001, 0); //for socket: number, protokol, source port, option ???
      listen (1); //socket number      
      
      while (1){
            if (IINCHIP_READ (Sn_SR(1))== SOCK_ESTABLISHED) {  //Sn_SR статус регистр          
              Usart1_Send_String("SOCK_ESTABLISHED \r\n");
              
              recv (1, &recv_msg[0], 8);  //socket, передаю адрес массива- куда читать, и длина данных
              disconnect (1);
              close (1);

            }              
            Usart1_Send_String( (char *)recv_msg );
      }      
  }


lisstret
Код
      while (1){
            if (IINCHIP_READ (Sn_SR(1))== SOCK_ESTABLISHED) {  //Sn_SR статус регистр          
              Usart1_Send_String("SOCK_ESTABLISHED \r\n");
              
              recv (1, &recv_msg[0], 8);  //socket, передаю адрес массива- куда читать, и длина данных
              disconnect (1);
              close (1);

            }              
            Usart1_Send_String( (char *)recv_msg );
      }


Так Вы сначала убедитесь, записались ли у Вас данные в приемный буфер W5100, а потом отключайтесь. По циклу получается после close(); нету socket();

И зачем ESTABLISHED проверять если у Вас UDP? А еще не знаю как в W5100, но в W5300 используется не recv();, а recvfrom(); при UDP обмене.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.