实验目的:
当按键按下时,让PF10引脚的LED灯亮,
当按键再次按下时,让PF10引脚的LED灯灭;
无论按下与否,PF9引脚的LED灯循环闪烁;
实验步骤:
实验程序:
/***********************************led.c*********************************/
#include "stm32f4xx.h" //在SYSTEM目录下可以找到
#include "sys.h"
void LED_Init(void){
RCC->AHB1ENR = 1<<5; //使能GPIO端口的F时钟
GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_25M,GPIO_PUPD_PU);
PFout(9) = 1;
PFout(10) = 1;
}
/***********************************led.h*********************************/
#ifndef _LED_H
#define _LED_H
void LED_Init(void);
#endif
/********************************************key.c***************************************/
#include "sys.h"
void Key_Init(void){
RCC->AHB1ENR|=1<<4; //使能PORTE时钟
//void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD);//GPIO设置函数
GPIO_Set(GPIOE,PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PU); //PE3设置上拉输入,这样的话,
//当按键没有按下时,默认电平为高;
}
/********************************************key.h***************************************/
#ifndef _KEY_H
#define _KEY_H
void Key_Init(void);
#endif
/************************************exti.c********************************/
#include "sys.h"
#include "delay.h"
#include "stm32f4xx.h"
/*
本示例的作用就是,
当按键按下时,蜂鸣器发出声音,
当按键再次按下时,蜂鸣器静音;
*/
/*
中断初始化函数:
主要是关于寄存器的相关配置
*/
void EXTI3_Init(void){
//方法一:
RCC->APB2ENR |= 1 << 14; //开启SYSCFG时钟
SYSCFG->EXTICR[0] |= 0x4 << 12;//设置IO口与中断线的映射关系;
EXTI->IMR |= 1 << 3; //开启对应中断线上的中断
EXTI->FTSR |= 1 << 3; //设置中断触发条件
//SCB和NVIC,可参考STM32F3与STM32F4系列Cortex M4内核编程手册.pdf
SCB->AIRCR |= 0x5 << 8; //设置分组
NVIC->IP[9] |= 0; //设置优先级,具体可分析MY_NVIC_Init()函数;
NVIC->ISER[0] |= 1 << 9; //使能中断;
//方法二:
/************************************
使用SYSTEM目录下提供的API来实现,
具体可参考正点原子示例
************************************/
}
void EXTI3_IRQHandler(void){
/*
此按键,在按键按下时,处理不是很到位,
有待进一步改进,主要是在连按那一个环节。
*/
delay_ms(20); //消抖
if(PEin(3) == 0){
PFout(10) = !PFout(10);
}
/*
在中断里边最后记得清中断:
*/
EXTI->PR |= 1 << 3;
}
/*************************************exti.h***********