Ethernet на базе LwIP стека в SK-STM32F217
Ethernet на базе LwIP стека в SK-STM32F217 от starterkit.ru реализуется несложно. Хотя к отладочному модулю и придается демо проект веб сервера на базе стека uIP, но его однотипность и отсутствие всяких пояснений уменьшает его полезность. Лучший вариант - это оригинальный демо проект от ST к STM3220G-EVAL evaluation board который снабжен всей необходимой документацией. Проект, оригинальный вариант которого можно найти на st.com, построен на базе LwIP стека и содержит все возможные приложения для работы по Ethernet - udp_echo_server, tcp_echo_client, httpserver и др., а также приложения работающие под управлением FreeRTOS.
Но вот незадачка, все проекты выполнены под микросхему физического уровня Etеhernet DP83848C, а в платке от starterkit стоит ks8721bl. Кроме всего прочего все оригинальные проекты Eternet работают на базе MII интерфейса, а в платке применен RMII интерфейс. Но не беда, переделка оказалась несложной. Нужно инициализацию GPIO и MAC сделать так же как и в прилагаемой к платке демке, но только на базе новой библиотеки работы с периферией, которая встроена в оригинальные проекты от ST, и в установках проектов задефайнить режим RMII.
Итак к файлу stm32f2x7_eth_bsp.c всех проектов добавлены функции void ComPortInit(void) - инициализация com порта 1 вместо 3 void; GPIO_Configuration(void) - конфигурация GPIO для работы Ethernet в SK-STM32F217; void RCC_Configuration(void) - конфигурация клоков для работы MAC в режиме RMII. Вызов этих функций включен в оригинальные функции void ETH_BSP_Config(void) и static void ETH_MACDMA_Config(void).
Кроме всего порочего в файле main.h #define MII_MODE сменен на #define RMII_MODE. Ниже пример функций конфигурации GPIO и RCC для работы MAC stm32f217 совместно с ks8721bl в режиме RMII.
void GPIO_Configuration(void)
{
// Enable GPIOA, GPIOB, GPIOC, GPIOG clock
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB |
RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG, ENABLE);
// PG13 -> TD0
// PG14 -> TD1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOG, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH);
GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH);
// PB11 -> TEN
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
// PA8 -> MCO1 50MHz output
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);
// PA7 -> CRS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
// PC4 -> RD0
// PC5 -> RD1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH);
// PC1 -> MDC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH);
// PA2 -> MDIO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH);
// PA1 -> REFC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH);
void RCC_Configuration(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
#ifdef MII_MODE
SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII);
#elif defined RMII_MODE
SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII);
#endif
SYSCFG_CompensationCellCmd(ENABLE);
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_HASH, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx |
RCC_AHB1Periph_ETH_MAC_Rx | RCC_AHB1Periph_CRC, ENABLE);
}
Ну и собственно сам
Электроника :
- Техника электроника (11)
- Полезная электроника (4)
- Электроника для всех (5)
- Техника для дома (6)
- Cхемотехника ПЛИС (11)
- Пректирование PCAD (4)
Программирование :
- Микроконтроллеры (9)
- ПЛИС VHDL Verilog (29)
- C++ Builder (7)
- Visual Studio C++ C# (7)
- Java programming (7)
- Matlab programming (4)
Сайтостроение :
- Сайтостроение HTML (5)
- Сайтостроение PHP (8)
- PHP CMS на файлах (3)
- Web инструменты (9)
- Полезное вебмастеру (11)
- SEO раскрутка сайта (4)
- PHP скрипты (3)
Реклама :
Книги и учебники :
- Шаблоны сайтов (6)
- Книги и учебники (2)
Компьютер и интернет :
Поиск по сайту :
Реклама :
Облако меток :
Бесплатная подписка :
Статистика :
- Популярность (3)
- Посещаемость (3)
- Поисковые запросы (3)