上次在Linux下構建好了stm32開發平台,用的是ST官方的庫,不過個人感覺人繁瑣,不符合個人習慣,就打算給它進行封裝一下,方便以後碼代碼.
===========================================================================
個人原創,轉載請註明出處
http://blog.csdn.net/embbnux/article/details/18885277
博主最近在電腦上自建了部落格,以後會更多的用那個了,歡迎關注訪問,裡面也有很多有用資源:
http://blog.embbnux.net/
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; }}