STM32 ENC28J60 Ethernet DHCP Problemi

brsaslan

Üye
Katılım
3 May 2022
Mesajlar
11
Puanları
1
Yaş
27
Ö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: 16
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.
 
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.
Merhabalar ben de yeni başladım elimde stm32f407 var elimde enc28j60 ve wiznet w5500 var ikisini çalıştıramadım yardımcı bir örnek proje atabilir misiniz? w5500 tercihim şimdilik.
mail: [email protected] veya burada paylaşırsanız daha güzel olur.
 

Forum istatistikleri

Konular
129,864
Mesajlar
930,851
Kullanıcılar
452,726
Son üye
ugur Göktürk

Yeni konular

Geri
Üst