(3)STM32使用HAL库操作外部中断——实战操作

时间:2023-03-09 09:01:26
(3)STM32使用HAL库操作外部中断——实战操作

有了上一篇的基础入门知识,使用Cube创建一个简单的外部中断就容易多了。


一、Cube配置

需求:使用PD10作为外部中断(下降沿触发)控制LED(PD12-PD14)

1.选型

STM32-F4-Discovery使用的是F407VGT6.

2.使能时钟

(3)STM32使用HAL库操作外部中断——实战操作

3.设置GPIO

PD12-PD15对应4个LED,设置为输出

(3)STM32使用HAL库操作外部中断——实战操作

使用PD10作为外部中断,于是PD10设置为GPIO_EXIT10

(3)STM32使用HAL库操作外部中断——实战操作

4.根据F4-Discovery硬件配置时钟

外部8MHz晶振,系统频率设置168(最大只能设置168,这个可随便设置)

(3)STM32使用HAL库操作外部中断——实战操作

5.配置

(3)STM32使用HAL库操作外部中断——实战操作

5.1首先配置GPIO的PD10(外部中断输入)

(3)STM32使用HAL库操作外部中断——实战操作

(3)STM32使用HAL库操作外部中断——实战操作

(3)STM32使用HAL库操作外部中断——实战操作

5.2配置GPIO的PD12-PD15

(3)STM32使用HAL库操作外部中断——实战操作

5.3配置NVIC

由于只有这一个中断,所有优先级都设置为0

(3)STM32使用HAL库操作外部中断——实战操作

6.最后生成工程就行了。

二、Keil程序

需求:外部中断触发,改变四个LED的状态。

再说一遍中断执行顺序

(1)PD10的中断服务函数

(3)STM32使用HAL库操作外部中断——实战操作

(2)中断服务函数原型

(3)STM32使用HAL库操作外部中断——实战操作

(3)中断处理函数

(3)STM32使用HAL库操作外部中断——实战操作

(4)回调函数(用户在main.c中重写)

(3)STM32使用HAL库操作外部中断——实战操作

while(1)就不要动了,目前用不到。

编译,下载,齐活。

(3)STM32使用HAL库操作外部中断——实战操作

最后再补充一点,中断初始化的问题,在mian.c的main()函数中只有下面几个初始化函数:

(3)STM32使用HAL库操作外部中断——实战操作

那么中断的初始化去哪了呢?

其实,中断初始化的代码被放置到GPIO初始化函数MX_GPIO_Init(void)里了:

(3)STM32使用HAL库操作外部中断——实战操作