江科大STM32-按键控制Led灯
·
1.遇到的问题和解决方法
1.在新建.c和.h文件的时候,注意是选择到具体文件夹
需要手动再选择一层

2.当文件的头文件报错的时候

点击魔术棒按钮,看Define和Include Paths,是否正确配置,点击ok

点击扳手按钮,再查看编码设置,点击ok,就能解决头文件报错的问题

2.按键控制流水灯
LED.c
#include "stm32f10x.h" // Device header
void LED_Init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
void LED1_ON(void){
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
void LED1_OFF(void){
GPIO_SetBits(GPIOA,GPIO_Pin_1);
}
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);
}
}
void LED2_ON(void){
GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}
void LED2_OFF(void){
GPIO_SetBits(GPIOA,GPIO_Pin_2);
}
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);
}
}
LED.h
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED1_Turn(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED2_Turn(void);
#endif
KEY.c
注意:GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
否则按键按了,灯没反应
#include "stm32f10x.h" // Device header
#include "delay.h"
void Key_init(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
}
uint8_t Key_GetNum(void){
uint8_t ret=0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);
Delay_ms(20);
ret=1;
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0){
Delay_ms(20);
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0);
Delay_ms(20);
ret=2;
}
return ret;
}
KEY.h
#ifndef __KEY_H
#define __KEY_H
void Key_init(void);
uint8_t Key_GetNum(void);
#endif
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();
}
}
//return 0;
}
修仙一途,道阻且长,共勉!
更多推荐

所有评论(0)