Полная версия этой страницы:
STM32F107 настройка Ethernet
Alt.F4
Dec 26 2014, 11:53
Добрый день.
Подскажите, пожалуйста, есть ли где-нибудь рабочие примеры настройки Ethernet и приема/передачи пакетов для STM32F107 с помощью стандартной библиотеки?
Спасибо.
firew0rker
Dec 26 2014, 15:30
На странице
LwIP TCP/IP stack demonstration for STM32F107xx (AN3102) большой пример с TCP/IP стеком, TFTP и веб сервером на STM32F107.
Приёмопередача пакетов - в файле stm32_eth.c
Alt.F4
Dec 26 2014, 21:06
Нашел несколько вариантов настройки 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, но в работе надо будет вызывать еще доп.функции (какие?).
Спасибо.
Alt.F4
Dec 27 2014, 14:39
Еще возник вопрос на счет фильтрации по 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?
Описание к библиотеке совсем скудное...
firew0rker
Dec 28 2014, 16:28
Вся настройка не может быть сделана парой функций: Ethernet у STM32 - сложная периферия.
У меня китайский контроллер на STM32F107. Софт с исходниками - из примеров от ST, творчески переработанных китайцами и откомментированный на китайском, которого я не знаю. Так даже интереснее разбираться. Хорошо помогают Source Browser и генерируемый линкером Static Call Graph.
Cначала заполняется структура ETH_InitStructure и вызывается функция ETH_Init(Ð_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, описанному в том же документе.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.