# 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()` 处理命令。