新日记
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.
 

4.1 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);
		}

now_io 	       ----               ------	-----
					        |  _____ |           |
											----     -----
last_real        ____ |  _____ | _		  |

last_io           ---- 				------     -----
						    |  _____ |			|

after_filter     ----			  ------	-----
                            |  _____ | 			|

							-下降沿-           -上升沿-
原因:lastreal 没变,导致after——filter没变,从而导致仅仅变化一次。


image-20220331171159926

image-20220331170533223

image-20220331171317924