对STM32官方库封装一:GPIO库

来源:互联网 发布:在淘宝卖什么东西好 编辑:程序博客网 时间:2024/05/30 02:51

        上次在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 NoGPIO_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;    }}


1 0
原创粉丝点击