Files
3d_contorl/README.md

149 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BSP Drivers
本目录包含外设驱动模块包括继电器驱动、传感器驱动和UART通信。
---
## 1. 继电器驱动 (Relay)
控制 LIGHT 和 FAN 两个继电器。
### 硬件连接
| 继电器 | GPIO端口 | 引脚 |
|--------|----------|------|
| LIGHT | GPIOB | PB15 |
| FAN | GPIOB | PB14 |
> 注意:两个继电器均为**低电平有效**(低电平触发开启)
### API 接口
| 函数 | 描述 |
|------|------|
| `BSP_Relay_Init()` | 初始化所有继电器,默认为关闭状态 |
| `BSP_LIGHT_On()` | 打开 LIGHT 继电器 |
| `BSP_LIGHT_Off()` | 关闭 LIGHT 继电器 |
| `BSP_LIGHT_Toggle()` | 切换 LIGHT 继电器状态 |
| `BSP_FAN_On()` | 打开 FAN 继电器 |
| `BSP_FAN_Off()` | 关闭 FAN 继电器 |
| `BSP_FAN_Toggle()` | 切换 FAN 继电器状态 |
| `BSP_FAN_SetMode()` | 设置风扇模式(自动/手动) |
| `BSP_FAN_SetThreshold()` | 设置自动模式温度阈值 |
| `BSP_FAN_AutoControl()` | 根据温度自动控制风扇 |
---
## 2. BMP280 气压/温度传感器
使用 I2C1 接口 (PB6-SCL, PB7-SDA)I2C地址: 0x76 (SDO接地)
### 配置说明
- I2C接口: I2C1
- I2C地址: 0x76
- 引脚: PB6 (SCL), PB7 (SDA)
---
## 3. UART1 通信驱动 (MQTT透传)
使用 DMA + IDLE空闲中断 实现高效接收用于MQTT模块透明传输。
### 硬件连接
| 功能 | GPIO端口 | 引脚 |
|------|----------|------|
| TX | GPIOA | PA9 |
| RX | GPIOA | PA10 |
### DMA配置
| DMA通道 | 方向 | 说明 |
|---------|------|------|
| DMA1_Channel4 | TX | USART1发送 |
| DMA1_Channel5 | RX | USART1接收 |
### 工作原理
1. DMA持续接收数据到缓冲区
2. 检测到IDLE空闲线一帧结束时触发中断
3. 中断只保存数据长度并重启DMA
4. 主循环中调用 `BSP_UART1_Process()` 解析JSON命令并执行
5. 执行结果以JSON格式通过UART1返回
### 文件结构
```
Core/Bsp/
├── bsp_uart.h / .c # UART1 DMA驱动
├── bsp_cmd.h / .c # JSON命令解析与执行
├── cJSON.h / .c # cJSON库精简版
├── bsp_relay.h / .c # 继电器驱动
├── bsp_flash.h / .c # Flash存储驱动
├── bsp_bmp280.h / .c # BMP280 BSP
├── driver_bmp280.h / .c # LibDriver BMP280
└── driver_bmp280_interface.c / .h # HAL接口
```
---
## 4. JSON 命令协议
通信采用 JSON 格式,所有命令通过 UART1 接收,响应也通过 UART1 返回。
### 请求格式
```json
{"cmd":"xxx","value":"xxx"}
```
### 支持的命令
| 命令 | 请求示例 | 说明 |
|------|---------|------|
| 查询状态 | `{"cmd":"status"}` | 返回所有状态信息 |
| 风扇模式 | `{"cmd":"fan_mode","value":"auto"}` | 设置风扇为自动/手动 |
| 风扇阈值 | `{"cmd":"fan_threshold","value":30.0}` | 设置温度阈值 |
| 风扇开关 | `{"cmd":"fan","value":"on"}` | 手动开/关风扇 |
| 灯光开关 | `{"cmd":"light","value":"on"}` | 开/关灯 |
| 恢复默认 | `{"cmd":"reset"}` | 恢复出厂设置 |
### 响应格式
**简单响应:**
```json
{"status":"ok","msg":"fan mode set to auto"}
{"status":"error","msg":"unknown command"}
```
**状态查询响应:**
```json
{"status":"ok","data":{"fan_mode":"auto","fan_threshold":30.0,"fan":"off","light":"off"}}
```
---
## 5. Flash存储 (bsp_flash)
将设置参数存储到内部Flash实现断电保存。
- 存储地址: `0x0801F800` (最后一页)
---
## 初始化
驱动在 `MX_FREERTOS_Init()` 和任务启动时初始化:
```c
// MX_FREERTOS_Init() 中
BSP_Relay_Init(); // 继电器初始化
BSP_BMP280_Init(); // BMP280初始化
// StartDefaultTask() 中
BSP_UART1_Init(); // UART1 DMA初始化
```
任务循环中调用 `BSP_UART1_Process()` 处理命令。