| Keil MDK下的STM32F407移植FreeRTOS及FreeRTOS TCP/IP,不是lwip,是FreeRTOS自己的TCPIP协议栈。其他单片机可供参考。完整源码:  STM32F407-FreeRTOS TCPIP.7z
(697.48 KB, 售价: 1 E币) 
 部分代码
 
 复制代码#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,
                    eCardRxHandler);
        vTaskStartScheduler();  //启动任务调度
  while(1)  //真执行这里也就崩了
        {
                taskENTER_CRITICAL();  //进临界状态,关闭所有中断
          mPrintf("OS没启动或崩了\r\n");
    STM32_SYSTEM_RESET;
        }
//        return 0;
}
 
 
    【必读】版权免责声明
        1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
     |