реклама на сайте
подробности

 
 
> STM32F107 настройка Ethernet
Alt.F4
сообщение Dec 26 2014, 11:53
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Добрый день.

Подскажите, пожалуйста, есть ли где-нибудь рабочие примеры настройки Ethernet и приема/передачи пакетов для STM32F107 с помощью стандартной библиотеки?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
firew0rker
сообщение Dec 26 2014, 15:30
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



На странице LwIP TCP/IP stack demonstration for STM32F107xx (AN3102) большой пример с TCP/IP стеком, TFTP и веб сервером на STM32F107.
Приёмопередача пакетов - в файле stm32_eth.c
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Dec 26 2014, 21:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Нашел несколько вариантов настройки DMA для работы с Ethernet:
1. В примерах ST все делается через заполнение структуры ETH_InitStructure, затем в некоторых еще включают прерывание
ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE);

2. В примерах Промэлектроники вся настройка происходит парой функций
ETH_DMATxDescChainInit(DMATxDscrTab, &Tx_Buff[0][0], ETH_TXBUFNB); // Initialize Tx Descriptors list: Chain Mode
ETH_DMARxDescChainInit(DMARxDscrTab, &Rx_Buff[0][0], ETH_RXBUFNB); // Initialize Rx Descriptors list: Chain Mode
DMARxDscrTab->Status = ETH_DMARxDesc_OWN; // Разрешаем приём


3. Нашел еще один образец, где вместо ETH_DMATxDescChainInit, из предыдущего варианта, используется:
ETH_DMAPTPTxDescChainInit //Initializes the DMA Tx descriptors in chain mode with PTP.

В чем разница получается разница полученных настроек (через структуру ETH_InitStructure и через функции ETH_DMATxDescChainInit)?
"with PTP" - это, я так понял, для синхронизации обмена по Ethernet, но в работе надо будет вызывать еще доп.функции (какие?).
Спасибо.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Dec 27 2014, 14:39
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Еще возник вопрос на счет фильтрации по MAC-адресу.
Как я понял функциями:
ETH_MACAddressConfig(ETH_MAC_Address1, Mac_addr0);
ETH_MACAddressFilterConfig(ETH_MAC_Address1,ETH_MAC_AddressFilter_SA);
ETH_MACAddressPerfectFilterCmd(ETH_MAC_Address1, ENABLE);

устанавливается фильтрация для приема от определенного MAC-адреса, а как настроить фильтрацию по своему MAC'у?
Грубо говоря, чтобы не обрабатывать фреймы, предназначенные для других устройств.
Спасибо.

з.ы. Что конкретно настраивает строка ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Enable?
Описание к библиотеке совсем скудное...
Go to the top of the page
 
+Quote Post
firew0rker
сообщение Dec 28 2014, 16:28
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 206
Регистрация: 11-07-12
Из: Новосибирск
Пользователь №: 72 716



Вся настройка не может быть сделана парой функций: Ethernet у STM32 - сложная периферия.

У меня китайский контроллер на STM32F107. Софт с исходниками - из примеров от ST, творчески переработанных китайцами и откомментированный на китайском, которого я не знаю. Так даже интереснее разбираться. Хорошо помогают Source Browser и генерируемый линкером Static Call Graph.

Cначала заполняется структура ETH_InitStructure и вызывается функция ETH_Init(&ETH_InitStructure, PHY_ADDRESS) инициализирующая MAC, PHY и частично DMA.
затем настраивается DMA: ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R, ENABLE) разрешает прерывания по приёму.
после этого инициализируется библиотека LwIP: вызываются LwIP_Init ⇒ netif_add ⇒ ethernetif_init ⇒ low_level_init ⇒ ETH_DMA*xDescChainInit
Там же вызываeтся ETH_MACAddressConfig
В последнюю очередь запускаются сервисы, такие как HTTPD, FTPD и т.д.

Не использую IEEE 1588 Precision Time Protocol (PTP), т.к. контроллер один, резервирования нет.

В документе "RM0008 Reference manual STM32F10*" 3 страницы посвящены фильтрации MAC адресов. Не знаю где можно найти ещё подробнее. См. Table 213. Source address filtering table.

ETH_ReceiveAll относится к регистру MACFFR, описанному в том же документе.

Сообщение отредактировал firew0rker - Dec 28 2014, 16:30
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016