【嵌入式】STM32学习(4)——点亮LED灯(库函数版本)
点灯LED灯一、GPIO库函数介绍1、初始化函数(1个)2、读取输入电平函数(2个)3、读取输出电平函数(2个)4、设置输出电平函数(4个)二、硬件连接三、点亮LED灯1、三个步骤:2、点亮一、GPIO库函数介绍操作IO口之前必须要引入的源文件和头文件为:头文件:stm32f10x_gpio.h源文件:stm32f10x_gpio.c对于调用方式不清晰的函数均可以先选中,右键Go To Defin
点灯LED灯
一、GPIO库函数介绍
操作IO口之前必须要引入的源文件和头文件为:
- 头文件:
stm32f10x_gpio.h - 源文件:
stm32f10x_gpio.c
对于调用方式不清晰的函数均可以先选中,右键Go To Definition 查看相关内容。
1、初始化函数(1个)
void GPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);
作用:初始化一个或多个IO口(同一组)的工作方式和速度。 主要操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器。
参数一GPIOx:GPIOA——GPIOG
参数二GPIO_InitStruct(结构体变量,名称任意起):包括GPIO_Pin、GPIO_Mode、GPIO_Speed。
typedef struct
{
uint16_t GPIO_Pin;//指定要初始化的IO口
GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
GPIOMode_TypeDef GPIO_Mode;//设置工作模式,8种中的一种
}GPIO_InitTypeDef;
初始换函数示例:
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
//指定结构体成员变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED0→PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHZ
//根据设定参数初始化GPIOB.5
GPIO_Init(GPIOB,&GPIO_InitStructure);
2、读取输入电平函数(2个)
- 读取某个GPIO的输入电平(操作GPIOx_IDR寄存器)
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
例如:
uint8_t GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA.5的输入电平
- 读取某组GPIO的输入电平(操作GPIOx_IDR寄存器)
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
例如:
GPIO_ReadInputData(GPIOA);//读取GPIO组所有IO口的输入电平
3、读取输出电平函数(2个)
- 读取某个GPIO的输出电平(操作GPIOx_ODR寄存器)
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
例如:
uint8_t GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5);//读取GPIOA.5的输出电平
- 读取某组GPIO的输出电平(操作GPIOx_ODR寄存器)
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
例如:
GPIO_ReadOutputData(GPIOA);//读取GPIO组所有IO口的输出电平
4、设置输出电平函数(4个)
- 设置某个IO口输出为高电平(1)(操作BSRR寄存器)
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- 设置某个IO口输出为低电平(0)(操作BRR寄存器)
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
- 设置IO口输出电平(不常用)
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
二、硬件连接
IO口输出高电平,LED灭;输出低电平,LED点亮。(1灭0亮)
GPIO的输出方式需要设置为推挽输出。 推挽输出既可以输出高电平,也可以输出低电平。输出高电平时,电流输出到负载,理解成推,输出低电平时,负载电流流向芯片,理解为拉,即挽。而开漏输出只能输出低电平,如果需要输出高电平,则需要外接上拉电阻,且开漏输出具有“线与”功能,一个为低,全部为低,多用于I2C和SMBUS总线。
三、点亮LED灯
1、三个步骤:
- 操作IO口之前,使能IO口时钟。不同的IO组,调用的时钟使能函数不一样。这里调用的是
Void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); - 初始化IO口模式。调用函数
GPIO_Init()。 - 初始IO口,输出高低电平。
GPIO_SetBits();GPIO_ResetBits();
2、点亮
首先再建立一个文件夹HardWare,并添加LED相关的头文件和源文件。
led.h
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
led.c
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);//使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE ,ENABLE);//使能GPIOE时钟
//指定结构体成员变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED0→PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHZ
GPIO_Init(GPIOB,&GPIO_InitStructure);//根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOB,GPIO_Pin_5);//初始默认LED熄灭,设置GPIOB.5输出为高电平
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;//LED0→PE.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHZ
GPIO_Init(GPIOE,&GPIO_InitStructure);//根据设定参数初始化GPIOE.5
GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置GPIOE.5输出为高电平
}
main.c
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main()
{
delay_init();//定义在SYSTEM文件夹里
LED_Init();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);//置1,熄灭LED灯
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);//通过延时简单达到闪烁的效果
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//置0,点亮LED灯
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
}
}
注意:(否则可能有警告)
- 主函数大括号前后要空一行(最后一行要回车)
- .h文件定义时#endif也要前后空一行
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)