stm32外部中断模式控制灯亮灭
文章目录
- stm32外部中断模式控制灯亮灭
- 软件版本:
- 1. 通过STMCube配置项目
- 1.1 引脚配置
- 1.2 配置SYS
- 1.3 配置RCC
- 1.4 配置GPIO
- 1.5 配置NVIC
- 1.6 时钟
- 1.7 代码创建
- 2. 通过KEil配置代码
- 2.1 添加代码
- 2.1.1打开生成的项目,打开stm32f1xx_it.c,找到EXTI9_5_IRQHandler()函数
- 2.1.2 选中HAL_GPIO_EXTI_IRQHandler,按F12跳转到stm32f1xx_hal_gpio.c,找到HAL_GPIO_EXTI_Callback()这个函数
- 2.2 编译成HEX文件
- 2.3 烧录
- 3. 运行
- 4.总结
- 5.参考资料
软件版本:
STM32CubeMX:6.6.0
KEIl:5.37.0.0
FlyMcu:0.188
硬件:
STM32F103ZET6
1. 通过STMCube配置项目
1.1 引脚配置
A4输出控制灯的亮灭,设置为GPIO_Output
A1持续输出高电平,设置同上
A7持续输出低电平,设置同上
B7模拟开关,设置为GPIO_EXTI5
1.2 配置SYS
在Pinout &Configuration 栏里,配置系统调试接口SYS
,选择 Serial Wire
1.3 配置RCC
RCC
设置,选择 HSE (外部高速时钟)为 Crystal/Ceramic Resonator
1.4 配置GPIO
选择 LED 灯引脚 PA4,设置引脚为输出模式 GPIO_Output;
选择 PB7作为外部中断的引脚,设置为与中断线 GPIO_EXTI7 连接
PA1为高电平,PA7为低电平。
将PA4的Uesr Label 改为LED,PB7的改为SWITCH
1.5 配置NVIC
1.6 时钟
1.7 代码创建
2. 通过KEil配置代码
2.1 添加代码
- 外部中断处理函数
外部中断处理逻辑与按键扫描一样,当检测到按键时, LED 状态变化。回调函数中无需处理中断标志位,是因为此项工作已经由 HAL_GPIO_EXTI_IRQHandler 完成。
2.1.1打开生成的项目,打开stm32f1xx_it.c,找到EXTI9_5_IRQHandler()函数
2.1.2 选中HAL_GPIO_EXTI_IRQHandler,按F12跳转到stm32f1xx_hal_gpio.c,找到HAL_GPIO_EXTI_Callback()这个函数
将下面代码写入HAL_GPIO_EXTI_Callback()对应位置处
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if( GPIO_Pin == SWITCH_Pin ) // 判断外部中断源
{
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻转LED状态
}
}
注意:这时会报错有些管脚未定义,要将头文件main.h中的宏定义复制到stm32f1xx_hal_gpio.c中
2.2 编译成HEX文件
2.3 烧录
3. 运行
4.总结
本次实验运用了STM外部中断模式控制LED灯亮灭,初步体会了外部中断的用法,同时也更熟悉了对STM32CubeMX和Keil5的运用。