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分钟后自动关机
网友评论