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:
@ -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无线通信模块
|
||||
|
||||
Reference in New Issue
Block a user