|
SK-STM32F217 и LwIp стек |
|
|
|
Jan 4 2012, 19:06
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Пытаюсь запустить на SK-STM32F217 (http://starterkit.ru/html/index.php?name=shop&op=view&id=62) демо приложение (udp_echo_server) для STM3220G-EVAL http://www.st.com/internet/evalboard/product/250374.jsp. Демка компилится в Keil без проблем и загружается в SK-STM32F217. Но совсем не работает. Очевидно и не будет работать поскольку в платах стоят разные PHY (в SK-STM32F217 - ks8721bl) (в STM3220G-EVAL - DP83848C). Соединение по ногам идентичное. Регистры у них почти одинаковые. Очевидно все дело в том, что "почти". Пробовал ли кто настроить демку (Ethernet) от STM3220G-EVAL под PHY типа ks8721bl? Если у кого есть опыт в Ethernet stm32 подсобите пожалуйста примером UDP сервера (клиента) для stm32F2xx + PHY типа ks8721bl В комплекте с SK-STM32F217 идет демка TCP/IP сервера на uIP стеке. Как заставить демку работать в режиме UDP сервера пока не допираю.
|
|
|
|
|
Jan 5 2012, 07:23
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Rst7 @ Jan 5 2012, 02:15)  Для начала посмотрите в драйвере PHY функцию поиска чипа и замените там ID c DP83848C на ks8721bl (нужные ID найдете в даташитах на PHY). И скорее всего все заработает. Нашел в демке только установку адреса DP83848C Код /* Exported constants --------------------------------------------------------*/ #define DP83848_PHY_ADDRESS 0x01 /* Relative to STM322xG-EVAL Board */ Поиск чипа это наверное в линуксах имеется.
Сообщение отредактировал IgorKossak - Jan 5 2012, 13:29
Причина редактирования: [code]
|
|
|
|
|
Jan 5 2012, 11:14
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Rst7 @ Jan 5 2012, 14:06)  Ищите дальше. Посмотрите, что он при инициализации читает из PHY. В main есть Код /* configure ethernet */ ETH_BSP_Config(); CODE void ETH_BSP_Config(void) { RCC_ClocksTypeDef RCC_Clocks; /* Configure the GPIO ports for ethernet pins */ ETH_GPIO_Config(); /* Configure the Ethernet MAC/DMA */ ETH_MACDMA_Config();
if (EthInitStatus == 0) { LCD_SetTextColor(Red); LCD_DisplayStringLine(Line5, (uint8_t*)" Ethernet Init "); LCD_DisplayStringLine(Line6, (uint8_t*)" failed "); while(1); }
/* Configure the PHY to generate an interrupt on change of link status */ Eth_Link_PHYITConfig(DP83848_PHY_ADDRESS);
/* Configure the EXTI for Ethernet link status. */ Eth_Link_EXTIConfig(); /* Configure Systick clock source as HCLK */ SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
/* SystTick configuration: an interrupt every 10ms */ RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 100); } Ну и сама инициализация GPIO для Ethernet CODE void ETH_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clocks */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOI | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | RCC_AHB1Periph_GPIOF, ENABLE);
/* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Configure MCO (PA8) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); /* MII/RMII Media interface selection --------------------------------------*/ #ifdef MII_MODE /* Mode MII with STM322xG-EVAL */ #ifdef PHY_CLOCK_MCO
/* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */ RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); #endif /* PHY_CLOCK_MCO */
SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII); #elif defined RMII_MODE /* Mode RMII with STM322xG-EVAL */
SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); #endif
/* Ethernet pins configuration ************************************************/ /* ETH_MDIO -------------------------> PA2 ETH_MDC --------------------------> PC1 ETH_PPS_OUT ----------------------> PB5 ETH_MII_CRS ----------------------> PH2 ETH_MII_COL ----------------------> PH3 ETH_MII_RX_ER --------------------> PI10 ETH_MII_RXD2 ---------------------> PH6 ETH_MII_RXD3 ---------------------> PH7 ETH_MII_TX_CLK -------------------> PC3 ETH_MII_TXD2 ---------------------> PC2 ETH_MII_TXD3 ---------------------> PB8 ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1 ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7 ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4 ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5 ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PG11 ETH_MII_TXD0/ETH_RMII_TXD0 -------> PG13 ETH_MII_TXD1/ETH_RMII_TXD1 -------> PG14 */
/* Configure PA1, PA2 and PA7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
/* Configure PB5 and PB8 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_ETH);
/* Configure PC1, PC2, PC3, PC4 and PC5 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); /* Configure PG11, PG14 and PG13 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14; GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH);
/* Configure PH2, PH3, PH6, PH7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_Init(GPIOH, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOH, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOH, GPIO_PinSource3, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOH, GPIO_PinSource6, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOH, GPIO_PinSource7, GPIO_AF_ETH);
/* Configure PI10 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIOI, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOI, GPIO_PinSource10, GPIO_AF_ETH); } Тут я немного недопонимаю в каком все же режиме он инициализируется MII или RMII Платка SK-STM32F217 работает в RMII Как все же исхитриться чтоб проверить правильно ли проинициализирована PHY ks8721bl ? (Например Прочитать из нее что-то и потом передать по Com1)
Сообщение отредактировал IgorKossak - Jan 5 2012, 13:30
Причина редактирования: [code]
|
|
|
|
|
Jan 5 2012, 13:12
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Кое что раскопал. Вот правильная инициализация (надо еще перепроверить) GPIO для Ethernet SK-STM32F217 в режиме RMII CODE void ETH_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOs clocks */ // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | // RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOI | // RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOH | // RCC_AHB1Periph_GPIOF, ENABLE);
/* Enable GPIOs clocks */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOG | RCC_AHB1Periph_GPIOF, ENABLE);
/* Enable SYSCFG clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
/* Configure MCO (PA8) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); /* MII/RMII Media interface selection --------------------------------------*/ #ifdef MII_MODE /* Mode MII with STM322xG-EVAL */ #ifdef PHY_CLOCK_MCO
/* Output HSE clock (25MHz) on MCO pin (PA8) to clock the PHY */ RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1); #endif /* PHY_CLOCK_MCO */
SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_MII); #elif defined RMII_MODE /* Mode RMII with STM322xG-EVAL */
SYSCFG_ETH_MediaInterfaceConfig(SYSCFG_ETH_MediaInterface_RMII); #endif
/* Ethernet pins configuration ************************************************/ /* ETH_MDIO -------------------------> PA2 ETH_MDC --------------------------> PC1 ETH_PPS_OUT ----------------------> PB5 ETH_MII_CRS ----------------------> PH2 ETH_MII_COL ----------------------> PH3 ETH_MII_RX_ER --------------------> PI10 ETH_MII_RXD2 ---------------------> PH6 ETH_MII_RXD3 ---------------------> PH7 ETH_MII_TX_CLK -------------------> PC3 ETH_MII_TXD2 ---------------------> PC2 ETH_MII_TXD3 ---------------------> PB8 ETH_MII_RX_CLK/ETH_RMII_REF_CLK---> PA1 -- ETH_MII_RX_DV/ETH_RMII_CRS_DV ----> PA7 -- ETH_MII_RXD0/ETH_RMII_RXD0 -------> PC4 -- ETH_MII_RXD1/ETH_RMII_RXD1 -------> PC5 -- ETH_MII_TX_EN/ETH_RMII_TX_EN -----> PG11 нужно PB11 ETH_MII_TXD0/ETH_RMII_TXD0 -------> PG13 -- ETH_MII_TXD1/ETH_RMII_TXD1 -------> PG14 */
/* Configure PA1, PA2 and PA7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_ETH);
/* Configure PB5 and PB8 */ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8; // GPIO_Init(GPIOB, &GPIO_InitStructure); // GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_ETH); // GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_ETH);
/* Configure PB11 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_ETH);
/* Configure PC1, PC2, PC3, PC4 and PC5 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOC, GPIO_PinSource1, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource2, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource3, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource4, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOC, GPIO_PinSource5, GPIO_AF_ETH); /* Configure PG11, PG14 and PG13 */ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; GPIO_Init(GPIOG, &GPIO_InitStructure); // GPIO_PinAFConfig(GPIOG, GPIO_PinSource11, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource13, GPIO_AF_ETH); GPIO_PinAFConfig(GPIOG, GPIO_PinSource14, GPIO_AF_ETH);
/* Configure PH2, PH3, PH6, PH7 */ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_6 | GPIO_Pin_7; // GPIO_Init(GPIOH, &GPIO_InitStructure); // GPIO_PinAFConfig(GPIOH, GPIO_PinSource2, GPIO_AF_ETH); // GPIO_PinAFConfig(GPIOH, GPIO_PinSource3, GPIO_AF_ETH); // GPIO_PinAFConfig(GPIOH, GPIO_PinSource6, GPIO_AF_ETH); // GPIO_PinAFConfig(GPIOH, GPIO_PinSource7, GPIO_AF_ETH);
/* Configure PI10 */ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // GPIO_Init(GPIOI, &GPIO_InitStructure); // GPIO_PinAFConfig(GPIOI, GPIO_PinSource10, GPIO_AF_ETH); } Попробовал идти дальше. Все застревает на функции Код /* Configure the Ethernet MAC/DMA */ ETH_MACDMA_Config(); Вот сама функция CODE static void ETH_MACDMA_Config(void) { ETH_InitTypeDef ETH_InitStructure;
/* Enable ETHERNET clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_ETH_MAC | RCC_AHB1Periph_ETH_MAC_Tx | RCC_AHB1Periph_ETH_MAC_Rx, ENABLE); /* Reset ETHERNET on AHB Bus */ ETH_DeInit();
/* Software reset */ ETH_SoftwareReset();
/* Wait for software reset */ while (ETH_GetSoftwareResetStatus() == SET);
/* ETHERNET Configuration --------------------------------------------------*/ /* Call ETH_StructInit if you don't like to configure all ETH_InitStructure parameter */ ETH_StructInit(Ð_InitStructure);
/* Fill ETH_InitStructure parametrs */ /*------------------------ MAC -----------------------------------*/ ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Enable; //ETH_InitStructure.ETH_AutoNegotiation = ETH_AutoNegotiation_Disable; // ETH_InitStructure.ETH_Speed = ETH_Speed_10M; // ETH_InitStructure.ETH_Mode = ETH_Mode_FullDuplex;
ETH_InitStructure.ETH_LoopbackMode = ETH_LoopbackMode_Disable; ETH_InitStructure.ETH_RetryTransmission = ETH_RetryTransmission_Disable; ETH_InitStructure.ETH_AutomaticPadCRCStrip = ETH_AutomaticPadCRCStrip_Disable; ETH_InitStructure.ETH_ReceiveAll = ETH_ReceiveAll_Disable; ETH_InitStructure.ETH_BroadcastFramesReception = ETH_BroadcastFramesReception_Enable; ETH_InitStructure.ETH_PromiscuousMode = ETH_PromiscuousMode_Disable; ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect; ETH_InitStructure.ETH_UnicastFramesFilter = ETH_UnicastFramesFilter_Perfect; #ifdef CHECKSUM_BY_HARDWARE ETH_InitStructure.ETH_ChecksumOffload = ETH_ChecksumOffload_Enable; #endif
/*------------------------ DMA -----------------------------------*/ /* When we use the Checksum offload feature, we need to enable the Store and Forward mode: the store and forward guarantee that a whole frame is stored in the FIFO, so the MAC can insert/verify the checksum, if the checksum is OK the DMA can handle the frame otherwise the frame is dropped */ ETH_InitStructure.ETH_DropTCPIPChecksumErrorFrame = ETH_DropTCPIPChecksumErrorFrame_Enable; ETH_InitStructure.ETH_ReceiveStoreForward = ETH_ReceiveStoreForward_Enable; ETH_InitStructure.ETH_TransmitStoreForward = ETH_TransmitStoreForward_Enable; ETH_InitStructure.ETH_ForwardErrorFrames = ETH_ForwardErrorFrames_Disable; ETH_InitStructure.ETH_ForwardUndersizedGoodFrames = ETH_ForwardUndersizedGoodFrames_Disable; ETH_InitStructure.ETH_SecondFrameOperate = ETH_SecondFrameOperate_Enable; ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable; ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable; ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat; ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat; ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1;
/* Configure Ethernet */ EthInitStatus = ETH_Init(Ð_InitStructure, DP83848_PHY_ADDRESS); }
Сообщение отредактировал IgorKossak - Jan 5 2012, 19:55
Причина редактирования: [codebox]
|
|
|
|
|
Jan 5 2012, 13:40
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Rst7 @ Jan 5 2012, 17:24)  Ну а дальше, что из себя ETH_Init представляет? Раз туда адрес PHY передается, наверное там и колдовство с ним.
И пожалуйста, отредактируйте свои посты, заменив тег CODE на CODEBOX. Отредактировал До этого пока не доходит. Пока заметил, что застревает здесь Код /* Wait for software reset */ while (ETH_GetSoftwareResetStatus() == SET); Код void ETH_SoftwareReset(void) { /* Set the SWR bit: resets all MAC subsystem internal registers and logic */ /* After reset all the registers holds their respective reset values */ ETH->DMABMR |= ETH_DMABMR_SR; } Хотя просто вызов ETH_GetSoftwareResetStatus() зависания не дает.
Сообщение отредактировал IgorKossak - Jan 5 2012, 14:59
Причина редактирования: Бездумное сование [codebox] где попало.
|
|
|
|
|
Jan 5 2012, 14:08
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Rst7 @ Jan 5 2012, 17:50)  Не ту функцию запостили. ETH_SoftwareReset вместо ETH_GetSoftwareResetStatus Да, виноват. Здесь виснет CODE FlagStatus ETH_GetSoftwareResetStatus(void) { FlagStatus bitstatus = RESET; if((ETH->DMABMR & ETH_DMABMR_SR) != (uint32_t)RESET) { bitstatus = SET; } else { bitstatus = RESET; } return bitstatus; } И что тут происходит. Нет нормального сброса? А если пропустить этот ход? Я так понимаю это все пока касается только stm32f217?
|
|
|
|
|
Jan 5 2012, 15:12
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Rst7 @ Jan 5 2012, 18:46)  Похоже, что нет. Проверяйте, правильно ли сконфигурированы порты - скорее всего, сброс не происходит из-за неприхода тактов 50МГц на RMII.
Проверьте, действительно ли у Вас определен RMII_MODE, а не MII_MODE, и определен ли он вообще. Понял. Спасибо. Очень похоже, что так. Я так понимаю из -за этого PHY работать не будет?
|
|
|
|
|
Jan 6 2012, 13:48
|
Знающий
   
Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850

