STM32F4 系列智能快递柜主控程序方案

STM32F4 系列智能快递柜主控程序方案,适合 STM32F407 / F429 等主控。


一、快递柜系统总体架构

1、硬件组成

模块 说明
MCU STM32F407ZGT6 / F429
存储 SPI Flash / EEPROM
显示 4.3 寸 TFT / LCD
输入 触摸 / 按键 / 矩阵键盘
通信 4G / WiFi / Ethernet
锁控 电磁锁 / 电控锁
识别 二维码 / IC 卡 / 摄像头
电源 12V → DC-DC → 5V / 3.3V
安防 门磁 / 光耦检测

2、软件架构

┌──────────────┐
│   APP层      │ 业务(存件/取件/远程)
├──────────────┤
│   Service层  │ 用户 / 订单 / 锁控
├──────────────┤
│   Driver层   │ UART / LCD / Lock
├──────────────┤
│   HAL/BSP层  │ STM32 HAL
└──────────────┘

二、核心功能拆解

本地存件
动态二维码取件
远程服务器开箱
异常报警(门未关、暴力开箱)
掉电保存订单
多格口管理(A01–D99)


三、核心数据结构设计

1、柜格结构体

typedef enum
{
    BOX_IDLE = 0,
    BOX_USED,
    BOX_FAULT
} BoxStatus;

typedef struct
{
    uint8_t box_id;          // 格口号 1~N
    BoxStatus status;        // 状态
    char order_id[24];       // 订单号
    char phone[12];          // 手机号
    uint32_t expire_time;    // 过期时间
} BoxInfo_t;

2、系统全局变量

#define MAX_BOX_NUM  48

BoxInfo_t BoxList[MAX_BOX_NUM];
uint8_t Online_Flag = 0;

四、锁控驱动

1、锁控 IO 定义

#define LOCK_GPIO_PORT  GPIOE
#define LOCK_PIN_START GPIO_Pin_0

void Lock_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);

    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_DOWN;
    GPIO_InitStruct.GPIO_Pin   = 0xFFFF;   // PE0~PE15
    GPIO_Init(GPIOE, &GPIO_InitStruct);
}

2、单路开锁函数

void Lock_Open(uint8_t box_id)
{
    uint16_t pin = (1 << (box_id % 16));

    GPIO_SetBits(LOCK_GPIO_PORT, pin);
    Delay_ms(300);                 // 脉冲宽度
    GPIO_ResetBits(LOCK_GPIO_PORT, pin);
}

3、门磁检测

uint8_t Door_Check(uint8_t box_id)
{
    return GPIO_ReadInputDataBit(DOOR_PORT, door_pin[box_id]);
}

五、通信协议(服务器 ↔ 柜机)

1、JSON 示例

服务器下发开箱

{
  "cmd": "open_box",
  "box_id": 12,
  "order_id": "20260108123456"
}

柜机上报状态

{
  "cmd": "status",
  "box_id": 12,
  "status": "opened"
}

2、4G/WiFi 通信接口

void Net_Send(char *json)
{
    HAL_UART_Transmit(&huart3, (uint8_t*)json, strlen(json), 100);
}

六、业务主逻辑

void Task_Delivery(void)
{
    uint8_t box_id = Find_Empty_Box();

    if(box_id == 0) return;

    Generate_Order(box_id);
    Save_To_Flash(box_id);
    QRCode_Show(order_id);
    Lock_Open(box_id);
}
void Task_Pickup(char *order_id)
{
    uint8_t box_id = Find_By_Order(order_id);

    if(box_id == 0) return;

    Lock_Open(box_id);
    Clear_Box(box_id);
}

参考代码 stm32F4 快递柜的主控程序 www.youwenfan.com/contentcnv/72893.html

七、掉电保护

订单写入 SPI Flash
上电自检恢复订单
防止掉电丢件

void Save_All_Box(void)
{
    W25Q_Write((uint8_t*)BoxList, BOX_ADDR, sizeof(BoxList));
}

八、异常与安全处理

异常 处理方式
门未关 蜂鸣 + 上传告警
暴力开箱 锁定柜机
通信失败 本地缓存订单
非法扫码 拒绝并记录

九、FreeRTOS 任务划分

osThreadNew(Task_LockCtrl, NULL, &LockTask_attr);
osThreadNew(Task_Network,  NULL, &NetTask_attr);
osThreadNew(Task_UI,       NULL, &UITask_attr);
osThreadNew(Task_Monitor,  NULL, &MonTask_attr);
posted @ 2026-05-27 16:23  康帅服  阅读(17)  评论(0)    收藏  举报