美文网首页
STM32入门项目笔记

STM32入门项目笔记

作者: Hamiltonian | 来源:发表于2023-07-06 11:21 被阅读0次

    Keil5----新建项目文件( .c文件 和 .h文件)
    https://blog.csdn.net/MQ0522/article/details/128147014

    find . -name ".git" | xargs rm -Rf
    

    腾讯云文档写好处理逻辑,一项一项的勾
    单片机项目可以分为以下ABC三种处理架构:
    A.可以采用先标记状态,后根据状态处理事件【状态机模式】
    detectEvents():标记全部事件【GPIO事件、电池事件、开始治疗事件】
    processEvents():处理全部事件【GPIO事件、电池事件、开始治疗事件】
    B.根据不同的功能一边标记一边处理,
    detectProcessGPIOEvent():处理按钮事件
    detectProcessBatteryEvents():监测和处理电池电量
    processOtherEvents():处理其他事件
    C.初始化的时候传入钩子函数(传入函数指针),实现一体化处理

    1.初始化并且设定系统定时器,SysTick_Config(48000 / systickScale);
    2.SysTick_Handler(void) 记录系统时间,处理外部按键点击detectGPIOEvent,处理其他系统事件【ADC电压监测,蜂鸣器工作,3分钟停止工作,低电压指示灯工作状态 】,
    注意电量监测,打印等耗时操作,每秒执行一次即可。通过

    define DebugMode 来条件编译提高性能,否则会导致定时器中断延时,系统时间不准确。

    注意蜂鸣器打开后一定要关闭电路,否则会持续耗电
    uint32_t maxUint32_t = 4294967290;
    ///记录上次治疗的时间节点
    uint32_t lastestTreatmentTime;
    ///记录上次Beep的时间
    uint32_t lastestBeepTime;
    ///工作时常3分钟
    int treatmentDurationInMS = 180 * 1000;

    3.detectProcessGPIOEvent【处理按钮事件】
    A.处理按钮按下,启动事件
    a.key_cnt 按钮按下事件【通常单位1ms】
    b.key_cnt_threshold消抖时间【通常10ms】
    c.key_lock_flag避免重复触发
    d.isCharging【可选:充电的时候不触发启动】
    e.batteryState【可选:电量过低的时候不触发启动】
    B.处理充电口插入监测
    1.unplug_usbc_turn_off_blink_led_lock_flag【拔出USB时,如果LED指示灯还亮着,关闭LED指示灯,做个flag】
    2.BlinkSystickGap * 2【不知道为啥 需要 *2】
    3.treatmentOff【可选:停止治疗】
    4.拔出USB时,关闭电源,独立看门狗喂狗
    4.电量监测:
    enum BatteryState{
    Full = 0,Ok,Low,TooLow
    };

    4.detectProcessBatteryEvents【监测和处理电池电量】
    a.电量低,治疗时橙色灯闪烁
    b.电量正常,治疗时绿灯常亮
    c.电量过低,直接关机

    5.processOtherEvents【处理其他事件】
    a.产品使用10分钟后自动关机

    相关文章

      网友评论

          本文标题:STM32入门项目笔记

          本文链接:https://www.haomeiwen.com/subject/djyludtx.html