1; Hardware interface;
There are 4 buttons on the mini version of stm32, namely KEY_0, KEY_1, (internal high level, falling edge trigger, connected to PC(5), PA(15)), KEY_UP (internal ground, rising edge Trigger, connect to PA(0)), RESET (reset button);
2;key.c function implementation;
在这里插入代码片
#include "key.h"
#include "stm32f10x.h"
#include "delay.h"
void KEY_Init()
{
//开启AC时钟;
RCC->APB2ENR |=1<<2;
RCC->APB2ENR |=1<<4;
//端口配置及初始化
GPIOC->CRL &=0XFF0FFFFF;
GPIOC->CRL |=0X00300000;
GPIOC->IDR |=1<<5;
//
GPIOA->CRH &=0X0FFFFFFF;
GPIOA->CRH |=0X30000000;
GPIOA->IDR |=1<<15;
}
//由于按键按下可分为两种,即一直按单次触发和一直按连续触发,故加入参数mode,为0表示单次触发,为1表示连续触发;
u8 key(u8 mode)
{
static u8 key_up=1;
if(mode==1)
key_up=1;
if(key_up && KEY_1==0)
{
delay_ms(10);
key_up=0;
if(KEY_1==0)
return 1;
}
else if(KEY_1!=0)
key_up=1;
return 0;
}
3:key.h
在这里插入代码片
#ifndef _KEY_H_
#define _KEY_H_
#include "sys.h"
#define KEY_0 PCin(5)
#define KEY_1 PAin(15)
#define KEY_UP PAin(0)
void KEY_Init(void);
u8 key(u8 mode);
#endif
4. Implementation of the main function
在这里插入代码片
int main(void)
{
Stm32_Clock_Init(9);//PLL
LED_Init();//LED初始化
delay_init(72);//延时函数时钟
KEY_Init();//按键配置
while(1)
{
if(key(0)==1)
{
LED0=0;
delay_ms(100);
}
LED0=1;
}
}
Please correct me if you have any questions, you can call me if you don’t understand;