按下按键时灯光变弱,但还亮着,求大神解答一下,谢谢
这是代码:
mian.c文件
#include "stm32f10x.h"
#include "./led/bsp_led.h"
#include "./key/bsp_key.h"
void delay(uint32_t count)
{
for(; count!=0; count--);
}
int main(void)
{
/* 在程序来到main函数这里的时候,系统时钟已经配置成72M */
/* LED接口初始化 */
LED_GPIO_Config();
/* 初始化按键 */
KEY_GPIO_Config();
while(1)
{
if( KEY_Scan(KEY1_GPIO_PORT, KEY1_GPIO_PIN) == KEY_ON )
{
/* LED1闪烁一次 TOGGLE */
LED1_TOGGLE;
}
if( KEY_Scan(KEY2_GPIO_PORT, KEY2_GPIO_PIN) == KEY_ON )
{
/* LED2闪烁一次 TOGGLE */
LED2_TOGGLE;
}
}
}
bsp_key.c文件
#include "./key/bsp_key.h"
void KEY_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitTStruct;
/* 第一步:打开外设时钟 */
RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK|KEY2_GPIO_CLK, ENABLE);
/* 第二步:配置外设相关的结构体 */
GPIO_InitTStruct.GPIO_Pin = KEY1_GPIO_PIN;
GPIO_InitTStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
/* 第三步:调用外设初始化函数,把配置好的结构体成员写到寄存器里面 */
GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitTStruct);
/* 第二个按键 */
GPIO_InitTStruct.GPIO_Pin = KEY2_GPIO_PIN;
/* 第三步:调用外设初始化函数,把配置好的结构体成员写到寄存器里面 */
GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitTStruct);
}
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
if( GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON )
{
while(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)
return KEY_ON;
}
else return KEY_OFF;
}
bsp_key.h文件
#ifndef __BSP_KEY_H
#define __BSP_KEY_H
#include "stm32f10x.h"
#define KEY_ON 1
#define KEY_OFF 0
#define KEY1_GPIO_CLK RCC_APB2Periph_GPIOA
#define KEY1_GPIO_PORT GPIOA
#define KEY1_GPIO_PIN GPIO_Pin_0
#define KEY2_GPIO_CLK RCC_APB2Periph_GPIOC
#define KEY2_GPIO_PORT GPIOC
#define KEY2_GPIO_PIN GPIO_Pin_13
void KEY_GPIO_Config(void);
uint8_t KEY_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
#endif /* __BSP_KEY_H */
bsp_led.h文件
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "stm32f10x.h"
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED1_GPIO_PORT GPIOB
#define LED1_GPIO_PIN GPIO_Pin_0
#define LED2_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED2_GPIO_PORT GPIOB
#define LED2_GPIO_PIN GPIO_Pin_1
#define LED3_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED3_GPIO_PORT GPIOB
#define LED3_GPIO_PIN GPIO_Pin_5
// C语言知识点,^:两个数异或(^),相同的话为0,不同的话为1
#define digitalTOGGLE(p,i) {p->ODR ^=i;}
#define LED1_TOGGLE digitalTOGGLE(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED2_TOGGLE digitalTOGGLE(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED3_TOGGLE digitalTOGGLE(LED3_GPIO_PORT,LED3_GPIO_PIN)
void LED_GPIO_Config(void);
#endif /* __BSP_LED_H *
bsp_led.c文件
#include "./led/bsp_led.h"
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitTStruct;
/* 第一步:打开外设时钟 */
RCC_APB2PeriphClockCmd(LED1_GPIO_CLK | LED2_GPIO_CLK | LED3_GPIO_CLK, ENABLE);
/* 第二步:配置外设初始化结构体 */
GPIO_InitTStruct.GPIO_Pin = LED1_GPIO_PIN;
GPIO_InitTStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitTStruct.GPIO_Speed = GPIO_Speed_10MHz;
/* 第三步:调用外设初始化函数,把配置好的结构体成员写到寄存器里面 */
GPIO_Init(LED1_GPIO_PORT, &GPIO_InitTStruct);
/* 关闭所有led1灯 */
GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
// led 2 蓝
GPIO_InitTStruct.GPIO_Pin =LED2_GPIO_PIN;
GPIO_Init(LED2_GPIO_PORT, &GPIO_InitTStruct);
GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN);
// led 3 红
GPIO_InitTStruct.GPIO_Pin = LED3_GPIO_PIN;
/* 第三步:调用外设初始化函数,把配置好的结构体成员写到寄存器里面 */
GPIO_Init(LED3_GPIO_PORT, &GPIO_InitTStruct);
GPIO_SetBits(LED3_GPIO_PORT, LED3_GPIO_PIN);
} |