前言
为了熟悉使用proteus相关操作并结合HAL库进行代码编写,本文介绍通过外部中断控制LED亮灭,以及自己在探索阶段出现的一些问题与相关解决资料。部分基础操作与上一篇Proteus基础操作介绍基础部分介绍相同,本文将略去。如有表述不妥之处,还望指正。
Cube MX配置
SYS、RCC、Clock Configuration部分配置不再赘述
GPIO
PA1、PA2设置中断EXIT,下降沿Falling Edge,上拉电阻(Pull up)
PA4、PA5连接两个LED
NVIC
开启中断,如果不需要用到HAL-Delay等优先级会发生冲突的函数,则不需要设置此处优先级。
Keil5 代码编写
main.h
宏定义待设置端口位
/* Private defines -----------------------------------------------------------*/
/* USER CODE BEGIN Private defines */
#define key1_GPIO_Pin GPIO_PIN_1
#define key2_GPIO_Pin GPIO_PIN_2
/* USER CODE END Private defines */
gpio.c
/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
switch(GPIO_Pin)
{
case GPIO_PIN_1://进入PA1按键触发的中断
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_4);break;//翻转PA4电平,LED由亮变灭或反之
case GPIO_PIN_2://进入PA2按键触发的中断
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);break;//翻转PA5电平,LED由亮变灭或反之
default:break;
}
}
/* USER CODE END 2 */
proteus仿真
原理图如下
按下第一个开关,D1灭
再按一次:重新D1亮起。
另一个按键也能实现同样的功能。