3.24_433_TX版本:项目去UI化,删除OLED/菜单/按键,TX已验证,RX待验证

删除内容:
- 删除OLED显示相关代码(u8g2库、I2C接口)
- 删除按键输入相关代码(key.c)
- 删除菜单系统(MultMenu整个目录)
- 删除USB CDC功能(USB_DEVICE目录)
- 删除旧的E32演示代码(e32_demo.c/h)
保留内容:
- Driver_RF433核心驱动(已封装完整)
- rf433_tx_app.c(TX应用层,独立无UI依赖)
- rf433_rx_app.c(RX应用层,独立无UI依赖)
- GPIO LED指示功能(LED_TX/LED_RX)
This commit is contained in:
2026-03-24 19:39:43 +08:00
parent e439dd465e
commit 1c6ff020e9
225 changed files with 2446 additions and 94426 deletions

View File

@ -1,17 +1,28 @@
# E32-433TBH-SC 项目去UI化准备计划
# E32-433TBH-SC 项目去UI化准备计划(更新版)
## 📋 执行摘要
**当前状态**项目已完成核心代码重构新的应用层rf433_tx_app.c 和 rf433_rx_app.c已实现且**完全不依赖OLED/Menu/USB**。
**待完成**清理遗留的UI代码和声明删除不再使用的文件确保项目干净独立。
---
## 一、项目背景与目标
### 背景
当前项目使用OLED显示屏和按键系统提供用户界面通过菜单系统配置和测试E32-433无线模块的TX发送和RX接收功能。为了简化硬件、降低成本并专注于核心无线通信功能需要删除所有UI相关代码。
当前项目已经完成从旧代码到新Driver_RF433的迁移
- ✅ 新的 `rf433_tx_app.c``rf433_rx_app.c` 已创建并独立运行
-`main.c` 已更新使用新的应用层接口
- ✅ 新应用层完全无OLED/Menu/USB依赖
但项目中仍遗留大量旧的UI相关代码和声明需要清理。
### 目标
1. **删除所有UI相关代码**OLED显示、按键输入、菜单系统
2. **提取核心TX/RX功能**:保留并优化无线通信的核心逻辑
3. **实现配置文件支持**从Flash读取配置参数
4. **保留LED指示**使用LED作为状态反馈
5. **提供手动接口**:保留外部触发发送/接收的API接口
6. **支持编译模式选择**通过编译选项选择TX/RX/双模模式
2. **清理遗留声明**删除main.h和usart.c中的旧接口声明
3. **删除不再使用的文件**:确保项目干净
4. **保留核心功能**433通信功能完整独立
### 工作模式
- **TX设备**上电后自动循环发送测试数据LED_TX闪烁指示
@ -20,7 +31,313 @@
---
## 二、当前代码分析
## 二、当前状态分析 ✅
### 2.1 已完成的重构工作
**核心驱动**
-`Driver_RF433/` - 完整的RF433驱动实现
-`Driver_RF433/Inc/rf433_hal.h` - 硬件抽象层
-`Driver_RF433/Inc/rf433_hal.h` - 包含 `uart1_check_rx_done()` 兼容接口
-`Driver_RF433/Inc/rf433_config.h` - 配置和编译模式选择
**新应用层(已独立运行)**
-`Core/Src/rf433_tx_app.c` - TX应用层**无UI依赖**
-`Core/Inc/rf433_tx_app.h` - TX应用层接口
-`Core/Src/rf433_rx_app.c` - RX应用层**无UI依赖**
-`Core/Inc/rf433_rx_app.h` - RX应用层接口
**主程序已更新**
-`Core/Src/main.c` - 使用新的rf433_tx_app/rf433_rx_app接口
- ✅ 条件编译支持TX/RX/双模模式
- ✅ 主循环调用 `rf433_tx_app_task()``rf433_rx_app_task()`
**UART已集成**
-`Core/Src/usart.c` - 已集成 `rf433_hal_uart_rxcplt_callback()`
- ✅ HAL_UART_RxCpltCallback 调用 RF433层
### 2.2 遗留的依赖问题(需要清理)
**main.h 中的遗留声明** (Core/Inc/main.h):
```c
// 第36行: #include "application.h" - 旧的菜单应用
// 第41-42行: extern uint8_t my_usb_rx_data[]; extern uint16_t my_usb_rx_num;
// 第43-48行: key_name_t 枚举 - 按键相关
// 第93行: void usb_printf() - USB打印
// 第95-96行: void gpio_usb_ctrl_on/off() - USB控制
// 第106-108行: 按键相关函数声明
// 第119-122行: void e32_demo_*() - 旧的E32演示函数
```
**main.c 中的遗留代码** (Core/Src/main.c):
```c
// 第48行: #include "usbd_cdc_if.h" - USB CDC头文件
// 第49行: extern uint8_t usb_rx_data;
// 第100行: MX_USB_DEVICE_Init() - USB初始化
```
**usart.c 中的遗留代码** (Core/Src/usart.c):
```c
// 第25行: #include "usbd_cdc_if.h"
// 第28-29行: usb_rx_data 和 current_feature 变量
// 第157-167行: usb_receive_to_tx_send() 函数
```
**usart.h 中的遗留声明** (Core/Inc/usart.h):
```c
// 第32-37行: uart_feature 枚举和 current_feature 声明
// 第50行: usb_receive_to_tx_send() 函数声明
```
---
## 三、需要删除的文件清单
### 3.1 整个目录删除
```
Middlewares/MultMenu/ ← 菜单系统(整个目录)
├── menu/
│ ├── menu.c
│ ├── menu.h
│ └── menuConfig.h
├── application/
│ ├── application.c
│ └── application.h
└── disp/
├── dispDirver.c
└── dispDirver.h
Middlewares/u8g2Lib/ ← OLED图形库整个目录
├── inc/
│ ├── u8g2.h
│ ├── u8x8.h
│ └── ...
└── src/
├── u8g2_*.c
└── u8x8_*.c
USB_DEVICE/ ← USB设备可选删除如需调试保留
├── App/
└── Target/
Middlewares/ST/STM32_USB_Device_Library/ ← USB库可选删除
```
### 3.2 单个文件删除
**OLED相关**:
- `Core/Src/u8g2_hal.c`
- `Core/Inc/u8g2_hal.h`
- `Core/Src/i2c.c` ← I2C仅用于OLED
- `Core/Inc/i2c.h`
**按键相关**:
- `Core/Src/key.c`
- `Core/Inc/key.h`
**旧的E32驱动**:
- `Core/Src/e32_demo.c`
- `Core/Inc/e32_demo.h`
- `Core/Src/e32_hal.c`
- `Core/Inc/e32_hal.h`
**FIFO缓冲**:
- `Core/Src/fifo.c` ← 已集成到Driver_RF433
- `Core/Inc/fifo.h`
### 3.3 可以安全删除(已在新驱动中实现)
以下功能已在 `Driver_RF433/` 中完整实现,旧文件可以删除:
| 旧文件/功能 | 新实现位置 | 状态 |
|------------|-----------|------|
| `e32_hal.c/h` | `Driver_RF433/Src/rf433_hal.c` | ✅ 已迁移 |
| `e32_demo.c/h` | `Driver_RF433/Src/rf433.c` | ✅ 已迁移 |
| `fifo.c/h` | `Driver_RF433/Src/rf433_hal.c` (内部实现) | ✅ 已集成 |
| `uart1_check_rx_done()` | `Driver_RF433/Src/rf433_hal.c:452` | ✅ 已实现 |
---
## 四、清理步骤详解
### 步骤1清理main.h中的遗留声明
**文件**: `Core/Inc/main.h`
**删除以下内容**:
```c
// 第36行 - 删除旧的菜单应用包含
#include "application.h"
// 第41-48行 - 删除USB和按键相关
extern uint8_t my_usb_rx_data[ ];
extern uint16_t my_usb_rx_num ;
typedef enum {
KEY_NAME_UP = 0,
KEY_NAME_DOWN ,
KEY_NAME_ENTER,
}key_name_t;
// 第93-122行 - 删除所有遗留函数声明
void usb_printf(const char *format, ...);
void gpio_usb_ctrl_on(void);
void gpio_usb_ctrl_off(void);
void buzzer_on(void);
void buzzer_off(void);
void buzzer_button_press(void);
bool key_check_press( key_name_t name );
void key_set_continue( key_name_t name , bool enable );
void key_timer_1ms_interrupt_callback(void);
void uart1_reconfig( uint32_t rate );
void uart1_rx_timeout_1ms_callback(void);
void uart1_wait_response_blocked( uint8_t * buffer, uint16_t *length );
bool uart1_check_rx_done( uint8_t *buffer , uint32_t *length );
void e32_demo_read_device_name( char *buffer , uint8_t *length );
void e32_demo_read_fireware_version( char *buffer , uint8_t *length);
void e32_demo_menu_config( menu_config_t *config );
void e32_demo_transmit( uint8_t *buffer , uint16_t length );
```
**保留的GPIO定义**用于LED指示:
```c
#define LED_TX_Pin GPIO_PIN_15
#define LED_TX_GPIO_Port GPIOA
#define LED_RX_Pin GPIO_PIN_6
#define LED_RX_GPIO_Port GPIOB
```
### 步骤2清理main.c中的遗留代码
**文件**: `Core/Src/main.c`
**删除以下内容**:
```c
// 第48行 - 删除USB CDC头文件
#include "usbd_cdc_if.h"
// 第49行 - 删除USB数据变量声明
extern uint8_t usb_rx_data;
// 第100行 - 删除USB初始化
MX_USB_DEVICE_Init();
```
**保留的初始化**:
```c
MX_GPIO_Init(); // GPIO控制LED等
MX_USART1_UART_Init(); // UART通信RF433
MX_TIM2_Init(); // 定时器(超时检测)
```
### 步骤3清理usart.c中的遗留代码
**文件**: `Core/Src/usart.c`
**删除以下内容**:
```c
// 第25行 - 删除USB CDC头文件
#include "usbd_cdc_if.h"
// 第28-29行 - 删除USB和功能标志变量
uint8_t usb_rx_data;
uart_feature current_feature = FUNC_FEATURE1;
// 第157-167行 - 删除USB桥接函数
void usb_receive_to_tx_send( void ) {
// 整个函数删除
}
```
### 步骤4清理usart.h中的遗留声明
**文件**: `Core/Inc/usart.h`
**删除以下内容**:
```c
// 第32-37行 - 删除uart_feature枚举
typedef enum {
FUNC_NONE = 0,
FUNC_FEATURE1,
FUNC_FEATURE2
} uart_feature;
extern uart_feature current_feature;
// 第50行 - 删除USB桥接函数声明
void usb_receive_to_tx_send( void );
```
### 步骤5删除Keil项目中的文件
从Keil项目中移除以下文件组
**删除文件组**:
- `Middlewares/MultMenu`
- `Middlewares/u8g2Lib`
- `USB_DEVICE`
- `Middlewares/ST/STM32_USB_Device_Library`
**删除单个文件**从Application/User组:
- `u8g2_hal.c`
- `i2c.c`
- `key.c`
- `e32_demo.c`
- `e32_hal.c`
- `fifo.c`
### 步骤6更新编译配置
**删除Include路径**:
- `../Middlewares/MultMenu/application`
- `../Middlewares/MultMenu/menu`
- `../Middlewares/MultMenu/disp`
- `../Middlewares/u8g2Lib/inc`
- `../USB_DEVICE/App`
- `../USB_DEVICE/Target`
- `../Middlewares/ST/STM32_USB_Device_Library/Core/Inc`
- `../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc`
**删除Preprocessor Macros**(如果有):
- `USE_USB`
- `USE_HAL_PCD`
---
## 五、验证清单
清理完成后,验证以下项目:
- [ ] 编译无错误
- [ ] 编译无警告
- [ ] TX模式下能正常发送数据
- [ ] RX模式下能正常接收数据
- [ ] LED指示正常工作
- [ ] 没有未使用的变量警告
- [ ] 没有未使用的函数警告
- [ ] 没有缺失的头文件错误
---
## 六、回滚计划
如果删除后出现问题:
1. **使用Git恢复**
```bash
git checkout HEAD -- <文件路径>
```
2. **重新添加文件到项目**
- 打开Keil项目
- 添加必要的文件回项目
3. **关键备份点**
- 删除前提交当前代码到Git
- 保留原始代码分支
---
## 七、总结
### 2.1 TX模式实现application.c: 442-499
@ -586,36 +903,113 @@ int main(void) {
- `Core/Src/key.c`
- `Core/Inc/key.h`
### 预期成果
清理完成后,项目将获得:
1. **代码精简**
- Flash占用减少约 **30KB**去除UI库
- RAM占用减少约 **5KB**
- 编译时间缩短
2. **架构清晰**
- 只保留 `Driver_RF433/` 和 `Core/` 中的核心代码
- 应用层 `rf433_tx_app` 和 `rf433_rx_app` 完全独立
- 无任何UI依赖
3. **易于集成**
- 纯粹的RF433通信模块
- 清晰的API接口
- 支持TX/RX/双模三种编译模式
4. **维护性强**
- 代码结构清晰
- 依赖关系明确
- 便于后续功能扩展
---
## 十、风险评估与缓解措施
## 八、关键文件路径速查
### 10.1 风险识别
### 新架构核心文件(保留)
| 风险 | 影响 | 概率 | 缓解措施 |
|------|------|------|---------|
| 删除UI后无法调试 | 高 | 中 | 保留USB CDC调试输出使用LED指示关键状态 |
| 配置文件损坏导致设备无法启动 | 中 | 低 | 提供配置恢复机制使用CRC校验 |
| TX/RX功能提取不完整 | 高 | 中 | 充分测试,保留原代码作为参考 |
| Flash写入失败 | 中 | 低 | 添加错误处理,提供默认配置 |
| LED指示不够直观 | 低 | 中 | 定义清晰的闪烁模式文档 |
```
✅ Driver_RF433/
├── Inc/
│ ├── rf433.h # 主驱动接口
│ ├── rf433_hal.h # 硬件抽象层
│ └── rf433_config.h # 配置文件
└── Src/
├── rf433.c
└── rf433_hal.c
### 10.2 回滚计划
✅ Core/Src/
├── main.c # 主程序(已更新)
├── usart.c # UART通信需清理
├── gpio.c # GPIO控制保留LED相关
├── tim.c # 定时器
├── rf433_tx_app.c # TX应用层
└── rf433_rx_app.c # RX应用层
如果在实施过程中发现严重问题:
1. 保留原项目代码作为备份
2. 使用Git版本控制可随时回退
3. 分阶段实施,每阶段测试通过后再进行下一阶段
✅ Core/Inc/
├── main.h # 主头文件(需清理)
├── rf433_tx_app.h
└── rf433_rx_app.h
```
### 待删除文件/目录
## 十二、总结
```
❌ Middlewares/MultMenu/ # 整个目录删除
❌ Middlewares/u8g2Lib/ # 整个目录删除
❌ USB_DEVICE/ # 可选删除(如需调试保留)
❌ Core/Src/u8g2_hal.c
❌ Core/Src/i2c.c
❌ Core/Src/key.c
❌ Core/Src/e32_demo.c
❌ Core/Src/e32_hal.c
❌ Core/Src/fifo.c
```
本计划详细描述了如何从现有项目中提取TX/RX核心功能删除所有UI相关代码并实现
---
1. **纯RF433通信功能**:专注于无线收发核心逻辑
2. **配置文件支持**从Flash读取配置无需菜单设置
3. **LED状态指示**使用LED替代OLED显示
4. **手动API接口**:保留外部触发的灵活性
5. **编译模式选择**支持TX/RX/双模三种编译模式
## 九、执行时间估算
实施完成后将得到一个精简、高效、易于集成的RF433通信模块Flash占用减少约30KB去除UI库RAM占用减少约5KB更适合嵌入式产品应用。
| 步骤 | 操作 | 时间 |
|------|------|------|
| 1 | 清理main.h声明 | 5分钟 |
| 2 | 清理main.c代码 | 5分钟 |
| 3 | 清理usart.c代码 | 5分钟 |
| 4 | 清理usart.h声明 | 3分钟 |
| 5 | 从Keil删除文件 | 5分钟 |
| 6 | 更新编译配置 | 5分钟 |
| 7 | 编译验证 | 5分钟 |
| 8 | 功能测试 | 15分钟 |
| **总计** | | **48分钟** |
---
## 十、注意事项
1. **删除前备份**
- 使用Git提交当前代码
- 或手动备份项目文件夹
2. **分步执行**
- 建议按步骤顺序执行
- 每步完成后编译验证
- 确保无错误再进行下一步
3. **USB调试保留**
- 如果需要USB调试输出可保留 `USB_DEVICE/`
- 相应保留 `main.c` 中的 `MX_USB_DEVICE_Init()`
4. **LED功能保留**
- `gpio_led_tx_on/off()` 和 `gpio_led_rx_on/off()` 必须保留
- 这些函数在新应用层中被使用
---
**计划版本**: v2.0(基于当前代码状态)
**更新时间**: 2025-03-24
**适用项目**: E32-433TBH-SC RF433无线通信模块