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接收 |
工作原理
- DMA持续接收数据到缓冲区
- 检测到IDLE空闲线(一帧结束)时触发中断
- 中断只保存数据长度并重启DMA
- 主循环中调用
BSP_UART1_Process()解析JSON命令并执行 - 执行结果以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 返回。
请求格式
{"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"} |
恢复出厂设置 |
响应格式
简单响应:
{"status":"ok","msg":"fan mode set to auto"}
{"status":"error","msg":"unknown command"}
状态查询响应:
{"status":"ok","data":{"fan_mode":"auto","fan_threshold":30.0,"fan":"off","light":"off"}}
5. Flash存储 (bsp_flash)
将设置参数存储到内部Flash,实现断电保存。
- 存储地址:
0x0801F800(最后一页)
初始化
驱动在 MX_FREERTOS_Init() 和任务启动时初始化:
// MX_FREERTOS_Init() 中
BSP_Relay_Init(); // 继电器初始化
BSP_BMP280_Init(); // BMP280初始化
// StartDefaultTask() 中
BSP_UART1_Init(); // UART1 DMA初始化
任务循环中调用 BSP_UART1_Process() 处理命令。
Description
Languages
C
87.7%
CMake
4.5%
Assembly
3.3%
HTML
2.9%
Python
1.6%