|
Цитата(Rst7 @ Jan 5 2012, 19:16)  Ну пока что у Вас даже MAC-уровень не запустился. Берите интеграл по частям (ЦЭ). Начал все сначала. От обратного. Использую пример web сервера (uIP) от starterkit (жаль, пример запутанный сделан половина на непонятной библиотеке, половина влоб). Как с ним работать, как модифицировать под нужные задачи ни слова ни полслова. На st уже давно новая библиотека. Можно было и демки скорректировать соответствующим образом...Ну да ладно. Пример работает. MAC DMA инициализируется нормально. Пытаюсь оттолкнуться от него. Вот инициализация GPIO для Ethernet SK-STM32F217 CODE RCC->AHB1ENR |= (1<<0) + (1<<1) + (1<<2) + (1<<6); /* Enable GPIOA, GPIOB, GPIOC, GPIOG clock */
/* ETHERNET pins configuration */ /* | | TYPE | num | GPIO port | 1. TD0 | out | 128 | PG13 | 2. TD1 | out | 129 | PG14 | 3. TEN | out | 70 | PB11 | 4. MC_REFC | out | 100 | PA8 | 5. CRS | in | 43 | PA7 | 6. RD0 | in | 44 | PC4 | 7. RD1 | in | 45 | PC5 | 8. MDC | out | 27 | PC1 | 9. MDIO |in/out| 36 | PA2 | 10.REFC | in | 35 | PA1 | */
GPIO_Init(GPIOG,GPIO_Pin_13 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*1. PG13 -> TD0 */ GPIO_Init(GPIOG,GPIO_Pin_14 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*2. PG14 -> TD1 */ GPIO_Init(GPIOB,GPIO_Pin_11 + GPIO_AF + GPIO_Speed_50MHz + GPIO_PP + GPIO_AF11); /*3. PB11 -> TEN */ GPIO_Init(GPIOA,GPIO_Pin_8 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF0 + GPIO_PP); /*4. PA8 -> MCO1 50MHz output */ GPIO_Init(GPIOA,GPIO_Pin_7 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*5. PA7 -> CRS */ GPIO_Init(GPIOC,GPIO_Pin_4 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*6. PC4 -> RD0 */ GPIO_Init(GPIOC,GPIO_Pin_5 + GPIO_AF + GPIO_Speed_100MHz + GPIO_AF11); /*7. PC5 -> RD1 */ GPIO_Init(GPIOC,GPIO_Pin_1 + GPIO_AF + GPIO_Speed_50MHz + GPIO_PP + GPIO_AF11); /*8. PC1 -> MDC */ GPIO_Init(GPIOA,GPIO_Pin_2 + GPIO_AF + GPIO_Speed_50MHz + GPIO_OD + GPIO_AF11); /*9. PA2 -> MDIO*/ GPIO_Init(GPIOA,GPIO_Pin_1 + GPIO_AF + GPIO_Speed_50MHz + GPIO_AF11); /*10.PA1 -> REFC */ Пытаюсь записать все это в том виде который будет работать в демке STM32F2x7_ETH_LwIP_V1.1.0 где стоит новая библиотека и конечно все к ней привязано Например как правильно записать Код GPIO_Init(GPIOG,GPIO_Pin_13 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*1. PG13 -> TD0 */ GPIO_Init(GPIOG,GPIO_Pin_14 + GPIO_AF + GPIO_Speed_100MHz + GPIO_PP + GPIO_AF11); /*2. 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_AF11
Сообщение отредактировал IgorKossak - Jan 6 2012, 18:27
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|