本文介绍STM32CubeMX外部中断的应用
准备工作:
- STM32开发板(STM32F103C8)
- STM32CubeMx软件、 IDE: Keil软件
- STM32F1xx HAL库
- 按键管脚 PB10 PB11
- LED管脚 PA1 PA2 PA3
一、在STM32CubeMx中创建并配置
1. 新建工程
操作步骤:
(1)搜索芯片型号
(2)选择芯片
(3)创建工程
2. 设置RCC
操作步骤:
(1)点击RCC
(2)高速时钟(HSE)选择外部晶振
(3)管脚就自动配置好了
3. GPIO初始化
LED:3个GPIO_OUTPUT (输出模式)
按键:2个GPIO_EXITx(外部中断模式)
操作步骤:
(1)点击对应管脚
(2)设置对应模式
4. GPIO的各种模式设置
GPIO output level 引脚上电时初始电平设置 高/低
GPIO mode GPIO模式 推挽输出/开漏输出
GPIO Pull-up/Pull-dowm 上拉下拉设置 上拉/下拉/无上拉或下拉
Maxinum output speed 引脚速度设置 低速/中速/高速
User Label 用户标签 给引脚设置名称 如LED0
5. GPIO_EXIT的6种触发模式
GPIO_EXIT有6种触发模式,分别是:
上升沿触发外部中断
下降沿触发外部中断
上升/下降沿触发外部中断
上升沿触发外部事件
下降沿触发外部事件
上升/下降沿触发外部事件
6. GPIO_EXIT端口配置
GPIO mode GPIO模式选择下降沿触发
GPIO Pull-up/Pull-dowm 上拉下拉设置 选择上拉(键按下电平变低时触发)
User Label 用户标签 给外部中断引脚设置名称 如KEY1
7. 设置NVIC(嵌套向量中断控制器)
操作步骤:
(1)点击NVIC
(2)勾选EXIT Line 4 to 15 interrupts使能中断。外部中断线4到15都将被使能,包括了此项目用到的PB10,PB11两个脚位
8. 时钟源设置
操作步骤:
(1)点Clock Configuration标签项
(2)选择外部时钟HSE 8MHz
(3)PLL锁相环倍频6倍
(4)系统时钟来源选择为PLL
(5)设置APB1分频器为 /2
9. 项目文件设置
操作步骤:
(1)点击Project Manager标签
(2)设置项目名称
(2)设置存储路径
(4)选择所用IDE及IDE版本
生成代码的设置:
只复制用到的.C .H库文件;每个功能生成独立的.C .H文件
二、生成工程代码并在IDE中编辑代码
1. 生成工程代码
点击GENERATE CODE 创建工程,点Open Project在IDE中打开工程代码
然后就可以在stm32f1xx_it.c中看到所配置的中断服务函数,可以看到gpio的初始化分到了gpio.c里面
2. 在IDE中编辑代码
在stm32f1xx_it.c中输入代码实现外部中断功能
按下按键KEY1时,LED1、LED2、LED3脚位置1,灯灭;
按下按键KEY2时,LED1、LED2、LED3脚位置0,灯亮;
void EXTI4_15_IRQHandler(void)
{
/* USER CODE BEGIN EXTI4_15_IRQn 0 */
/* USER CODE END EXTI4_15_IRQn 0 */
/* USER CODE BEGIN EXTI4_15_IRQn 1 */
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==0)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_SET);
HAL_GPIO_EXTI_IRQHandler(KEY1_Pin); // 清除中断标志
}
if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)==0)
{
HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin,GPIO_PIN_RESET);
HAL_GPIO_EXTI_IRQHandler(KEY2_Pin); // 清除中断标志
}
//__HAL_GPIO_EXTI_CLEAR_IT(KEY1_Pin);
/* USER CODE END EXTI4_15_IRQn 1 */
}
所有自己编写的代码要放在
/* USER CODE BEGIN XXX */
/* USER CODE END XXX */
之间
3. 配置下载工具
选择下载模式,勾选下载后复位运行