feat: 集成 EasyLogger 并更新 UART DMA 回调

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

此提交改进了日志功能,为后续开发做好了准备。
This commit is contained in:
2026-04-02 00:27:58 +08:00
commit 8d2a0ea0c8
1045 changed files with 1139052 additions and 0 deletions

179
README.md Normal file
View File

@@ -0,0 +1,179 @@
# 嵌入式调试开发指南
## 项目简介
本项目旨在实现基于 STM32F103 的嵌入式开发,支持通过 TCP/IP 协议进行数据传输。以下内容将详细介绍如何配置和使用相关功能。
---
## 环境准备
### 硬件需求
- STM32F103 开发板
- USB 转串口模块
- 连接线
### 软件需求
- 串口调试工具(如 XCOM 或 SecureCRT
- TCP 测试软件
---
## 配置步骤
### 1. 串口配置
1. 选择实际的串口号(如 COM4
2. 设置波特率为 `115200`
### 2. AT 指令操作
#### 配置 Wi-Fi
```bash
AT+CWMODE=1 # 设置工作模式为 STA
AT+CWJAP="ssid","password" # 配置 Wi-Fi
```
#### 连接服务器
```bash
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. 实际连接与发送测试
通过串口助手发送数据,验证数据是否成功传输。
---
## 连接示意图
![连接线示意图](image.png)
---
## 常见问题
### 1. 无法连接服务器
- 检查 IP 和端口是否正确。
- 确保 Wi-Fi 配置无误。
### 2. 透传模式无法退出
- 确保发送 `+++` 时未勾选“发送新行”。
- 确保发送后停顿 1 秒以上。
---
## 附录
### 相关工具截图
#### TCP 测试软件
![TCP 测试软件](image-2.png)
#### 创建服务器
![创建服务器](image-3.png)
#### 启动服务器
![启动服务器](image-4.png)
#### 实际连接发送测试
![实际连接发送测试](image-5.png)
---
## 串口重定向
使用以下函数,用于串口重定向:
```c
#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 接收:
```c
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);
}
```
### 发送数据
封装了发送函数,只需填入数据即可发送:
```c
const char *message = "Hello, ESP12F! This is a test message.";
HAL_StatusTypeDef status = ESP12F_TCP_SendMessage(message);
```