刚差点被一个四脚开关弄晕了,才发现是自己stm的板子跟面包板弄得不牢固,我都吐了,浪费我半个小时
工程结构:
LED.h:
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED1_Turn(void);
void LED2_Turn(void);
#endif
LED.c
#include "stm32f10x.h" // Device header
//led初始化
void LED_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//ctrl alt kongge
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1 | GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
}
//led1亮
void LED1_ON(void){
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
//led1灭
void LED1_OFF(void){
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
//led2亮
void LED2_ON(void){
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
//led2灭
void LED2_OFF(void){
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
//led1状态反转
void LED1_Turn(void){
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1)==0){
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}else{
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
}
//led2状态反转
void LED2_Turn(void){
if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_2)==0){
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}else{
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
}
Key.h
#ifndef __KEY_H
#define __KEY_H
void Key_Init(void);
uint8_t Key_GetNum(void);
#endif
Key.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
//按键初始化
void Key_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
//获取按键的值
uint8_t Key_GetNum(void){
uint8_t KeyNum=0;
if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1))==0){
Delay_ms(20);
while((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1))==0);
Delay_ms(20);
KeyNum=1;
}
if((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11))==0){
Delay_ms(20);
while((GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11))==0);
Delay_ms(20);
KeyNum=2;
}
return KeyNum;
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
uint8_t KeyNum;
int main(void)
{
LED_Init();
Key_Init();
while(1){
KeyNum=Key_GetNum();
if(KeyNum==1){
LED1_Turn();
}
if(KeyNum==2){
LED2_Turn();
}
}
}