← 返回

软件编程

系统架构

系统架构图
  • 基于FreeRTOS的多任务系统设计
  • 模块化的传感器驱动架构
  • 事件驱动的用户界面框架
  • 低功耗管理系统

核心代码示例

timer_callback.c
/* 定时器中断回调函数 - 按键处理 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static int num = 0;
    if (htim->Instance == TIM1) {
        num++;
        if(num % 50 == 0) {
            // 按键扫描
            KeyCallBack(&key2, GPIOA, GPIO_PIN_0);
            KeyCallBack(&key1, GPIOA, GPIO_PIN_1);
            KeyCallBack(&key3, GPIOA, GPIO_PIN_2);
            KeyCallBack(&key4, GPIOA, GPIO_PIN_3);    
            
            // 上键处理
            if(key1.Stute && GUIFlag == 0) {
                if(key1.PressNum == 1) {
                    Position++;
                    GoFlag = 2;
                    FinishFlag = 0;
                }
                else if(key1.isContinue && FinishFlag) {
                    GoFlag = 2;
                    Position++;
                    FinishFlag = 0;
                }
            }    
            
            // 下键处理
            if(key2.Stute && GUIFlag == 0) {
                if(key2.PressNum == 1) {
                    Position--;
                    GoFlag = 1;
                    FinishFlag = 0;
                }
                else if(key2.isContinue && FinishFlag) {
                    GoFlag = 1;
                    Position--;
                    FinishFlag = 0;
                }
            }
            
            // 位置限位
            if(Position < 0) Position = 4;
            if(Position > 4) Position = 0;
        }
    }
}

按键处理技术说明

  • 基于定时器中断的按键扫描
    • 50ms扫描间隔,避免按键抖动
    • 支持单击和连续按键检测
    • 四按键独立状态管理
  • 菜单导航控制
    • 循环菜单设计(0-4位置循环)
    • 上下键位置控制
    • 确认和返回功能实现

传感器数据采集说明

  • 串口中断接收
    • 基于HAL库的UART中断处理
    • 9字节数据帧解析
    • 自动重启接收机制
  • 数据处理
    • TVOC浓度计算(ppm)
    • 甲醛浓度计算(ppm)
    • CO2浓度计算(ppm)

关键技术实现

  • 传感器驱动:
    • I2C通信协议实现
    • 串口通信协议实现
    • 传感器数据校准算法
  • 显示驱动:
    • U8g2图形库应用
    • 自定义字体支持
    • 动画效果实现
  • 系统优化:
    • 中断优先级管理
    • 内存优化策略
    • 低功耗模式设计