Keil MDK下的STM32F407移植FreeRTOS及FreeRTOSTCPIP,不是lwip,是FreeRTOS自己的TCPIP協議棧。其他單片機可供參考。
單片機源程序如下:
- #include "stm32f4xx.h"
- #include "public.h"
- #include "mQueue.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include "FreeRTOS_IP.h"
- #include "LAN8720.h"
- extern ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB]; //stm32f4x7_eth.c
- extern ETH_DMADESCTypeDef DMATxDscrTab[ETH_TXBUFNB];
- extern uint8_t Rx_Buff[ETH_RX_BUF_SIZE * ETH_RXBUFNB];
- extern uint8_t Tx_Buff[ETH_TX_BUF_SIZE * ETH_TXBUFNB];
- extern NetworkParm networkParm; //LAN8720.c
- int main(void)
- {
- delay_ms(100);
-
- mNVIC_config();
- mIWDG_config(6, 625); //4s看門狗
- mUSART1_config(921600); //打印使用
- mPrintf("start...\r\n");
- mRNG_Init(); //初始化隨機數
-
- LAN8720_Init(); //初始化LAN8720
- ETH_MACDMA_Config(); //配置STM32以太網控制器
- ETH_MACAddressConfig(ETH_MAC_Address0, networkParm.mac); //向STM32F4的MAC地址寄存器中寫入MAC地址
- ETH_DMATxDescChainInit(DMATxDscrTab, Tx_Buff, ETH_TXBUFNB);
- ETH_DMARxDescChainInit(DMARxDscrTab, Rx_Buff, ETH_RXBUFNB);
- for(u8 i = 0; i < ETH_TXBUFNB; i++) //使能ipv4發送幀校驗和生成
- {
- /* FreeRTOSTCPIP只支持硬件生成ipv4校驗和,不支持TCP/UDP/ICMP校驗和 */
- ETH_DMATxDescChecksumInsertionConfig(&DMATxDscrTab[i], ETH_DMATxDesc_ChecksumIPV4Header);
- }
- ETH_Start(); //開啟MAC和DMA
-
- hange_vUSE_DHCP = networkParm.dhcp; /* 見hange_vUSE_DHCP定義 */
- FreeRTOS_IPInit(networkParm.ip,
- networkParm.sub,
- networkParm.gw,
- networkParm.domainS1,
- networkParm.mac);
-
- xTaskCreate(ethCardRxTask,
- "ethCardRxTask",
- ethCardRxStackSize,
- (void* )NULL,
- ethCardRxPrio,
- ðCardRxHandler);
- vTaskStartScheduler(); //啟動任務調度
- while(1) //真執行這里也就崩了
- {
- taskENTER_CRITICAL(); //進臨界狀態,關閉所有中斷
- mPrintf("OS沒啟動或崩了\r\n");
- STM32_SYSTEM_RESET;
- }
- // return 0;
- }
復制代碼
所有程序51hei提供下載:
STM32F407-FreeRTOS TCPIP.7z
(697.48 KB, 下載次數: 82)
2020-5-7 17:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|