3.24_433_RX版本:封装RF433模块,完成开机进入TX/RX模式并在开发板验证成功
This commit is contained in:
105
AGENTS.md
Normal file
105
AGENTS.md
Normal file
@ -0,0 +1,105 @@
|
||||
# AGENTS.md - Development Guidelines for E32-433TBH-SC
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is an **STM32F103C8T6** embedded C project using **STM32CubeMX** code generation.
|
||||
The project implements a LoRa module (E32-TTL-433) control system with USB CDC communication,
|
||||
OLED display (u8g2), and a menu system.
|
||||
|
||||
## Build System
|
||||
|
||||
- **IDE**: Keil MDK-ARM V5.32
|
||||
- **Linker**: GCC
|
||||
- **Project File**: `project.ioc` (STM32CubeMX configuration)
|
||||
- **No standard build system** (Makefile/CMake) - build via Keil uVision or re-generate with CubeMX
|
||||
|
||||
**To rebuild**:
|
||||
1. Open `project.ioc` in STM32CubeMX
|
||||
2. Click "Generate Code"
|
||||
3. Open the generated project in Keil uVision
|
||||
4. Build using Keil's build system
|
||||
|
||||
There is **no test framework** - this is a bare-metal embedded project without unit tests.
|
||||
|
||||
## Code Style Guidelines
|
||||
|
||||
### Naming Conventions
|
||||
- **Functions**: `snake_case` (e.g., `e32_hal_uart_tx`, `Menu_Init`)
|
||||
- **Variables**: `snake_case` (e.g., `usb_rx_data`, `my_usb_rx_num`)
|
||||
- **Constants/Defines**: `UPPER_SNAKE_CASE` (e.g., `GPIO_PIN_RESET`, `E32_USE_GPIO_AUX`)
|
||||
- **Types/Enums**: `snake_case_t` suffix for types (e.g., `key_name_t`, `work_mode_t`)
|
||||
- **Pin Defines**: Follow CubeMX pattern (e.g., `RESET_Pin`, `AUX_GPIO_Port`)
|
||||
|
||||
### File Organization
|
||||
```
|
||||
Core/Src/ - Main application source (main.c, gpio.c, usart.c, etc.)
|
||||
Core/Inc/ - Main application headers
|
||||
Middlewares/ - Third-party libraries (u8g2, MultMenu, USB)
|
||||
USB_DEVICE/ - USB CDC implementation
|
||||
docs/ - Documentation
|
||||
```
|
||||
|
||||
### Code Structure
|
||||
- Use **HAL library** for peripheral access (e.g., `HAL_UART_Transmit`, `HAL_GPIO_ReadPin`)
|
||||
- Follow **CubeMX USER CODE blocks** - place custom code between `/* USER CODE BEGIN ... */` and `/* USER CODE END ... */`
|
||||
- Keep hardware-specific code in `Core/Src/` (e.g., `e32_hal.c`, `u8g2_hal.c`)
|
||||
- Keep application logic separate from HAL
|
||||
|
||||
### Formatting
|
||||
- Use **tabs** for indentation (consistent with generated CubeMX code)
|
||||
- Opening brace on same line as function declaration
|
||||
- Maximum line width: ~120 characters (follow existing style)
|
||||
- No enforced code formatter - maintain consistency with surrounding code
|
||||
|
||||
### Comments
|
||||
- Use **Doxygen-style** function comments:
|
||||
```c
|
||||
/**
|
||||
* @brief Brief description
|
||||
* @param param_name Description
|
||||
* @retval Return value description
|
||||
*/
|
||||
```
|
||||
- Chinese comments are acceptable (project uses mixed EN/ZH)
|
||||
- Comment complex logic, not trivial code
|
||||
|
||||
### Error Handling
|
||||
- Use `Error_Handler()` (defined in main.c) for fatal errors
|
||||
- Check HAL return values for UART, I2C, USB operations
|
||||
- Implement timeout mechanisms for blocking operations
|
||||
- Use `HAL_Delay()` for timing-critical operations
|
||||
|
||||
### Includes
|
||||
- Group includes: standard library, HAL, application-specific
|
||||
- Use include guards in headers (`#ifndef __FILE_H`, `#define __FILE_H`)
|
||||
- Use `extern "C"` guards when mixing C/C++ headers
|
||||
|
||||
### Types and Constants
|
||||
- Use stdint types (`uint8_t`, `uint16_t`, `uint32_t`) for portability
|
||||
- Prefer `bool` over `uint8_t` for boolean values (include `<stdbool.h>`)
|
||||
- Define magic numbers as constants or enums
|
||||
|
||||
## Important Notes
|
||||
|
||||
1. **Never modify auto-generated code** outside USER CODE sections - it will be overwritten by CubeMX
|
||||
2. **Preserve the project.ioc** - this is the single source of truth for hardware configuration
|
||||
3. **USB CDC** uses `usbd_cdc_if.c` for custom implementation
|
||||
4. **Menu system** uses MultMenu middleware in `Middlewares/MultMenu/`
|
||||
5. **Display driver** uses u8g2 in `Middlewares/u8g2Lib/`
|
||||
|
||||
## Key Files
|
||||
|
||||
- `Core/Src/main.c` - Application entry point
|
||||
- `Core/Src/e32_hal.c` - E32 LoRa module HAL
|
||||
- `Core/Src/u8g2_hal.c` - OLED display HAL
|
||||
- `Core/Src/key.c` - Key input handling
|
||||
- `Middlewares/MultMenu/menu/menu.c` - Menu system
|
||||
- `USB_DEVICE/App/usbd_cdc_if.c` - USB CDC interface
|
||||
- `project.ioc` - STM32CubeMX project configuration
|
||||
|
||||
## Working with this Repository
|
||||
|
||||
1. Edit source files in `Core/Src/` or `Core/Inc/`
|
||||
2. For hardware changes, edit `project.ioc` in STM32CubeMX and regenerate
|
||||
3. Build with Keil uVision (project.uvprojx)
|
||||
4. Flash using ST-Link or compatible programmer
|
||||
Reference in New Issue
Block a user