库函数介绍
1,初始化函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
作用:初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的有时候有设置BSRR或者BRR寄存器
例如:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitTypeDef.GPIO_Pin = GPIO_Pin_5;//LED0-->PB.5 端口配置
GPIO_InitTypeDef.GPIO_Mode = GPIO_Mode_OUT_PP;//推挽输出
GPIO_InitTypeDef.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIO,&GPIO_InitStructure);//根据设定参数初始化GPIO.5
2,2个读取输入电平函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
作用:读取某个GPIO的输入电平。(实际操作的是GPIOx_IDR寄存器)
例如:GPIO_ReadInputData(GPIOA_Pin_5)//读取GPIOA.5组中所以IO口输入电平
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
作用:读取某组GPIO的输入电平。(实际操作的是GPIOx_IDR寄存器)
例如:GPIO_ReadInputData(GPIOA)//读取GPIOA组中所以IO口输入电平
步骤:
一、文件创建:
文件封装学习:布尔博客 – 高校青年技术社区
1,用keil5打开工程模板文件,然后添加project items,命名为HAREWARE
2,然后打开工程模板文件夹创建HAREWARE文件夹(名字任意),再在里面创建LED文件夹。
3,下一步创建LED.c和lLED.h文件,并保存在LED文件夹中
4,将led.c添加入HAREWARE中,同时将路径包含MKD。(步骤自上而下)
二、写代码:
(1)led.c的代码:
#include "led.h"
#include "stm32f10x.h"//引用顶层头文件,否则函数不可用
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//GPIOE
//或者使用或运算,则可写为:
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
//初始化GPIOB时钟
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStrue);
GPIO_SetBits(GPIOB,GPIO_Pin_5);//输出Pin5高电平
//初始化GPIOE时钟
GPIO_InitStrue.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出模式
GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStrue);
GPIO_SetBits(GPIOE,GPIO_Pin_5);//输出Pin5高电平
}
(2)led.h代码:
#ifndef __LED_H //避免重复引用
#define __LED_H
void LED_Init(void);//LED初始化函数,无入口参数
#endif
(3)main.c代码:
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
delay_init();//调用延时函数
LED_Init();
while(1){
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);//设置延时500ms
//设置低电平
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);//设置延时500ms
}
}
文章转载自:http://blog.qmgua.com/?id=148