×

Внимание

Форум находится в режиме только для чтения.

Осваиваем Ethernet в STM32

11 года 8 мес. назад - 11 года 8 мес. назад #3270 от ThE_BuZz
ThE_BuZz ответил в теме Re: Осваиваем Ethernet в STM32

Теперь к делу - не поленился, !!!набрал!!! код из статьи - бесполезно!
Они простые без надстроек типа IP адресации …
Очень хотелось бы увидеть полный вариант.

Можно ли увидеть полный вариант лабораторных работ по данной тематике,
простые, без надстроек типа IP адресации …. Т.е. пригодные для работы внутри локальной сети. (на базе которых, кстати, написана статья) ?
11 года 8 мес. назад #3287 от Денис Ягов
Денис Ягов ответил в теме Re: Осваиваем Ethernet в STM32
В силу "давности дела" публекуем решённые лабораторки.

Требуется подключение 2-х компонент: Светодиод (с последовательным резистором) и Подстроечный резистор. Порты подключения - догадаетесь по коду программы. Во всех лабораторках подключение внешних компонент - одинаковое.

Первые 2 лабораторки (проба пера, без Ethernet) выполняются на одной плате SK-MSTM32F107
www.promelec.ru/catalog/1812/0/0/0/137181/

3-я потребует двух таких плат (соединить через ethernet).
4-я - 2 платы или больше соединённые через HUB (будет применена фильтрация по MAC адресам)

Смысл лабораторок:
1. Управляем портом
2. АЦП + управление портом - крутим ручку потенциометра = меняем яркость светодиода
3. АЦП + управление портом + приём/отправка данных по Ethernet... Крутим ручку потенциометра = меняем яркость светодиода на соседней плате, соединённой по Eth.
4. Крутим ручку потенциометра = меняем яркость на нескольнких (избранных) платах.

PS. Данные лабораторки были испытаны на 20- ти добровольцах, почти у всех заработало.
Если не работает - внимательно сравните описание микросхем Eth PHY вашей и той, что на отладочной плате. Желаю успехов  ;)
11 года 8 мес. назад #3301 от C1oudStrife
C1oudStrife ответил в теме Re: Осваиваем Ethernet в STM32
Прочитал статью и просмотрел лабораторки, очень хорошо и доходчиво написано, даже законспектировал себе.
Пытаюсь проинициализировать Ethernet, намертво встает на
while(ETH_GetSoftwareResetStatus()==SET);
и двигаться дальше никак не хочет.
В чем может быть проблема и куда копать?
Использую другую микросхему PHY(KSZ8031), там подключение пинов прямое и ремап не нужен(естественно отключаю его в программе).
Заранее спасибо за ответ
11 года 8 мес. назад #3302 от Денис Ягов
Денис Ягов ответил в теме Re: Осваиваем Ethernet в STM32

Пытаюсь проинициализировать Ethernet, намертво встает на

while(ETH_GetSoftwareResetStatus()==SET);
и двигаться дальше никак не хочет.


Подключено ли тактирование этой периферии?
до изменения любых регистров Ethernet в STM32 программа должна выполнить эту строку:
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |
                        RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);


Характерным признаком того что периферия не затактирована является нулевая реакция на попытку изменить любой управляющий регистр периферии.

фактически код процедур, на которых виснет:
01783 void ETH_SoftwareReset(void)
01784 {
01785  /* Set the SWR bit: resets all MAC subsystem internal registers and logic */
01786  /* After reset all the registers holds their respective reset values */
01787  ETH->DMABMR |= ETH_DMABMR_SR;
01788 }
01789
01790 /**
01791  * @brief  Checks whether the ETHERNET software reset bit is set or not.
01792  * @param  None
01793  * @retval : The new state of DMA Bus Mode register SR bit (SET or RESET).
01794  */
01795 FlagStatus ETH_GetSoftwareResetStatus(void)
01796 {
01797  FlagStatus bitstatus = RESET;
01798  if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET)
01799  {
01800    bitstatus = SET;
01801  }
01802  else
01803  {
01804    bitstatus = RESET;
01805  }
01806  return bitstatus;
01807 }


Фактически меняется один бит регистра ETH->DMABMR.
Если тактирования нет - он не будет меняться, чего бы вы туда не пытались записать.

какое в вашем контроллере сосотяние регистров ETH->DMABMR и ETH_DMABMR_SR?
Итак. дело в этом?
И ещё вопросик, вы пользуетесь описанием библиоечных функций Ethernet для STM32?
11 года 8 мес. назад - 11 года 8 мес. назад #3303 от C1oudStrife
C1oudStrife ответил в теме Re: Осваиваем Ethernet в STM32

Подключено ли тактирование этой периферии?

Да. Так же как и в лабораторке, в начале программы выполняется функция RCC_Configuration(), где вызывается
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |
                        RCC_AHBPeriph_ETH_MAC_Rx, ENABLE);

Значение ETH->DMABMR до функции ETH_SoftwareReset(); 0x00020101
После функции оно не меняется.
ETH_DMABMR_SR определено как
#define ETH_DMABMR_SR        ((uint32_t)0x00000001)  /* Software reset */
а в ETH->DMABMR младший бит и так равен единице.

И ещё вопросик, вы пользуетесь описанием библиоечных функций Ethernet для STM32?

Да, такое же, как используется в лабараторной.

11 года 8 мес. назад #3304 от Денис Ягов
Денис Ягов ответил в теме Re: Осваиваем Ethernet в STM32
Идём дальше.

1. Вы программу тестируете эмулятором или внутрисхемно?
2. Какая частота у внешнего кварца?
Время создания страницы: 0.064 секунд
Работает на Kunena форум