You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.7 KiB
3.7 KiB
任务安排
任务
今日任务:
阅读整体代码
时间消耗
以一个小时为单位
时间 | 做了什么 |
---|---|
9-12 | 阅读整体代码 |
13-14 | 理解systick实现 |
总结
---------------------------------------------------------------------------------------------------------
main---->unused_gpio_init()
---->gpio_init() ----->led_gpio_init() --->GPIO_SET(a,22,!,state)
-->GPIOwrite(gpio_pin##pin,! state ? 1:0 ) //原理图为低电平点亮
------>key_gpio_init()
---->t16_pa4_init()---->设置pwm输出
---->按键初始化zkey_init(&key_module) ----> key_module 定义为zkey_module_t 类型,初始化利用s_keys,onkey完成初始化。z_module_t中的void (*onkey)(zkey_t *key,zkey_state_t key_state),为函数指针,在s_key中完成初始化,s_keys[0] = "time key",port_gpio_get_timer_key_state
s_keys[1] = "gears key",port_gpio_get_gears_key_state
s_keys[2] = "interval key",..........
s_keys[3] = "switch key", ...........
按键初始化理解:skey_t初始化的函数仅仅是对每个按键调用的,处理的是按键状态,key_module中的是整个按键模块使用,处理的是按键逻辑。
例如,一个返回值为bool量的函数指针,结构中初始化为指向所需函数,详细见图1.
starting up--->开机标志,定时关闭,-->update_ozone_work_level更新工作等级。
等级低:关闭风扇,占空比0,频率1
等级中:
等级高:设置频率,根据频率计算占空比。打开rgb灯。
是否间隔工作(逻辑待看)。。
---->初始化完毕,开机。
----->轮询do_it_each_ms,每1ms进入中断,全局变量加1。-->通过端口port_haspassed_ms得知已经过去的时间,如果大于设定time。就把比较值更新。((超时问题请见下图,,,))
while(1)
{
debug灯轮询;200ms
key轮询
{
port_gpio_get_timer_key_state <-------->each->get_key_state();
判断是否是当前状态是否和上次相同,如果相同并且保持一个周期, 那么进行滤波处理。(其中,上次last_io和after_filter已经初始化完成,为上电读取状态。)
之后送入滤波处理,得到上升,下降,保持);
滤波处理----》如果当前状态不是上个状态,说明状态改变。如果当前状态是1,说明之前没按下,但经历了上升沿,进行初始化。
不然对从1-》0是下降沿,初始化按键。
都不是的话,当前状态为持续按下按键。
以上都送入onkeyh
}
}
g_systick_time = 0; //全局时间变量
void sys_tick_irq{
g_systick++;
}
void get_systick(return g_systick);
int delay_ms(uint32_t time)
{
now_time = get_systick();
if(now_time > time)
return nowtime-time;
}
void doit_each_ms(int time)
{
int has_passed = delay_ms(time);
if(haspassed > time)
}
intmain
{
doit_eahcms(200);
}