您的位置:首页 > 运维架构

stm32—GIOP固件库输入输出(+点亮LED+按键检测)

2020-03-01 08:12 232 查看

bsp_key.h

#ifndef __BSP_KEY_H
#define __BSP_KEY_H

#include "stm32f10x.h"
#include "bsp_led.h"

#define	KEY_K1_GPIO_Pin			GPIO_Pin_0/*引脚*/
#define	KEY_K1_GPIO_PORT		GPIOA/*端口*/
#define KEY_K1_GPIO_CLK			RCC_APB2Periph_GPIOA/*时钟*/

#define	KEY_K2_GPIO_Pin			GPIO_Pin_13/*引脚*/
#define	KEY_K2_GPIO_PORT		GPIOC
#define KEY_K2_GPIO_CLK			RCC_APB2Periph_GPIOC

#define KEY_ON		1
#define KEY_OFF		0

void KEY_GPIO_Config(GPIO_TypeDef *GPIOx ,uint16_t GPIO_PIN ,uint32_t GPIO_CLK);//
/*									端口				引脚			时钟*/
void Key_Exercice (GPIO_TypeDef *LED_GPIOx ,uint16_t LED_GPIO_PIN ,uint32_t LED_GPIO_CLK ,GPIO_TypeDef *KEY_GPIOx ,uint16_t KEY_GPIO_PIN ,uint32_t KEY_GPIO_CLK);
/*									端口				引脚					时钟						端口				引脚				时钟		*/
uint8_t Key_Scan(GPIO_TypeDef *GPIOx ,uint16_t GPIO_Pin);/*KEYÊäÈë¼ì²â*/
/*							端口				引脚*/

#endif /*__BSP_KEY_H*/

bsp_led.h

#ifndef __BSP_KEY_H
#define __BSP_KEY_H

#include "stm32f10x.h"
#include "bsp_led.h"

#define	KEY_K1_GPIO_Pin			GPIO_Pin_0//引脚
#define	KEY_K1_GPIO_PORT		GPIOA//端口
#define KEY_K1_GPIO_CLK			RCC_APB2Periph_GPIOA//时钟

#define	KEY_K2_GPIO_Pin			GPIO_Pin_13//引脚
#define	KEY_K2_GPIO_PORT		GPIOC//端口
#define KEY_K2_GPIO_CLK			RCC_APB2Periph_GPIOC//时钟

#define KEY_ON		1
#define KEY_OFF		0

void KEY_GPIO_Config(GPIO_TypeDef *GPIOx ,uint16_t GPIO_PIN ,uint32_t GPIO_CLK);//
//																	端口							引脚							时钟
void Key_Exercice (GPIO_TypeDef *LED_GPIOx ,uint16_t LED_GPIO_PIN ,uint32_t LED_GPIO_CLK ,GPIO_TypeDef *KEY_GPIOx ,uint16_t KEY_GPIO_PIN ,uint32_t KEY_GPIO_CLK);
//									端口					引脚					时钟					端口					引脚					时钟
uint8_t Key_Scan(GPIO_TypeDef *GPIOx ,uint16_t GPIO_Pin);//KEYÊäÈë¼ì²â
//								端口			引脚

#endif /*__BSP_KEY_H*/

bsp_key.c

//bsp : board support packge
#include "bsp_led.h"

void LED_GPIO_Config(GPIO_TypeDef *LED_GPIOx ,uint16_t LED_GPIO_PIN ,uint32_t LED_GPIO_CLK)//
//									端口						引脚				时钟
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
RCC_APB2PeriphClockCmd(LED_GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = LED_GPIO_PIN;
GPIO_Init(LED_GPIOx,&GPIO_InitStruct);
}

void Delay( uint32_t count)
{
for(;count!=0;count--);
}

void LED_LIGHT_EXCERSICE(void)
{
LED_GPIO_Config(LED_G_GPIO_PORT,LED_G_GPIO_Pin,LED_G_GPIO_CLK); //初始化
Delay(0xfffff);
GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_Pin);
Delay(0xfffff);
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_Pin);
Delay(0xfffff);

LED_GPIO_Config(LED_R_GPIO_PORT,LED_R_GPIO_Pin,LED_R_GPIO_CLK); //初始化
Delay(0xfffff);
GPIO_SetBits(LED_R_GPIO_PORT,LED_R_GPIO_Pin);
Delay(0xfffff);
GPIO_ResetBits(LED_R_GPIO_PORT,LED_R_GPIO_Pin);
Delay(0xfffff);

LED_GPIO_Config(LED_B_GPIO_PORT,LED_B_GPIO_Pin,LED_B_GPIO_CLK); //初始化
Delay(0xfffff);
GPIO_SetBits(LED_B_GPIO_PORT,LED_B_GPIO_Pin);
Delay(0xfffff);
GPIO_ResetBits(LED_B_GPIO_PORT,LED_B_GPIO_Pin);
Delay(0xfffff);

}

bsp_key.c

/***********************按键检测***********************/

#include "bsp_key.h"
#include "bsp_led.h"

void KEY_GPIO_Config(GPIO_TypeDef *GPIOx ,uint16_t GPIO_PIN ,uint32_t GPIO_CLK)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
RCC_APB2PeriphClockCmd(GPIO_CLK, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_PIN;
GPIO_Init( GPIOx ,&GPIO_InitStruct);
}
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;
}
}

void Key_Exercice (GPIO_TypeDef *LED_GPIOx ,uint16_t LED_GPIO_PIN ,uint32_t LED_GPIO_CLK ,GPIO_TypeDef *KEY_GPIOx ,uint16_t KEY_GPIO_PIN ,uint32_t KEY_GPIO_CLK)
{
LED_GPIO_Config(LED_GPIOx,LED_GPIO_PIN,LED_GPIO_CLK);//初始化
KEY_GPIO_Config(KEY_GPIOx,KEY_GPIO_PIN,KEY_GPIO_CLK);//初始化
if (Key_Scan(KEY_GPIOx,KEY_GPIO_PIN) == KEY_ON )
{
if(LED_GPIO_PIN == LED_G_GPIO_Pin)//当LED引脚GREEN
{
LED_G_TOGGLE;
}
else if(LED_GPIO_PIN == LED_R_GPIO_Pin)//当LED引脚为RED
{
LED_R_TOGGLE;
}
else if(LED_GPIO_PIN == LED_B_GPIO_Pin)//当LED引脚为BLUE
{
LED_B_TOGGLE;
}
}

}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
听说有人想当我的添狗 发布了5 篇原创文章 · 获赞 0 · 访问量 168 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: