- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Осваиваем Ethernet в STM32
Осваиваем Ethernet в STM32
- Автор темы
- Посетитель
9 года 11 мес. назад #5795
от
ответил в теме Re: Осваиваем Ethernet в STM32
Евгений_М пишет: Доброго времени суток ! Долго мучился, набегами правда, но удалось прикрутить демку Webserver_Demo_uIP к плате SK-MSTM32F107 купленой в промэлектронике.
Светодиодами мигаю, потенцер кручу, доволен несказанно. Выкладываю если кому поможет.
А вопрос следующий... Необходимо будущим устройством на этой основе не через Web интерфейс работать а через сокеты. Так понимаю нужно открутить надстройку HTTP/
Измучал я уже этот фаил в проекте (httpd.c). Две демки, написеные на Билдере на разных
компах работают, а с платой работают но криво. Сам коннект TCP стабильный. Шлёшь GET_
конект рвётся. И ещё, а где стринговый дескриптор у TCP ?
- Автор темы
- Посетитель
9 года 11 мес. назад #5796
от
ответил в теме Осваиваем Ethernet в STM32
Выложила все файлы, которые были. Удачных разработокminikh пишет:
Вот бы еще рабочий пример для stm32f107 посмотреть, то я был бы счастлив )))Alena пишет: PDF во вложении
9 года 11 мес. назад - 9 года 11 мес. назад #5798
от Alex888
Alex888 ответил в теме Осваиваем Ethernet в STM32
Здравствуйте. Помогите пожалуйста. Пользуюсь вашими мануалами по Ethernet в STM32 (Спасибо за них), все пошло хорошо, но потом появилась проблема, которую не могу решить. Передача сообщения работает хорошо, а вот прием - только один раз. Принимает один раз и больше не хочет. Хочу сделать самый простой пример, просто принимаю пакет с компа (ping) и записываю его в свой массив.
Работаю на железе STM32F107 + RTL8201 в Keil, отладка с помощью JLink.
Инициализация стандартная. Не думаю что проблема в ней, но все таки приведу в сокращении)
А вот функция RecievePacket(), в которую постоянно заходим. Чтобы узнать есть посылка или нет, проверяем условие. При первом приеме все хорошо и заходим в if, в последующих - не заходим. Я думаю что тут какая-то проблема с дескрипторами или типа того. Хотя массив Rx_Buff заполняется каждый раз при приеме. При первом приеме Rx_Buff [0], при втором приеме Rx_Buff [1] и т.д. Подскажите пожалуйста.
Работаю на железе STM32F107 + RTL8201 в Keil, отладка с помощью JLink.
Инициализация стандартная. Не думаю что проблема в ней, но все таки приведу в сокращении)
ETH_InitTypeDef ETH_InitStructure;
ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB], DMATxDscrTab[ETH_TXBUFNB];
u8 Rx_Buff[ETH_RXBUFNB][ETH_MAX_PACKET_SIZE], Tx_Buff[ETH_TXBUFNB][ETH_MAX_PACKET_SIZE];
int main(void)
{
SysTick_Config(SystemCoreClock/1000);
RCC_Configuration();
NVIC_Configuration();
GPIO_PinRemapConfig(GPIO_Remap_ETH, DISABLE);
GPIO_ETH_MediaInterfaceConfig(GPIO_ETH_MediaInterface_MII);
RCC->CFGR |= RCC_CFGR_MCO_HSE;
GPIO_Configuration();
ETH_DeInit();
ETH_SoftwareReset();
while(ETH_GetSoftwareResetStatus()==SET);
ETH_StructInit(Ð_InitStructure);
/*------------------------ MAC -----------------------------------*/
ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable ;
ETH_InitStructure.ETH_Speed = ETH_Speed_100M;
ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable;
ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable;
ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable;
ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable;
ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Disable;
ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable;
ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;
ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect;
/* Configure ETHERNET */
Value = ETH_Init(Ð_InitStructure, PHY_ADDRESS);
/* Initialize Tx Descriptors list: Chain Mode */
ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB);
/* Initialize Rx Descriptors list: Chain Mode */
ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB);
//Разрешаем прием
DMARxDscrTab -> Status = ETH_DMARxDesc_OWN;
/* Enable MAC and DMA transmission and reception */
ETH_Start();
while(1)
{
RecievePacket();
}
}
А вот функция RecievePacket(), в которую постоянно заходим. Чтобы узнать есть посылка или нет, проверяем условие. При первом приеме все хорошо и заходим в if, в последующих - не заходим. Я думаю что тут какая-то проблема с дескрипторами или типа того. Хотя массив Rx_Buff заполняется каждый раз при приеме. При первом приеме Rx_Buff [0], при втором приеме Rx_Buff [1] и т.д. Подскажите пожалуйста.
void RecievePacket(void)
{
if ((DMARxDscrTab->Status & ETH_DMARxDesc_OWN)==0)
{
//Сначала отключаем прием
ETH_DMAReceptionCmd(DISABLE);
for (i=0; i<43; i++)
{
data[i]=Rx_Buff[0][i];
}
//отдаем дескриптор в руки DMA Ethernet
DMARxDscrTab -> Status = ETH_DMARxDesc_OWN;
ETH_DMAReceptionCmd(ENABLE);
}
Последнее редактирование: 9 года 11 мес. назад пользователем Alex888.
9 года 11 мес. назад - 9 года 11 мес. назад #5800
от Vlad_123
Vlad_123 ответил в теме Осваиваем Ethernet в STM32
Вы можете посмотреть примеры к плате STM32F4DIS-EXT на базе STM32F4, возможно это позволит как то найти решение..., поскольку плата SK-MSTM32F107 поставляется как бюджетное решение, выполненное отечественной фирмой-производителем Starterkit, насколько известно, без каких-либо примеров. Подробнее можно узнать на сайте www.starterkit.ru/html/index.php?name=shop&op=view&id=34. Ссылка на примеры платы STM32F4DIS-EXT, представляемой STMicroelectronics выложена в теме www.ic-contract.ru/forum/8-obsuzhdenie-m...m32f4-discovery.html
Последнее редактирование: 9 года 11 мес. назад пользователем Vlad_123.
9 года 11 мес. назад #5801
от Alex888
Alex888 ответил в теме Осваиваем Ethernet в STM32
Мне не нужны библиотеки uIP и LwIP. В них много лишнего, мне в итоге надо просто посылать сообщения по UDP-протоколу, которые без труда можно написать самому и не забивать память. Мне бы простые примеры, касающиеся только Ethernet самого STM32. А то в этих библиотеках пока поймешь что происходит...
9 года 11 мес. назад #5802
от Vlad_123
Vlad_123 ответил в теме Осваиваем Ethernet в STM32
Посмотрите описание здесь
www.st.com/st-web-ui/static/active/en/re...s_searchtype=keyword
www.st.com/st-web-ui/static/active/en/re...s_searchtype=keyword
Время создания страницы: 0.045 секунд