Четвер, 25.04.2024, 14:28
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

ENC28J60 + STM32F4 + uIP

       

Захотілось мені якось,  подружити плату STM32F4_Discovery із модулем ENC28J60.Сама F4 Discovery була використана здебільше для того,що до неї є тисячу і один приклад.

Насправді моя задача була в тому ,що потрібно було "поюзати" SPI в STM32, та заодне згадати, що до чого (оскільки останній час "висів" на AVR-ах,a тут намітився проектик на STM).

Хоча в мережі і багато прикладів для F4 Discovery + ENC28j60,та мені прийшлось збирати проект самому. В якості компілятора я використовував Keil 5 .За основу взятий цикл статей Lifelover'a ,та ось цей матеріал -  http://we.easyelectronics.ru/electro-and-pc/stm32-uip-enc28j60.html.

Взагалі наведені тут приклади,взяті із сторінки розробника uIP Adama Dunkelsa на github.com .

Частина 1.Пінгуємо.В проекті використовується FreeRTOS - операційна система реального часу. Я взяв готову заготовку проекта FreeRTOS із сайта https://github.com/. Далі "прикрутив" до проекта uIP.

 Примінюємо SPI2. З нього і розпочнем.

// Ініціалізація :

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE);
    
    // включение SPI-тактирования
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); 

     GPIO_InitTypeDef GPIO_InitStruct;
  /* configure pins used by SPI1
     * PB13 = SCK
     * PB14 = MISO
     * PB15 = MOSI
     */
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14|GPIO_Pin_15;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; 
  GPIO_Init(GPIOB, &GPIO_InitStruct);

  // connect SPI1 pins to SPI alternate function
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource13 , GPIO_AF_SPI2);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15 , GPIO_AF_SPI2);
    
        // SS
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOB, &GPIO_InitStruct);
    

    SPI_InitTypeDef SPI_InitStruct;

    SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
    SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
    SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitStruct.SPI_CRCPolynomial = 7;
    SPI_Init(SPI2, &SPI_InitStruct);


    SPI_Cmd(SPI2, ENABLE);

Пін RESET на Discovery не використовується, хоча в матеріалі з we.easyelectronics.ru. використовується. Із модуля ENC28J60 цей пін підключений через резистор 2,4 кОм на плюс живлення (+3,3 В) самого модуля.Справа в тому ,що я мав нагоду "юзати" модуль enc28j60 із Atmega32 ( kibermaster.net),і підключав саме так.

Доречі сам модуль в мене заживлений від свого блока живлення,оскільки enc28j60 доволі багато споживає(~250 mA). До того ж люди в мережі рекомендують робити саме так,а не заживлювати модуль від Discovery,на якому встановлений заслабкий стабілізатор.

IP- адреса модуля ENC28J69 в мене - 192.168.1.170.

Cам проект "Hello World" для Keil 5 - http://radiomanoff.at.ua/load/f4_enc28j60/1-1-0-30

Програмуємо плату та запускаєм.Вводимо команду ping 192.168.1.170 і в результаті отримуємо:    

Далі вводимо команду telnet 192.168.1.170 1000

Тиснемо ENTER, та вводимо своє ім'я (наприклад user).Ну і отримуємо - Hello user.

// **********************************************************************************************************************************************

Частина 2.Webserver.

Використовуемо папку webserver https://github.com/adamdunkels/uip/tree/master/apps ).В файлі uip-conf.h розкоментуємо #include "webserver.h".Збираємо проект , прошиваєм Discovery.

В браузері набираємо наш IP ,і ось спостерігаємо, таку картину :

Нажимаємо на File statistics:

і т.д...

Адреса компютера, через команду arp -a :

 

 

Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0