wangbeihong 8d2a0ea0c8 feat: 集成 EasyLogger 并更新 UART DMA 回调
- 集成 EasyLogger,增强日志功能。
- 更新 UART DMA 回调以使用 EasyLogger 记录日志。
- 重新格式化 README.md,提升可读性和清晰度。
- 添加新的 CMSIS DSP 和 FreeRTOS 源文件。
- 更新 CMake 配置以包含 EasyLogger 源文件。

此提交改进了日志功能,为后续开发做好了准备。
2026-04-02 00:27:58 +08:00

嵌入式调试开发指南

项目简介

本项目旨在实现基于 STM32F103 的嵌入式开发,支持通过 TCP/IP 协议进行数据传输。以下内容将详细介绍如何配置和使用相关功能。


环境准备

硬件需求

  • STM32F103 开发板
  • USB 转串口模块
  • 连接线

软件需求

  • 串口调试工具(如 XCOM 或 SecureCRT
  • TCP 测试软件

配置步骤

1. 串口配置

  1. 选择实际的串口号(如 COM4
  2. 设置波特率为 115200

2. AT 指令操作

配置 Wi-Fi

AT+CWMODE=1  # 设置工作模式为 STA
AT+CWJAP="ssid","password"  # 配置 Wi-Fi

连接服务器

AT+CIPSTART="TCP","192.168.1.101",3456  # 连接服务器IP 为电脑的 IP端口为 3456
AT+SAVETRANSLINK=1,"192.168.1.101",3456,"TCP"  # 保存连接信息,开机后自动连接
AT+CIPMODE=1  # 设置为透传模式
AT+CIPSEND  # 发送数据
HELLOWORLD  # 示例数据

退出透传模式

进入自动透传模式后,如需重新配置(如更换 IP需退出透传模式

  1. 在串口助手中发送 +++
  2. 注意:
    • 不要勾选“发送新行”。
    • 发送 +++ 后,停顿 1 秒以上不要发送任何数据。
  3. 模块返回 OK 后,即可重新进入命令模式。

测试与验证

1. 启动服务器

使用 TCP 测试软件创建服务器并启动。

2. 实际连接与发送测试

通过串口助手发送数据,验证数据是否成功传输。


连接示意图

连接线示意图


常见问题

1. 无法连接服务器

  • 检查 IP 和端口是否正确。
  • 确保 Wi-Fi 配置无误。

2. 透传模式无法退出

  • 确保发送 +++ 时未勾选“发送新行”。
  • 确保发送后停顿 1 秒以上。

附录

相关工具截图

TCP 测试软件

TCP 测试软件

创建服务器

创建服务器

启动服务器

启动服务器

实际连接发送测试

实际连接发送测试


串口重定向

使用以下函数,用于串口重定向:

#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE {
    HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
    return ch;
}

该函数用于将 printf 输出重定向到串口。


TCP 接收与发送

接收数据

使用空闲中断接收 TCP 数据,开启了 DMA 接收:

void UART_IDLE_Callback(UART_HandleTypeDef *huart) {
    /* 仅处理 USART1 的实例 */
    if (huart == NULL || huart->Instance != USART1)
        return;

    /* 清除空闲中断标志位HAL库宏 */
    __HAL_UART_CLEAR_IDLEFLAG(huart);

    /* 停止 DMA 以便安全读取计数器并更新状态 */
    HAL_UART_DMAStop(huart);

    /* 计算接收到的字节数:总缓冲区长度 - DMA 剩余传输计数 */
    uint16_t recv_len = UART1_RX_BUF_SIZE - __HAL_DMA_GET_COUNTER(huart->hdmarx);

    if (recv_len > 0 && recv_len < UART1_RX_BUF_SIZE) {
        uart1_rx_len = recv_len;
        uart1_rx_buf[recv_len] = '\0';  /* 添加字符串结束符,方便后续字符串处理 */
        uart1_rx_flag = 1;              /* 置位标志,通知应用层新消息到达 */

        /* 仅供调试在中断中打印接收到的数据注意printf 可能会影响实时性) */
        elog_raw("UART1 Received: %s\r\n", (char *)uart1_rx_buf);
    }

    /* 重新启动新一轮的 DMA 接收 */
    HAL_UART_Receive_DMA(&huart1, uart1_rx_buf, UART1_RX_BUF_SIZE);
}

发送数据

封装了发送函数,只需填入数据即可发送:

const char *message = "Hello, ESP12F! This is a test message.";
HAL_StatusTypeDef status = ESP12F_TCP_SendMessage(message);
Description
物流小车
Readme 268 MiB
Languages
C 97.8%
Assembly 1.9%
C++ 0.2%