外部中断学习之控制灯、计数
1.cube配置:
在之前的oled上加一个按键、led灯的引脚。
按键配置为exti(最后一个就对啦),led灯配置为output。
在gpio外设的NVIC的EXTI LINE[ : ] interrupt 勾选然后改为15
中断就配置好了。
然后生成代码
2.代码编写:
中断回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == B11_EXTI_Pin )
{
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11)==GPIO_PIN_SET)
{HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_2);
// count++;
}
else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_11)==GPIO_PIN_RESET)
{HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_2);
// HAL_GPIO_WritePin(GPIOA ,GPIO_PIN_2,SET);
//count++;
}
count++;
}
}
While循环里的显示:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
OLED_ShowString(1,5,"count:");
OLED_ShowNum(2,12,countget(),2); //采取定义一个函数countget来获取实时次数
}
/* USER CODE END 3 */
}
Ps:countget是自己编写的返回计数值函数,记得在main.h里面添加,不然会报错。
uint32_t countget(void)
{
return count;
}
3.效果展示: