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 返回。

请求格式

{"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
3d打印机温仓的温控装置代码
Readme 114 KiB
Languages
C 87.7%
CMake 4.5%
Assembly 3.3%
HTML 2.9%
Python 1.6%