事件的概念
- STM32上许许多多的外设,是通过内部信号来协同工作的。这个信号,可以理解为事件。比如一个定时器(TIM),当我们使用定时器来计数的时候,怎么知道定时器已经计数完毕?这时就往往通过一个“计数完成事件”来告知(系统/用户)计数已经完成。
- 有些事件是可见的,有些事件是不可见的。事件的可不可见,具体体现在寄存器里可不可以查到这些事件的标志。那如果我们想使用这些事件的时候,该怎么做?查询事件标志吗?在STM32中,绝大多数事件是不可见的,但是事件几乎都与中断功能绑定在一起。所以通常我们会开启中断的功能,来使用相应的事件。
- 事件---->中断事件---->事件
EXTI外设
EXTI外设可以大致概括为两个功能:
-捕获外部输入等事件。
-生成EXTI中断等中断请求。
什么是NVIC?
STM32通过中断控制器NVIC进行中断的管理,NVIC属于Cortex内核的器件,不可屏蔽中断(NMI)和外部中断都由它来处理,但是SYSTICK不是由NVIC控制的
使用CubeMX配置中断
芯片型号stm32f103c8t6
1.配置debug
2.开启外部的高速时钟
3.进入时钟树,配置时钟
4.配置GPIOA0为EXTI0
5.这里配置不同的检测模式
6.勾选使能
7.最后配置project manager,生成代码
主要生成这么一块代码
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/*Configure GPIO pin : PA0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* EXTI interrupt init*/
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}