OpenEdv-¿ªÔ´µç×ÓÍø

 ÕÒ»ØÃÜÂë
 Á¢¼´×¢²á
ÕýµãÔ­×ÓÈ«Ì×STM32/Linux/FPGA¿ª·¢×ÊÁÏ£¬ÉÏǧ½²STM32ÊÓÆµ½Ì³ÌÃâ·ÑÏÂÔØ...
²é¿´: 12401|»Ø¸´: 11

STM32F407+UCOSII+LWIP+Íø¿ÚÈȲå°Îµ÷ÊÔ¹ý³Ì

[¸´ÖÆÁ´½Ó]

3

Ö÷Ìâ

9

Ìû×Ó

0

¾«»ª

³õ¼¶»áÔ±

Rank: 2

»ý·Ö
51
½ðÇ®
51
×¢²áʱ¼ä
2014-7-10
ÔÚÏßʱ¼ä
1 Сʱ
·¢±íÓÚ 2015-7-13 13:30:32 | ÏÔʾȫ²¿Â¥²ã |ÔĶÁģʽ
STM32ºÍlwip³õѧÕߣ¬·ÖÏíÒ»ÏÂÍø¿ÚÈȲå°Î¹¦Äܵ÷ÊÔ¹ý³Ì¡£
PHYоƬʹÓõÄLAN8720£¬Ê¹ÓÃÔ­×Ó¸çµÄlwipÀ©Õ¹Àý³Ì£¬Ô­Àý³Ì³õʼ»¯LAN8720ºóÊÇËÀµÈ¡£Êµ¼ÊÏîÄ¿ÖÐÍø¿Ú³õʼ¿ÉÄܲ»²åÍøÏߣ¬ÖÐ;²å°ÎÍøÏߵȣ¬Òò´Ë¶Ô³ÌÐò½øÐÐÐ޸ġ£

1£©ÏÈÊDzο¼ST¹Ù·½ÒÔÌ«Íø¿â£¬×îаæÒÔÌ«Íø¿âΪ2015Äê5Ô·ݣ¨keil5ÖÐsoftware packsÖÐÏÂÔØ£¬»òµ½keil¹ÙÍøÏÂÔØ½Ï¿ì£©£¬ÔÚ´Ë¿âÖвÉÓÃÁËÍⲿÖжϵķ½Ê½ÅжÏÍø¿Ú²å°Î״̬¡£ÓÉÓÚLAN8720µÄÖжϿںÍCLKOUT¸´Óã¬Òò´ËʹÓÃÖжϣ¬Ö»ÄÜʹÓÃ50MHZ·½°¸¡£µç·°´ÕÕ50MHZ¸ü¸Äºó¡£²ÎÕÕ¹ÙÍøÊµÏÖ˼·£¬Ìí¼Ó³ÌÐòµ½¹¤³ÌÖС£½á¹û·¢ÏÖ²å°ÎÍø¿ÚÄܹ»¼ì²âµ½Öжϣ¬µ«ÊǼì²âµÄ״̬ʼÖÕÊÇlink_down. ¿à¿àѰÕÒÔ­Òò£¬Î´¹û¡£×îÖÕ·ÅÆúÖжϷ½Ê½£¬²ÉÓÃÂÖѯ·½°¸¡£
2£©ÂÖѯ·½°¸µÄ˼·ÊÇ£¬½¨Á¢Ò»¸öµÍÓÅÏȼ¶ÈÎÎñ£¬Ã¿¸ôÒ»¶Îʱ¼ä¼ì²âlink״̬£¬Èç¹û³ÌÐòÔËÐеÚÒ»´Î¼ì²â£¬¼ì²â½á¹ûΪÁ¬½Ó£¬Ôò½«¸ÃÈÎÎñ¹ÒÆð¡£Èç¹ûµÚÒ»´Î¼ì²âΪ¶Ï¿ª£¬Ôò³ÌÐò»á¼ÌÐø¼ì²â£¬Ö±µ½¼ì²âµ½Á¬½Ó£¬Ôò¶ÔMACºÍDMAÖØÐÂ×öÒ»±é³õʼ»¯¡£¾­¹ýµ÷ÊԸ÷½·¨¿ÉÐС£

