找回密码
 注册

QQ登录

只需一步,快速开始

搜索

STM32F4移植FreeRTOS及FreeRTOS TCP/IP工程源码

[复制链接]
路漫漫 发表于 2020-5-21 01:03:47 | 显示全部楼层 |阅读模式
Keil MDK下的STM32F407移植FreeRTOS及FreeRTOS TCP/IP,不是lwip,是FreeRTOS自己的TCPIP协议栈。其他单片机可供参考。完整源码: STM32F407-FreeRTOS TCPIP.7z (697.48 KB, 售价: 1 E币)

部分代码
  1. #include "stm32f4xx.h"
  2. #include "public.h"
  3. #include "mQueue.h"
  4. #include "FreeRTOS.h"
  5. #include "task.h"
  6. #include "FreeRTOS_IP.h"
  7. #include "LAN8720.h"

  8. extern ETH_DMADESCTypeDef DMARxDscrTab[ETH_RXBUFNB];        //stm32f4x7_eth.c
  9. extern ETH_DMADESCTypeDef DMATxDscrTab[ETH_TXBUFNB];
  10. extern uint8_t Rx_Buff[ETH_RX_BUF_SIZE * ETH_RXBUFNB];
  11. extern uint8_t Tx_Buff[ETH_TX_BUF_SIZE * ETH_TXBUFNB];

  12. extern NetworkParm networkParm;  //LAN8720.c

  13. int main(void)
  14. {
  15.         delay_ms(100);
  16.         
  17.         mNVIC_config();
  18.         mIWDG_config(6, 625);  //4s看门狗
  19.         mUSART1_config(921600);  //打印使用
  20.         mPrintf("start...\r\n");

  21.         mRNG_Init();  //初始化随机数
  22.         
  23.         LAN8720_Init();  //初始化LAN8720
  24.         ETH_MACDMA_Config();  //配置STM32以太网控制器
  25.         ETH_MACAddressConfig(ETH_MAC_Address0, networkParm.mac);  //向STM32F4的MAC地址寄存器中写入MAC地址
  26.         ETH_DMATxDescChainInit(DMATxDscrTab, Tx_Buff, ETH_TXBUFNB);
  27.         ETH_DMARxDescChainInit(DMARxDscrTab, Rx_Buff, ETH_RXBUFNB);
  28.   for(u8 i = 0; i < ETH_TXBUFNB; i++)         //使能ipv4发送帧校验和生成
  29.         {
  30.     /* FreeRTOSTCPIP只支持硬件生成ipv4校验和,不支持TCP/UDP/ICMP校验和 */
  31.                 ETH_DMATxDescChecksumInsertionConfig(&DMATxDscrTab[i], ETH_DMATxDesc_ChecksumIPV4Header);
  32.         }
  33.         ETH_Start();  //开启MAC和DMA
  34.         
  35.         hange_vUSE_DHCP = networkParm.dhcp;  /* 见hange_vUSE_DHCP定义 */
  36.         FreeRTOS_IPInit(networkParm.ip,
  37.                                                                         networkParm.sub,
  38.                                                                         networkParm.gw,
  39.                         networkParm.domainS1,
  40.                                                                         networkParm.mac);
  41.         
  42.         xTaskCreate(ethCardRxTask,
  43.                     "ethCardRxTask",
  44.                     ethCardRxStackSize,
  45.                     (void* )NULL,
  46.                     ethCardRxPrio,
  47.                     eCardRxHandler);

  48.         vTaskStartScheduler();  //启动任务调度

  49.   while(1)  //真执行这里也就崩了
  50.         {
  51.                 taskENTER_CRITICAL();  //进临界状态,关闭所有中断
  52.           mPrintf("OS没启动或崩了\r\n");
  53.     STM32_SYSTEM_RESET;
  54.         }
  55. //        return 0;
  56. }
复制代码


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-27 07:38

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表