【N32L40X】学习笔记02-gpio输入实例

GPIO 使用实例

  1. 该函数库的目的就是在统一的敌方配置gpio,将配置的不同项放置在一个结构体内部
  2. 没得io口使用一个枚举来定义一个gpio pin的别名

gpio输入实例

key.c

#include 
#include "key/bsp_key.h"
#include "./key/bsp_lib_input.h"	
static key_t keys[KEY_NUM]={
	
{GPIOA,GPIO_PIN_5,RCC_APB2_PERIPH_GPIOA},
{GPIOA,GPIO_PIN_6,RCC_APB2_PERIPH_GPIOA},
{GPIOA,GPIO_PIN_7,RCC_APB2_PERIPH_GPIOA},

};
/*
	key初始化
*/
void bsp_key_init (key_t *pkey)
{
    GPIO_InitType GPIO_InitStructure;

    /* Check the parameters */
    assert_param(IS_GPIO_ALL_PERIPH(pkey->gpiox));

   
    RCC_EnableAPB2PeriphClk(pkey->gpio_rcc, ENABLE);
   

    /* Configure the GPIO pin */
    if (pkey->pin <= GPIO_PIN_ALL)
    {
        GPIO_InitStruct(&GPIO_InitStructure);
        GPIO_InitStructure.Pin        = pkey->pin;
        GPIO_InitStructure.GPIO_Current = GPIO_DC_12mA;
        GPIO_InitStructure.GPIO_Pull    = GPIO_No_Pull;
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Input;
        GPIO_InitPeripheral(pkey->gpiox, &GPIO_InitStructure);
    }
}
/*
	key 按键状态读取
*/
uint8_t bsp_read_key(int id)
{
	key_t *pkey=NULL;
	if(KEY_NUM>id)
	{
		pkey = keys+id;
		return GPIO_ReadInputDataBit(pkey->gpiox,pkey->pin);
	}
	
	return 0xff;
}


static button btns[KEY_NUM];
void fn_button_down_handle(uint8_t btn_id);

/*
	一键初始化所有LED
*/
void bsp_keys_init(void)
{
	for(int i=0;i<KEY_NUM;i++)
	{
		bsp_key_init(keys+i);
		register_button(btns+i,i,Bit_RESET,bsp_read_key,BUTTON_DOWM,fn_button_down_handle);
	}
}

void key_process(uint32_t tick_ms)
{
	buttons_process(tick_ms);
}



key.h

#ifndef _BSP_KEY_H_
#define _BSP_KEY_H_

#include 
#include "n32l40x.h"



typedef enum
{
	KEY1,
	KEY2,
	KEY3,
	KEY_NUM//key数量
}en_key_t;


typedef struct
{
	GPIO_Module* gpiox;
	uint16_t pin;
	uint32_t gpio_rcc;
}key_t;

/*
	一键初始化所有按键
*/
void bsp_keys_init(void);
/*
	按键状态读取
*/
uint8_t bsp_read_key(int id);

void key_process(uint32_t tick_ms);

#endif


你可能感兴趣的:(N32L40X,N32L40X,gpio输入库,库)