¸½ÖжϷ½°¸£º£¨µ÷ÊÔδ³É¹¦£¬Ö÷ÒªÔ­ÒòΪÖжÏÖмì²âlink״̬Óëʵ¼Ê²»·û£¬ÁíST¹ÙÍøÀý³Ì¼ì²âµ½Íø¿ÚÖØÐÂÁ¬½ÓºóÖ»½øÐÐÁËMACµÄÖØÐ³õʼ»¯£¬Î´½øÐÐDMA³õʼ»¯£¬¾­¹ýʵÑ飬·¢ÏÖ³õʼ»¯MACºÍDMA²ÅÕý³££¬Ö»³õʼ»¯MAC£¬»á³ö´í£©
[mw_shl_code=c,true]ETH_InitStructure.ETH_AddressAlignedBeats = ETH_AddressAlignedBeats_Enable; //????DMA?????????¡¤???????? ETH_InitStructure.ETH_FixedBurst = ETH_FixedBurst_Enable; //???????¡§??¡¤????? ETH_InitStructure.ETH_RxDMABurstLength = ETH_RxDMABurstLength_32Beat; //DMA¡¤?????¡Á??¨®??¡¤??¡è????32?????? ETH_InitStructure.ETH_TxDMABurstLength = ETH_TxDMABurstLength_32Beat; //DMA??????¡Á??¨®??¡¤??¡è????32?????? ETH_InitStructure.ETH_DMAArbitration = ETH_DMAArbitration_RoundRobin_RxTx_2_1; rval=ETH_Init(&ETH_InitStructure,LAN8720_PHY_ADDRESS); //????ETH //=======2015/07/08 added by sucore ????????¡ã????¨ª???¨°======================== //?¨´??ST??¡¤??????????????????? if( rval == ETH_ERROR ) { printf("ETH init error, may be no link\n"); } EthStatus=rval; if(ETH_ReadPHYRegister(LAN8720_PHY_ADDRESS, PHY_BSR) & 4) { EthStatus |= ETH_LINK_FLAG; } /* Configure the PHY to generate an interrupt on change of link status */ Eth_Link_PHYITConfig(LAN8720_PHY_ADDRESS); /* Configure the EXTI for Ethernet link status. */ Eth_Link_EXTIConfig(); /* Enable the Ethernet Rx Interrupt */ ETH_DMAITConfig(ETH_DMA_IT_NIS | ETH_DMA_IT_R , ENABLE); //============================================================================== [/mw_shl_code]
[mw_shl_code=c,true]//==================2015/07/08 added by sucore ================================ //==================????????¡ã??¨¤?????¨ª????===================================== /** * @brief Configure the PHY to generate an interrupt on change of link status. * @param PHYAddress: external PHY address * @retval None */ uint32_t Eth_Link_PHYITConfig(uint16_t PHYAddress) { uint32_t tmpreg = 0; /* Read MASK register */ tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_MASK); /* Enable output interrupt events to signal via the INT pin */ tmpreg |= (uint32_t)PHY_MASK_LINK_INT_EN | PHY_MASK_ENERGYON_INT_EN; if(!(ETH_WritePHYRegister(PHYAddress, PHY_MASK, tmpreg))) { /* Return ERROR in case of write timeout */ return ETH_ERROR; } /* Read INT register */ tmpreg = ETH_ReadPHYRegister(PHYAddress, PHY_INT); /* Enable Interrupt on change of link status */ tmpreg |= (uint32_t)PHY_INT_LINK_STATUS|PHY_INT_ENERGYON_STATUS; if(!(ETH_WritePHYRegister(PHYAddress, PHY_INT, tmpreg))) { /* Return ERROR in case of write timeout */ return ETH_ERROR; } /* Return SUCCESS */ return ETH_SUCCESS; } //==================2015/07/08 added by sucore ================================ //==================????????¡ã??¨¤?????¨ª????===================================== /** * @brief EXTI configuration for Ethernet link status. * @param PHYAddress: external PHY address * @retval None */ void Eth_Link_EXTIConfig(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; /* Enable the INT (PB14) Clock */ RCC_AHB1PeriphClockCmd(ETH_LINK_GPIO_CLK, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* Configure INT pin as input */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = ETH_LINK_PIN; GPIO_Init(ETH_LINK_GPIO_PORT, &GPIO_InitStructure); /* Connect EXTI Line to INT Pin */ SYSCFG_EXTILineConfig(ETH_LINK_EXTI_PORT_SOURCE, ETH_LINK_EXTI_PIN_SOURCE); /* Configure EXTI line */ EXTI_InitStructure.EXTI_Line = ETH_LINK_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); /* Enable and set the EXTI interrupt to priority 1*/ NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } //==================2015/07/08 added by sucore ================================ //==================????????¡ã??¨¤?????¨ª????===================================== /** * @brief This function handles Ethernet link status. * @param None * @retval None */ void Eth_Link_ITHandler(uint16_t PHYAddress) { u32 temp; //OS_CPU_SR cpu_sr; //OS_ENTER_CRITICAL(); /* Check whether the link interrupt has occurred or not */ if( ((ETH_ReadPHYRegister(PHYAddress, PHY_INT)) & PHY_INT_LINK_STATUS)!= 0) { delay_ms(1); temp=(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & 4); if(temp) { netif_set_link_up(&lwip_netif); } else { netif_set_link_down(&lwip_netif); } } //OS_EXIT_CRITICAL(); } //==================2015/07/08 added by sucore ================================ //==================????????¡ã??¨¤?????¨ª????===================================== /** * @brief This function handles External line 10 interrupt request. * @param None * @retval None */ void EXTI15_10_IRQHandler(void) { if(EXTI_GetITStatus(ETH_LINK_EXTI_LINE) != RESET) { Eth_Link_ITHandler(LAN8720_PHY_ADDRESS); // ETH_Init(&ETH_InitStructure,LAN8720_PHY_ADDRESS); /* Clear interrupt pending bit */ EXTI_ClearITPendingBit(ETH_LINK_EXTI_LINE); } } [/mw_shl_code]

