配置
这个是引脚配置
然后是时钟配置(分频和arr)
别忘了这个
编程(初始化)
这个真的很容易忘记
1 HAL_TIM_Base_Start_IT(&htim3);
编程(中断)
.h文件中需要记忆结构体的声明
1 #ifndef _interrupt_H_ 2 #define _interrupt_H_ 3 4 #include "main.h" 5 #include "stdbool.h" 6 7 struct keys 8 { 9 bool key_now; 10 uint8_t key_flag; 11 bool key_single; 12 }; 13 14 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim); 15 16 #endif
.c文件中编写中断回调函数(至少需要记忆函数名称)
1 #include "interrupt.h" 2 3 struct keys key[4]={0,0,0}; 4 5 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 6 { 7 if(htim->Instance==TIM3) 8 { 9 key[0].key_now = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0); 10 key[1].key_now = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1); 11 key[2].key_now = HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2); 12 key[3].key_now = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0); 13 14 for(uint8_t i=0;i<4;i++) 15 { 16 switch(key[i].key_flag) 17 { 18 case 0: 19 { 20 if(key[i].key_now==0) 21 { 22 key[i].key_flag = 1; 23 } 24 } 25 break; 26 case 1: 27 { 28 if(key[i].key_now==0) 29 { 30 key[i].key_flag = 2; 31 key[i].key_single = 1; 32 } 33 else 34 { 35 key[i].key_flag = 0; 36 } 37 } 38 break; 39 case 2: 40 { 41 if(key[i].key_now==1) 42 { 43 key[i].key_flag = 0; 44 } 45 } 46 break; 47 } 48 } 49 } 50 }
应用
变量声明
1 extern struct keys key[4]; 2 bool led_sta = 1; 3 void led_prc(void);
变量中的函数书写(LED_Disp的书写可以看led部分),led_prc()这个函数可以让灯进行切换点亮
1 void led_prc(void) 2 { 3 if(key[0].key_single==1) 4 { 5 if(led_sta) 6 { 7 LED_Disp(0x01); 8 } 9 else 10 { 11 LED_Disp(0x02); 12 } 13 led_sta = !led_sta; 14 key[0].key_single = 0; 15 } 16 }
标签:HAL,led,KEY,void,嵌入式,蓝桥,TIM,key,GPIO From: https://www.cnblogs.com/Euphonium611/p/key_key611.html