GPIO_Init(GPIOA, &GPIO_InitStruct);
//设置IO口与中断线的映射关系。
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
EXTI_InitStruct.EXTI_Line = EXTI_Line0; //中断线0
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling; //下降触发
EXTI_InitStruct.EXTI_LineCmd= ENABLE; //中断使能
//初始化线上中断,设置触发条件等。
EXTI_Init(&EXTI_InitStruct);
NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; //中断通道,可在stm32f4xx.h文件当中查找
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1; //抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; //响应优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //通道使能
//配置中断分组(NVIC),并使能中断。
NVIC_Init(&NVIC_InitStruct);
}
void delays(int n)
{
int i,j;
for(i=0; i< n; i++)
for(j=0; j< 30000; j++);
}
/***************************************************************
1、中断服务函数是满足条件后,CPU自行执行的函数不需要主动调用
2、中断服务函数是不能传递值与返回值
3、STM32的中断服务函数名可在startup_stm32f40_41xxx.s中查找
****************************************************************/
//编写中断服务函数
void EXTI0_IRQHandler(void)
{
//判断标志位是否1
if(EXTI_GetITStatus(EXTI_Line0) == SET)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
//延时一段时间
delays(15);
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
GPIO_ToggleBits(GPIOF, GPIO_Pin_9);
}
}
}
//清空中断线0
EXTI_ClearITPendingBit(EXTI_Line0);
}
main.c
#include 'stm32f4xx.h'
#include 'led.h'
#include 'key.h'
void delay(int n)
{
int i,j;
for(i=0; i< n; i++)
for(j=0; j< 30000; j++);
}
int main(void)
{
unsigned char count = 0;
Key_Init();
Led_Init();
while(1)
{
//判断按键1是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
//大约延时15ms 起到消抖作用
delay(15);
//判断按键1是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
{
//等待按键1松开
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET);
//灯1状态变更
GPIO_ToggleBits(GPIOF, GPIO_Pin_9);
}
}
//判断按键2是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == Bit_RESET)
{
//大约延时15ms 起到消抖作用
delay(15);
//判断按键2是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == Bit_RESET)
{
//等待按键2松开
while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == Bit_RESET);
//灯2状态变更
GPIO_ToggleBits(GPIOF, GPIO_Pin_10);
}
}
//判断按键3是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == Bit_RESET)
{
//大约延时15ms 起到消抖作用
delay(15);
//判断按键3是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == Bit_RESET)
{
//等待按键3松开
while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3) == Bit_RESET);
//灯3状态变更
GPIO_ToggleBits(GPIOE, GPIO_Pin_13);
}
}
//判断按键4是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4) == Bit_RESET)
{
//大约延时15ms 起到消抖作用
delay(15);
//判断按键4是否按下 按下为低电平
if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4) == Bit_RESET)
{
//等待按键4松开
while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_4) == Bit_RESET);
//灯4状态变更
GPIO_ToggleBits(GPIOE, GPIO_Pin_14);
}
}
}
return 0;
}
作业
#ifndef __BEEP_H
#define __BEEP_H
#include 'stm32f4xx.h'
void Beep_Init(void);
#endif
#include 'beep.h'
/************************************
引脚说明
Beep -- PF8
************************************/
void Beep_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
//使能GPIOF组时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; //引脚8
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN; //xia la
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz; //速度
GPIO_Init(GPIOF, &GPIO_InitStruct);
}
#include 'stm32f4xx.h'
#include 'beep.h'
void delay(int n)
{
int i,j;
for(i=0; i< n; i++)
for(j=0; j< 30000; j++);
}
int main(void)
{
Beep_Init();
while(1)
{
GPIO_ResetBits(GPIOF, GPIO_Pin_8);
delay(1000);
GPIO_SetBits(GPIOF, GPIO_Pin_8);
delay(1000);
}
return 0;
}
上一篇:频率测量方法及STM32微控制器代码示例介绍
下一篇:基于RT-Thread与STM32F407的温湿度天气时钟设计案例
推荐阅读最新更新时间:2024-11-05 08:30
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BD49K56G-TL 的参考设计
- LTM8053IY 从同一输入源供电以获得更多输出电流的典型应用电路
- LT1950 的典型应用 - 具有辅助升压转换器的单开关 PWM 控制器
- ADP2503-4.5-EVALZ,用于 ADP2503ACPZ-4.5-R7、0.6 A、4.5V 降压升压转换器的评估板
- esp32core
- CY8C4128LQI-BL563 4100_BLE PSoC 可编程片上系统的典型应用
- LTC2970,具有外部反馈电阻器的 DC/DC 转换器的应用电路
- 电路使用具有两个 1:1 绕组的电感器产生双极输出
- DEV-15794,用于 Raspberry Pi 的 SparkFun Qwiic SHIM 开发套件
- NCS214RSQT2GEVB:电流检测放大器