移植步骤:
1 - 先移植FreeRTOS的Demo;
2 - 再移植Lwip的文件(源码&sys_arch&lwip_comm);
3 - 单个实现TCPIP协议栈任务:TCP客户端、TCP服务器和UDP;
模块:
- 内存管理:需要给"以太网驱动"、"FreeRTOS"、"Lwip"三个部分分配内存;
- 以太网DMA描述符&以太网DMA Buffer
- Lwip的RAM部分:ram_heap&内存池部分:memp;
- FreeRTOS占用RAM由配置文件定义大小,用于操作系统中动态操作的分配;
- 另外原子实现的内存管理方式中的内存管理表也会占用很大内存,与内存块大小密切相关;
- stm32F4的RAM分为普通内存128k和CCM内存64k,两个不能当作一块内存用!;
- 定时器:操作系统下不需要单独实现Lwip的周期任务函数的调用;
- LAN8720驱动:F407需要添加ST的官网以太网库,然后实现驱动;
- FreeRTOS:接口调用需要注意任务级和中断级接口的区分;
- sys_arch:解决操作系统和lwip的关系,主要是信号量和邮箱;
- liwp_comm:解决lwip和以太网之间的关系:以太网驱动;
注意事项:
- 以太网中断要调节到操作系统可屏蔽的范围内(进入临界区可屏蔽以太网中断);
- TCP服务器、TCP客户端、UDP服务任务堆栈需要大一点;
- 测试需要在DHCP完成之后开始;
- 测试的PC防火墙需要关闭;
- 测试的上位机要多个测试,某个上位机不一定能实现"全部"通信!;
优化:
- 网线热插拔(目前没有网线初始化不成功,插拔后应该可再次触发DHCP,怎么检测
网线插拔事件的发生);
- lwip任务的时基调到由操作系统提供(任务调度器挂起会不会影响获取到的TICK值?)
疑问:
- MII,RMII......
- 硬件帧校验(low_level_init()、)
- 网络相关的调试工具
- pbuf、netif结构
- ethernetif.c文件被完全替换,看看源文件;
- 滴答定时器中断在哪配置;
- sys_arch中的信号量相关函数实现是否正确还不能保证,需要再看,尤其是创建函数的传参感觉有问题。
上一篇:STM32G0开发笔记-1-开发环境搭建之STM32CubeMX
下一篇:[stm32]Cube配置usart1发送数据
设计资源 培训 开发板 精华推荐
- ws2812组12*12点阵
- FPGA-EP4CE6E22
- ERASynthMicro:USB 供电、便携、开源、RF信号发生器,支持12.5MHz - 6.4GHz
- SDR SDRAM 控制器 - 高级参考设计
- 无线鼠标改锂电的充放电管理板
- LTC3226EUD 锂离子备用电源的典型应用电路
- LTC6259HMS 1.3MHz、20uA 高功率高效轨至轨 I/O 运算放大器的典型应用
- FPV机架 - 3寸 - 18650改
- NB4N441MNGEVB,用于 NB4N441 的评估板,用于 SONET 的 12.5 至 425 MHz PLL 时钟发生器
- 采用 LT6203 的 LTC2379-18 全差分 5V 驱动器