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