ÂÖѯ·½°¸
[mw_shl_code=c,true]/********************************************************** ?????????? ???????¨ª????¡Á??? 2015/07/11 added by sucore ?????????? ?? ?????????? ¡Á????? 0???? 1???? ???????¡Â?? ?? **********************************************************/ u8 netlink_status_check(void) { // u32 temp=0; static u32 cursta,presta; static u8 cnt; //u8 retval; cursta=(ETH_ReadPHYRegister(LAN8720_PHY_ADDRESS, PHY_BSR) & 4); cnt++; if(cursta!=presta) { if(cnt!=1) { if(cursta) { netif_set_link_up(&lwip_netif); } else { netif_set_link_down(&lwip_netif); } } else {;} cnt=2; } else {cnt=2;} presta=cursta; return cursta; } void netlink_task(void *pdata) { OS_CPU_SR cpu_sr; static u8 sta=0; while(1) { //u32 temp; OSTimeDlyHMSM(0,0,2,500); /* Check whether the link interrupt has occurred or not */ OS_ENTER_CRITICAL(); if(netlink_status_check()) { sta=1; } OS_EXIT_CRITICAL(); if(sta) break; } OSTaskSuspend(OS_PRIO_SELF); OSTimeDlyHMSM(0,0,0,500); } [/mw_shl_code]




ÕýµãÔ­×ÓÂß¼­·ÖÎöÒÇDL16¾¢±¬ÉÏÊÐ
»Ø¸´

ʹÓõÀ¾ß ¾Ù±¨

31

Ö÷Ìâ

130

Ìû×Ó

0

¾«»ª

¸ß¼¶»áÔ±

Rank: 4

»ý·Ö
790
½ðÇ®
790
×¢²áʱ¼ä
2015-6-28
ÔÚÏßʱ¼ä
139 Сʱ
·¢±íÓÚ 2016-5-28 12:42:49 | ÏÔʾȫ²¿Â¥²ã

19

Ö÷Ìâ

84

Ìû×Ó

0

¾«»ª

Öм¶»áÔ±

Rank: 3Rank: 3

»ý·Ö
439
½ðÇ®
439
×¢²áʱ¼ä
2016-6-8
ÔÚÏßʱ¼ä
47 Сʱ
·¢±íÓÚ 2016-6-8 11:09:29 | ÏÔʾȫ²¿Â¥²ã
¸Ðл·ÖÏí£¬¸ÕºÃÔÚ×öÕâ¿é

21

Ö÷Ìâ

299

Ìû×Ó

0

¾«»ª

½ðÅÆ»áÔ±

Rank: 6Rank: 6

»ý·Ö
1858
½ðÇ®
1858
×¢²áʱ¼ä
2013-7-29
ÔÚÏßʱ¼ä
282 Сʱ
·¢±íÓÚ 2016-6-8 17:29:10 | ÏÔʾȫ²¿Â¥²ã
ÄãºÃ£¬ÎÒÒ²¸ÕºÃÔÚ×öÕâ¿é£¬ÎÒÏëÎÊÏ£¬ÄãµÄÖжϷ½Ê½×îºóµ÷ÊÔͨÁËÂð£¿Ð»Ð»ÁË£¡

2

Ö÷Ìâ

10

Ìû×Ó

0

¾«»ª

ÐÂÊÖÉÏ·

»ý·Ö
32
½ðÇ®
32
×¢²áʱ¼ä
2016-5-23
ÔÚÏßʱ¼ä
7 Сʱ
·¢±íÓÚ 2016-6-13 08:46:41 | ÏÔʾȫ²¿Â¥²ã
¶àл£¬ÁôÃû´ýÓÃ

15

Ö÷Ìâ

53

Ìû×Ó

0

¾«»ª

³õ¼¶»áÔ±

Rank: 2

»ý·Ö
162
½ðÇ®
162
×¢²áʱ¼ä
2015-11-16
ÔÚÏßʱ¼ä
31 Сʱ
·¢±íÓÚ 2016-6-13 09:46:10 | ÏÔʾȫ²¿Â¥²ã
ÇëÎʵÚÒ»´Î²åÉÏÍøÏ߳ɹ¦³õʼ»¯ºóÈç¹ûÖÐ;²å°ÎÍøÏßÈçºÎ°ì£¿

5

Ö÷Ìâ

62

Ìû×Ó

1

¾«»ª

Öм¶»áÔ±

Rank: 3Rank: 3

»ý·Ö
426
½ðÇ®
426
×¢²áʱ¼ä
2016-3-9
ÔÚÏßʱ¼ä
75 Сʱ
·¢±íÓÚ 2016-8-13 21:15:55 | ÏÔʾȫ²¿Â¥²ã
ÁôÃû±¸ÓÃѧϰ

10

Ö÷Ìâ

38

Ìû×Ó

0

¾«»ª

Öм¶»áÔ±

Rank: 3Rank: 3

»ý·Ö
369
½ðÇ®
369
×¢²áʱ¼ä
2016-3-26
ÔÚÏßʱ¼ä
146 Сʱ
·¢±íÓÚ 2017-2-13 17:28:08 | ÏÔʾȫ²¿Â¥²ã
¿ÉÒÔ˵˵ÈȲå°ÎµÄ×÷ÓÃÂð£¿
¹úÃñ¼¼ÊõMCU´úÀí ÁªÏµ:961006524@qq.com

42

Ö÷Ìâ

297

Ìû×Ó

0

¾«»ª

¸ß¼¶»áÔ±

Rank: 4

»ý·Ö
994
½ðÇ®
994
×¢²áʱ¼ä
2016-7-22
ÔÚÏßʱ¼ä
318 Сʱ
·¢±íÓÚ 2017-3-29 12:53:40 | ÏÔʾȫ²¿Â¥²ã
ѧϰÁË

3

Ö÷Ìâ

11

Ìû×Ó

0

¾«»ª

ÐÂÊÖÉÏ·

»ý·Ö
48
½ðÇ®
48
×¢²áʱ¼ä
2017-4-3
ÔÚÏßʱ¼ä
37 Сʱ
·¢±íÓÚ 2017-6-9 11:42:29 | ÏÔʾȫ²¿Â¥²ã
ѧϰÁË

20

Ö÷Ìâ

138

Ìû×Ó

0

¾«»ª

Öм¶»áÔ±

Rank: 3Rank: 3

»ý·Ö
347
½ðÇ®
347
×¢²áʱ¼ä
2012-10-11
ÔÚÏßʱ¼ä
137 Сʱ
·¢±íÓÚ 2019-8-20 10:14:21 | ÏÔʾȫ²¿Â¥²ã
¸Ðл¥Ö÷·ÖÏí£¡

1

Ö÷Ìâ

9

Ìû×Ó

0

¾«»ª

ÐÂÊÖÉÏ·

»ý·Ö
34
½ðÇ®
34
×¢²áʱ¼ä
2019-8-2
ÔÚÏßʱ¼ä
8 Сʱ
·¢±íÓÚ 2025-6-17 15:01:30 | ÏÔʾȫ²¿Â¥²ã
¸Ðл·ÖÏí£¬ËäÈ»ÄãµÄ·½·¨ÎÒûÓÃÉÏ£¬µ«ÊǸøÎÒÌṩÁ˽â¾ö˼·
ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔ»ØÌû µÇ¼ | Á¢¼´×¢²á

±¾°æ»ý·Ö¹æÔò



¹Ø±Õ

Ô­×Ӹ缫Á¦ÍƼöÉÏÒ»Ìõ /2 ÏÂÒ»Ìõ

ÕýµãÔ­×Ó¹«ÖÚºÅ

QQ|ÊÖ»ú°æ|OpenEdv-¿ªÔ´µç×ÓÍø ( ÔÁICP±¸12000418ºÅ-1 )

GMT+8, 2025-10-8 15:24

Powered by OpenEdv-¿ªÔ´µç×ÓÍø

© 2001-2030 OpenEdv-¿ªÔ´µç×ÓÍø

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí