STM32 LED灯点亮

GPIO的相关库函数

1.void GPIO_DeInit(GPIO_TypeDef* GPIOx);

调用函数后,所指定的GPIO口外设回复位。

2.void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
用结构体函数初始化指定IO口。

	GPIO_InitTypeDef GPIO_InitStructure;
    //结构体成员参数
	GPIO_InitStructure.GPIO_Mode=    //选择工作模式;
	GPIO_InitStructure.GPIO_Pin=     //选择引脚;
	GPIO_InitStructure.GPIO_Speed=   //输出速度设置;
	GPIO_Init(GPIOA,&GPIO_InitStructure);

工作模式

GPIO_Mode_AIN = 0x00;           //模拟输入
GPIO_Mode_IN_FLOATING = 0x04;   //浮空输入
GPIO_Mode_IPD = 0x28;           //下拉输入
GPIO_Mode_IPU = 0x48;           //上拉输入
GPIO_Mode_Out_OD = 0x14;        //开漏输出
GPIO_Mode_Out_PP = 0x10;       //推挽输出
GPIO_Mode_AF_OD = 0x1C;         //复用开漏
GPIO_Mode_AF_PP = 0x18;         //复用推挽  

3. void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

给结构体变量赋默认值。

4.void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

将指定端口设置为高电平。

5.void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

将指定端口设置为低电平。

6.void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

根据第三个参数的值设置指定端口。

7.void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

可同时对16个端口进行写入操作。

8.uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

用来读取输入寄存器某一段端口的输入值,返回值代表端口的电平高低。

9.uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

用来读取整个寄存器的输入值,返回值为一个16位的数据,每一位代表对应端口值。

10.uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

在输出模式下用来读取输出寄存器指定端口的输出值。

11.uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

用来读取整个输出寄存器每一位的值。

RCC时钟函数

在使用外设时都需要打开对应的时钟才能进行正常的工作

常见的三个外设时钟控制函数

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

void RCC_APB1PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

void RCC_AHBPeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

用于使能对应外设的时钟

点亮LED灯

一.LED灯闪烁

接线图

LED灯正极接电源正,负极接IO口,则输出低电平点亮  

代码部分 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使能GPIOA时钟
	
	GPIO_InitTypeDef GPIO_InitStructure;        //定义结构体名称
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;    //推挽输出
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;        //指定Pin0口
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;    //输出速度50Hz
	GPIO_Init(GPIOA,&GPIO_InitStructure);        //注意需要取结构体的地址
	
	
	while(1)
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_0);        //A0口输出低电平
		Delay_ms(500);                            //延时500ms
		GPIO_SetBits(GPIOA,GPIO_Pin_0);          //A0口输出高电平
		Delay_ms(500);
	}
}

二.LED流水灯

接线图

LED灯正极接电源正,负极接IO口,则输出低电平点亮 

代码部分

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使能GPIOA时钟
	
	GPIO_InitTypeDef GPIO_InitStructure;        //定义结构体名称
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;    //推挽输出
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;        //指定GPIOA所有IO口
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;    //输出速度50Hz
	GPIO_Init(GPIOA,&GPIO_InitStructure);        //注意需要取结构体的地址
	
	
	while(1)
	{
		GPIO_Write(GPIOA,~0x0001);		//0000 0000 0000 0001
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0002);		//0000 0000 0000 0010
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0004);		//0000 0000 0000 0100
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0008);		//0000 0000 0000 1000
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0010);		//0000 0000 0001 0000
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0020);		//0000 0000 0010 0000
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0040);		//0000 0000 0100 0000
		Delay_ms(200);
		GPIO_Write(GPIOA,~0x0080);		//0000 0000 1000 0000
		Delay_ms(200);
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值