上次在Linux下构建好了stm32开发平台,用的是ST官方的库,不过个人感觉人繁琐,不符合个人习惯,就打算给它进行封装一下,方便以后码代码.
===========================================================================
个人原创,转载请注明出处
http://blog.csdn.net/embbnux/article/details/18885277
博主最近在电脑上自建了博客,以后会更多的用那个了,欢迎关注访问,里面也有很多有用资源:
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;
}
}