一、新建工程
1. 打开 STM32CubeMX 软件,点击“新建工程”
2. 选择 MCU 和封装
3. 配置时钟
RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)
选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz
修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置
4. 配置调试模式
非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器
SYS 设置,选择 Debug 为 Serial Wire
二、EXTI外部中断
2.1 参数配置
在 System Core 中选择 GPIO 设置。
在右边图中找到按键对应引脚,选择 GPIO_EXTIx。
这里的 x 是指挂载在中断线几上,如 GPIO_EXTI0 就是挂载在中断线0上。
开启下降沿触发中断:即在 按下按键时 电平由高变为低时触发,则在 GPIO mode 中选择 External Interrupt Mode with Falling edge trigger detection
开启上升沿触发中断:即在 按下按键后松开时 电平由低变为高时触发,则在 GPIO mode 中选择 External Interrupt Mode with Rising edge trigger detection
开启下降沿上升沿都触发中断:即在 按下时触发,松开时再次触发,则在 GPIO mode 中选择 External Interrupt Mode with Rising/Falling edge trigger detection
如果硬件上已外部上拉或下拉,则在GPIO Pull-up/Pull-down 中选择 No pull-up and no pull-down 既不上拉也不下拉。
如果硬件外部没有上拉,则在GPIO Pull-up/Pull-down 中选择 Pull-up 内部上拉电阻。
配置 NVIC
中断优先级分组规则 Priority Group 默认为4个比特位,一般情况下不改。
勾选刚刚配置的外部中断线0和13,并配置抢占优先级 Preemption Priority 和响应优先级 Sub Priority。
抢占优先级,数字越小,优先级越高
若抢占优先级相同,判断子优先级,同样,数字越小,优先级越高
2.2 生成代码
输入项目名和项目路径
选择应用的 IDE 开发环境 MDK-ARM V5
点击 GENERATE CODE 生成代码
2.3 修改中断回调函数
打开 stm32f1xx_it.c 中断服务函数文件,找到 EXTI0 中断的服务函数 EXTI0_IRQHandler()
中断服务函数里面就调用了 GPIO 外部中断处理函数 HAL_GPIO_EXTI_IRQHandler()