对STM32官方库封装一:GPIO库

时间:2022-09-20 17:52:06

        上次在Linux下构建好了stm32开发平台,用的是ST官方的库,不过个人感觉人繁琐,不符合个人习惯,就打算给它进行封装一下,方便以后码代码.

===========================================================================

个人原创,转载请注明出处

      http://blog.csdn.net/embbnux/article/details/18885277

博主最近在电脑上自建了博客,以后会更多的用那个了,欢迎关注访问,里面也有很多有用资源:

        http://www.embbnux.com/

    

     GPIO库:


头文件gpio.h:

        

//-------------------------------------------------------------------------*
// 文件名: gpio.h                                                          *
// 说  明: gpio驱动头文件  
// Writor : Embbnux JI                                                *
//------------------------------------------------------------------

#ifndef __GPIO_H__
#define __GPIO_H__

#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"



//-------------------------------------------------------------------------*
    //函数名: gpio_rcc                                                        *
    //功  能: 初始化gpio 时钟                                                       * 
    //参  数: RCC_APB2Periph:端口时钟
    //            RCC_APB2Periph_GPIOx                                                      
    //        NewState:初始状态,ENABLE=使能                                  *
    //返  回: 无                                                               *
    //说  明: 无    
void gpio_rcc(uint32_t RCC_APB2Periph, FunctionalState NewState);

//-------------------------------------------------------------------------*
    //函数名: gpio_init                                                        *
    //功  能: 初始化gpio                                                       * 
    //参  数: GPIOx:端口名                                                      *
    //        index:指定端口引脚  16表示全选                                                *
    //        dir:引脚方向,0=输入,1=输出                                       * 
    //        data:初始状态,0=低电平,1=高电平                                  *
    //返  回: 无                                                               *
    //说  明: 无    
void gpio_init (GPIO_TypeDef* GPIOx, int index, int dir,int data);

 //-------------------------------------------------------------------------* 
    //函数名: gpio_ctrl                                                        *
    //功  能: 设置引脚状态                                                     *
    //参  数: GPIOx:端口名                                                      *
    //        index:指定端口引脚                                               *
    //        data: 状态,0=低电平,1=高电平                                     *
    //返  回: 无                                                               *
    //说  明: 无                                                               *
    //-------------------------------------------------------------------------*
void gpio_ctrl (GPIO_TypeDef* GPIOx, int index, int data);
 



#endif 

C文件gpio.c:

//-------------------------------------------------------------------------*
// 文件名: gpio.c                                                          *
// 说  明: gpio驱动头文件  
// Writor : Embbnux JI                                                *
//------------------------------------------------------------------
//-----------------------------------------------------------------------*

#include "gpio.h"     //包含gpio头文件

//-------------------------------------------------------------------------*
    //函数名: gpio_rcc                                                        *
    //功  能: 初始化gpio 时钟                                                       * 
    //参  数: RCC_APB2Periph:端口时钟
    //            RCC_APB2Periph_GPIOx                                                      
    //        NewState:初始状态,ENABLE=使能                                  *
    //返  回: 无                                                               *
    //说  明: 无    
void gpio_rcc(uint32_t RCC_APB2Periph, FunctionalState NewState){
     RCC_APB2PeriphClockCmd(RCC_APB2Periph,NewState);
}
//-------------------------------------------------------------------------*
    //函数名: gpio_init                                                        *
    //功  能: 初始化gpio                                                       * 
    //参  数: GPIOx:端口名                                                      *
    //        index:指定端口引脚 16表示全选                                              *
    //        dir:引脚方向,0=输入,1=输出                                       * 
    //        data:初始状态,0=低电平,1=高电平                                  *
    //返  回: 无                                                               *
    //说  明: 无  
void gpio_init (GPIO_TypeDef* GPIOx, int index, int dir,int data){
        uint16_t gpio_pinx[17] =
{GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3,
 GPIO_Pin_4,GPIO_Pin_5,GPIO_Pin_6,GPIO_Pin_7,
 GPIO_Pin_8,GPIO_Pin_9,GPIO_Pin_10,GPIO_Pin_11,
 GPIO_Pin_12,GPIO_Pin_13,GPIO_Pin_14,GPIO_Pin_15,GPIO_Pin_All
};
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = gpio_pinx[index]; // GPIO No
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; // slow rise time
    switch(dir){
    case 1:	
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // push-pull output
     break;
    case 0:	
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
     break;
    }	
    GPIO_Init(GPIOx, &GPIO_InitStructure); // GPIOC init
}

 //-------------------------------------------------------------------------* 
    //函数名: gpio_ctrl                                                        *
    //功  能: 设置引脚状态                                                     *
    //参  数: GPIOx:端口名                                                      *
    //        index:指定端口引脚                                               *
    //        data: 状态,0=低电平,1=高电平                                     *
    //返  回: 无                                                               *
    //说  明: 无                                                               *
    //-------------------------------------------------------------------------*
void gpio_ctrl (GPIO_TypeDef* GPIOx, int index, int data){
   uint16_t gpio_pinx[17] =
{GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3,
 GPIO_Pin_4,GPIO_Pin_5,GPIO_Pin_6,GPIO_Pin_7,
 GPIO_Pin_8,GPIO_Pin_9,GPIO_Pin_10,GPIO_Pin_11,
 GPIO_Pin_12,GPIO_Pin_13,GPIO_Pin_14,GPIO_Pin_15,GPIO_Pin_All
};
    switch(data){
    case 1:
      GPIO_WriteBit(GPIOx,gpio_pinx[index],Bit_SET);
      break;
    case 0:
      GPIO_WriteBit(GPIOx,gpio_pinx[index],Bit_RESET);
      break;
    }
}