firstly,we have to get led light up and light off program STM32 F103ZET6 light on and off led
secondly we init key,like below
key.h:
#ifndef KEY_MMT_H
#define KEY_MMT_H
#include <stm32f10x.h>
#define KEY_ON 1
#define KEY_OFF 0
#define RCC_KEY_PERIPH RCC_APB2Periph_GPIOA
typedef struct KeyStuct{
GPIO_TypeDef * gpiox;
uint16_t pin;
}KeyInitType;
void key_mmt_init(KeyInitType *key);
uint8_t key_mmt_scan(KeyInitType *key);
#endif
key.c :
#include "key.h"
#include "../Led/led.h"
void key_mmt_init(KeyInitType *key){
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_KEY_PERIPH,ENABLE);//init clock of key->gpiox
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStruct.GPIO_Pin = key->pin;
GPIO_Init(key->gpiox,&GPIO_InitStruct);
}
uint8_t key_mmt_scan(KeyInitType *key){
if(GPIO_ReadInputDataBit(key->gpiox,key->pin)==KEY_ON){
while(GPIO_ReadInputDataBit(key->gpiox,key->pin)==KEY_ON); //wait for key up
return KEY_ON;
}else{
return KEY_OFF;
}
}
main.c:
#include <stm32f10x.h>
#include "Led/led.h"
#include "key/key.h"
int main(){
uint8_t flag =0; // flag ==0 for light off,flag==1 for light on
led_mmt_init();
KeyInitType key; // key init data type ,inf key.h
key.gpiox = GPIOA; // key1 linked to GPIOA pin0
key.pin = GPIO_Pin_0; // key1 linked to GPIOA pin0
key_mmt_init(&key);
while(1){
if(key_mmt_scan(&key)==KEY_ON){
if(!flag){
LED_ON();
flag = 1;
}else{
LED_OFF();
flag=0;
}
}
}
}