STM32F103ZET6之外部中断实验
前言
对于STM32的学习可分为3个版本。
1.寄存器版本
2.库函数版本
3.HAL库版本
由于个人原因,选择库函数版本来进行STM32的学习。
提示:软件安装等问题,不进行讲解!!!
一、原理图
二、外部中断配置步骤
三、程序源码
1.exti.h
代码如下:
#ifndef __EXTI_H
#define __EXTI_H
void EXTIX_Init(void);//步骤1-5
#endif
2.exti.c
代码如下:
#include "exti.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "beep.h"
#include "delay.h"
void EXTIX_Init()
{
EXTI_InitTypeDef EXTI_Initstr;
NVIC_InitTypeDef NVIC_Initstr;
KEY_Init();//初始化IO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//开启IO口时钟复用
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);//设置IO口与中断线的映射关系
EXTI_Initstr.EXTI_Line=EXTI_Line4;
EXTI_Initstr.EXTI_LineCmd=ENABLE;
EXTI_Initstr.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_Initstr.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_Init(&EXTI_Initstr);//初始化线上中断,设置触发条件等
NVIC_Initstr.NVIC_IRQChannel=EXTI4_IRQn;
NVIC_Initstr.NVIC_IRQChannelCmd=ENABLE;
NVIC_Initstr.NVIC_IRQChannelPreemptionPriority=2;
NVIC_Initstr.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVIC_Initstr);//配置中断分组
}
void EXTI4_IRQHandler(void)
{
delay_ms(10);
if(KEY0==0)
{
LED1=!LED1;
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
3.main.c
代码如下:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "beep.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init();
LED_Init();
Beep_Init();
KEY_Init();
uart_init(115200);
EXTIX_Init();
while(1)
{
printf("OK\r\n");
delay_ms(1000);
}
}
四、实验结果
当按下KEY0按键,控制LED1亮灭。(中断服务函数)
总结
时间过得真快,大三上学期已经过去,即使放寒假了,但是还是感觉自己每天特别忙,一是要学习stm32,二就是要准备考研了,感觉大三和大一,大二真的不一样了,半点打篮球,打游戏的欲望都没有了,生怕自己的时间流逝一般,总之希望2022年考研能够成功上岸!加油