完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用STM32cube生成了一个基于stm32f407Vet6和lwip Raw API的http server的例程,试了试工程的ping通没问题,单纯手动新建tcp和udp通信也没问题,但是httpd部分网页打不开
经过一通搜索查找跟踪debug,发现httpd部分80端口tcp连接可正常连接,get请求也能正确进入http_recev,http网页数据一路来到HAL_ETH_Transmit的WRITE_REG(heth->Instance->DMATPDR, (uint32_t)(heth->TxDescList.TxDesc[heth->TxDescList.CurTxDesc]));这行就完蛋了网口DMA的SR寄存器报了个ETH_DMASR_FBES错误 对比了一个能运行的例程,虽然http网页数据都在flash里,但是人家的网口发送dma描述符的数据地址开头是0x2开头的,也就是数据被拷进了RAM里,然后给到网口dma而stm32cube直接生成的例程,http网页数据在网口发送dma描述符里的地址开头是0x08,也就是说给到dma的数据地址是在flash里而我尝试在lwip的TCP_Write函数中给一个 TCP_WRITE_FLAG_COPY 参数,让TCP_write写数据的时候把写入的数据拷入新建的pbuf进行发送,网页就能顺利打开了 所以目前所有的证据指向了:STM32的网口DMA只能从RAM中提取数据,如果从flash中取数据就会引起dma错误不知上述理解是否正确 |
|
相关推荐
1个回答
|
|
STM32的网口DMA不仅可以从RAM中提取数据,还可以从其他外设或数据源中提取数据。网口DMA可以通过设置DMA的地址和长度来指定数据来源和目标,并且可以使用DMA的循环模式来实现连续的数据传输。
关于你的问题,根据你的描述,可能是网页数据在传输过程中出现了错误,导致DMA的SR寄存器报了ETH_DMASR_FBES错误。FBES错误表示帧接收错误,可能是网络数据帧存在错误或丢失。 要解决这个问题,你可以尝试以下几个方面的调试和排查: 1. 确保网线和网络环境正常。可能有时候网络条件不好,如网络延迟、丢包等,导致数据传输错误。 2. 检查网页数据的完整性和正确性。可以通过Wireshark等网络抓包工具来查看网页数据的传输情况,确认数据在传输过程中是否正确。 3. 检查接收缓冲区的设置和使用。确保接收缓冲区大小足够,并且在使用接收缓冲区时没有发生越界或重复写入的情况。 4. 检查DMA传输的设置和使用。确保DMA的配置正确,并且在使用DMA传输数据时没有发生错误。 5. 可以尝试重新生成基于stm32f407Vet6和lwip Raw API的http server的例程,并对比新生成的例程与原例程的差异,查找是否有配置或代码错误。 如果以上方法都没有解决问题,可以尝试在STM32的官方威廉希尔官方网站 支持或开发社区中提问,以获得更详细的帮助和指导。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1883 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1661 浏览 1 评论
1148 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
762 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1964浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
790浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
614浏览 3评论
631浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
593浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 06:58 , Processed in 1.041822 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号