STM32F7基于mbedTLS建立HTTPS连接时返回-0x0050错误求助
解决STM32F7+mbedTLS建立HTTPS连接时返回-0x0050错误的排查方案
错误码含义
-0x0050 对应 MBEDTLS_ERR_SSL_TIMEOUT,本质是底层TCP接收数据超时,并非TLS握手阶段的加密/证书验证问题。
日志关键信息分析
从日志流程可以明确问题节点:
../Middlewares/Third_Party/mbedTLS/library/ssl_tls.c:2696: in_left: 0, nb_want: 5 ../Middlewares/Third_Party/mbedTLS/library/ssl_tls.c:2722: ssl->f_recv(_timeout)() returned -80 (-0x0050)
在读取TLS记录头(需要5字节)的阶段,输入缓冲区为空,调用底层接收回调f_recv时超时返回错误,说明TCP链路未收到服务器的响应数据。
具体排查步骤
- 验证TCP连接有效性
- 用Wireshark抓包确认TCP三次握手是否完成,是否能正常收发TCP数据包
- 测试普通TCP连接(如直接连接服务器443端口发送测试数据),排除TLS层之前的网络问题
- 检查目标服务器443端口是否开放,是否存在防火墙、路由规则拦截流量
- 调整接收超时参数
- 调用
mbedtls_ssl_set_timeout()增大超时阈值(例如从5000ms调整至10000ms) - 检查自定义
f_recv回调函数的超时逻辑,确认是否存在误返回超时的情况
- 调用
- 排查硬件与驱动
- 确认STM32F7的ETH外设引脚连接正常,网络模块(如W5500、ENC28J60)工作稳定
- 检查LWIP或其他TCP/IP栈的配置,是否开启了TCP keep-alive,是否存在丢包、断连问题
- 检查mbedTLS配置
- 确认mbedTLS开启了目标服务器支持的TLS版本(如TLS1.2/TLS1.3),避免版本不匹配导致服务器拒绝响应
- 检查加密套件配置,确保包含服务器支持的套件
- 调试底层接收逻辑
在自定义f_recv回调中添加日志,记录每次调用的超时时间、返回值、实际接收字节数,定位是否真的无数据接收还是回调逻辑错误
内容的提问来源于stack exchange,提问作者Burak Türüdü
相关产品推荐
相关产品推荐

