六、使用库函数点亮一个LED

一、LED模块硬件电路

 

二、GPIO库函数介绍

(一)GPIO外设的库文件

stm32f10x_gpio.c、stm32f10x_gpio.h

(二)GPIO常用库函数

1、初始化函数

void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)

功能:初始化一个或多个IO口(同一组端口)的工作模式、输出速度即GPIO的2个配置寄存器

	GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//选择你要设置的IO口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置推挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置传输速率

	GPIO_Init(GPIOC,&GPIO_InitStructure);//初始化GPIO

可以一次对多个管脚进行初始化,前提必须是它们的配置模式需一样。比如:

	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;

2、设置管脚输出电平函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:设置某个IO口为高电平(可同时设置同一端口的多个IO)。底层是通过配置BSRR寄存器

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:设置某个IO口为低电平(可同时设置同一端口的多个IO)。底层为配置BSRR寄存器

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//写一个引脚

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//写全部引脚

功能:设置为输出电平,很少用

3、读取管脚输入电平函数

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);

功能:读取端口中的某个管脚输入电平。底层是通过读取IDR寄存器。

uint8_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

功能:读取某组端口的输入电平。底层是通过读取IDR寄存器。

4、读取管脚输出电平函数

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:读取端口中的某个管脚输出电平。底层是通过读取ODR寄存器。

uint8_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

功能:读取某组端口的输出电平。底层是通过读取ODR寄存器。

(三)使能GPIO时钟函数

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

不同的外设调用的时钟使能函数可能不一样,因为不同的外设挂接的总线可能不一样,GPIO挂接在APB2总线上

例,使能GPIOC端口时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

 

三、使用库函数编写点亮LED程序

在编写程序之间要先配置模板库,模板库配置参见五、STM32固件库介绍及库函数模板创建_并不傻的袍子-CSDN博客

新建APP文件夹用于存放led.h和led.c文件,在工程中新建目录APP,将led.c文件添加进目录,再在魔术棒配置->C/C++中将led.h的路径添加进来

在led.h文件中,添加:

#ifndef _led_H
#define _led_H

#include "stm32f10x.h"

//定义LED灯的引脚时钟
#define LED_PORT_RCC RCC_APB2Periph_GPIOC
//定义LED灯的引脚
#define LED_PIN (GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7)
//定义LED灯的端口名称
#define LED_PORT GPIOC

//LED灯初始化函数
void LED_Init(void);

#endif

在led.c文件中添加

#include "led.h"

void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义引脚配置的结构体变量
	
	RCC_APB2PeriphClockCmd(LED_PORT_RCC,ENABLE);//开启GPIOC的时钟
	
	GPIO_InitStructure.GPIO_Pin=LED_PIN;
	//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//选择引脚为GPIO的0号引脚
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置引脚为推挽输出
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置时钟频率为50MHz
	GPIO_Init(LED_PORT,&GPIO_InitStructure);//调用引脚配置函数
	
	//将GPIOC的所有引脚设置为高电平
	GPIO_SetBits(LED_PORT,LED_PIN);
	
}

在main.c函数中添加

#include "stm32f10x.h"
#include "led.h"

int main()
{
	LED_Init();
	
	while(1)
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_0);
	}
}

编译执行,将生成的hex文件下载到普中STM32f103ZET6开发板上,即可点亮第一个LED灯。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

并不傻的狍子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值