STM32 ENC28J60 Ethernet DHCP Problemi

brsaslan

Üye
Katılım
3 May 2022
Mesajlar
11
Puanları
1
Yaş
24
Öncelikle herkese iyi günler dilerim,
Projemde kullanmak istediğim ethernet modülünü DHCP ile modemden ip aldıramıyorum. Kullandığım kütüphane:

https://github.com/xaionaro/stm32-enc28j60

Bu kütüphaneyi kullanan birçok örnek proje var fakat DHCP örneği bulamadım.

(Ethernet modülünü Arduino uno ile bağlayıp ethercard kütüphanesiyle çalıştırdığımda sorunsuz ip alıyor.)

https://github.com/xaionaro/stm32-enc28j60 kütüphanesini tam olarak anlayamıyorum sanırım yazdığım kodu aşağıda vereceğim. DHCPDISCOVER mesajını gönderebiliyorum(WIRESHARK), modem cevap veriyor fakat sonrasında o verdiği cevabı alamıyorum doğal olarakta diğer adımlara geçemiyorum.

/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "EtherShield.h"
#include "string.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define BUFFER_SIZE 550
#define DHCP_client 1
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi2;

UART_HandleTypeDef huart2;

/* USER CODE BEGIN PV */
static uint16_t plen;
static uint8_t buf[BUFFER_SIZE + 1];
static uint8_t mymac[6] = { 0x54, 0x55, 0x58, 0x10, 0x09, 0x25 };
static uint8_t myip[4] = { 0, 0, 0, 0 };
static uint8_t mynetmask[4] = { 0, 0, 0, 0 };
static uint8_t gwip[4] = { 192, 168, 2, 1 };
static uint8_t dnsip[4] = { 0, 0, 0, 0 };
static uint8_t dhcpsvrip[4] = { 0, 0, 0, 0 };
static uint16_t port = 80;
/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_SPI2_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
* @Brief The application entry point.
* @retval int
*/
int main(void) {
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* USER CODE BEGIN SysInit */
uint8_t sta;
/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_SPI2_Init();
/* USER CODE BEGIN 2 */
ES_enc28j60SpiInit(&hspi2);
ES_enc28j60Init(mymac);
ES_init_ip_arp_udp_tcp(mymac,myip,port);
ES_dhcp_start(buf, mymac, myip, mynetmask, gwip, dhcpsvrip, dnsip);
while (!ES_check_for_dhcp_answer(buf, plen)) {
}
sta=ES_dhcp_state();
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1) {
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

/*HAL_UART_Transmit(&huart2, "TEST ", 6, 100);
HAL_Delay(500);*/
}
/* USER CODE END 3 */
}

ES_dhcp_start fonksiyonu ile DHCPDISCOVER mesajını gönderiyorum sonrasında bir cevap beklemem gerekiyor(DHCPOFFER).
Modem gönderiyor fakat

while (!ES_check_for_dhcp_answer(buf, plen))

komutu ile mesajı almam gerekiyor fakat almıyor while içerisinde takılıyor. Kütüphanede örnek DHCP kodu bulunmuyor. Siz değerli forum üyelerinden bu kütüphaneyi kullanan merak eden olursa yardımlarını bekliyorum.
Teşekkürler....

Kullandığım kart : Nucleo-F103RB
Kullandığım ethernet modülü:
https://market.samm.com/enc28j60-ethernet-lan-modulu-moduller-samm-1510-60-B.png
 

Ekli dosyalar

  • Ekran Görüntüsü (5).png
    Ekran Görüntüsü (5).png
    150.9 KB · Görüntüleme: 4
Konu Sah
brsaslan

brsaslan

Üye
Katılım
3 May 2022
Mesajlar
11
Puanları
1
Yaş
24
Konuyu 3 Ay sonra hortlatmak gibi olacak foruma girememiştim bir süre
ENC28J60 yerine W5500 kullandım hayat çok daha güzel oldu. ENC28J60 ta bir pinge cevap vermek için bile kod yazmak zorunda kalıyordum fakat W5500 donanımsal olarak ihtiyaç duyulacak birçok şeyi destekliyor. Üreticinin yayınladığı IO kütüphaneside büyük kolaylık sağlıyor. Kullanacak olanlara tavsiye edilir.
 

Forum istatistikleri

Konular
121,776
Mesajlar
858,535
Kullanıcılar
437,801
Son üye
Heymoçli

Yeni konular

Üst