STM32核心板:LED闪烁、LED流水灯、蜂鸣器

操作STM32的GPIO总共需要三个步骤

1、使用RCC开启GPIO的时钟

2、使用GPIO_Init函数初始化GPIO

3、使用输出或输入的函数控制GPIO口

        RCC_APB2PeriphClockCmd 外设时钟控制函数

用于使能或禁用STM32系列芯片的APB2总线上的外设时钟,参数有要操作的外设和状态。

在操作外设之前必须先使能时钟

LED闪烁

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{
	//使能外设时钟,状态开启
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA的时钟
	
	//GPIO初始化
	GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
	//在推挽输出模式下高低电平都有驱动能力
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO模式,赋值为推挽输出
	//使用PA0号引脚点亮LED
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//GPIO引脚,赋值为第0号引脚
	GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOA,&GPIO_InitStructure);//将赋值后的结构体变量地址传递给GPIO_Init函数
	
	//循环
	while(1)
	{
		//设置PA0引脚的高点电平,实现LED闪烁
		
		//方法一:GPIO_ResetBits设置低电平,GPIO_SetBits设置高电平
		GPIO_ResetBits(GPIOA,GPIO_Pin_0);	//将PA0引脚设置为低电平 亮
		Delay_ms(500); 								//延时500毫秒
		GPIO_SetBits(GPIOA,GPIO_Pin_0);		//将PA0引脚设置为高电平 灭
		Delay_ms(500);
		
		//方法二:GPIO_WriteBit设置低/高电平,由Bit_RESET/Bit_SET指定
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);	//将PA0引脚设置为低电平 亮
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);	//将PA0引脚设置为高电平 灭
		Delay_ms(500);
		
		//方法三:GPIO_WriteBit设置低/高电平,由数据0/1指定,数据需要强制类型转换为(BitAction)
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);	
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);	
		Delay_ms(500);
		
	}

LED流水灯

#include "stm32f10x.h"                  // Device header
#include "delay.h"
int main(void)
{
	//使能时钟,开启GPIOA的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	//GPIO初始化
	GPIO_InitTypeDef GPIO_InitStructure;	//定义结构体变量
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出
	//使用PA0...PA7号引脚作为LED流水灯引脚
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;		//GPIO引脚,赋值为所有引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//GPIO速度,赋值为50MHz
	
	
	GPIO_Init(GPIOA,&GPIO_InitStructure);	//将赋值后的结构体变量地址传递给GPIO_Init函
	
	//主循环
	while(1)
	{
		//使用GPIO_Write,同时设置GPIOA所有引脚的高低电平,实现LED流水灯
		GPIO_Write(GPIOA,~0x0001);  //按位取反转换为二进制的值 1111 1111 1111 1110,PA0引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0002);	//按位取反转换为二进制的值 1111 1111 1111 1101,PA1引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0004);	//按位取反转换为二进制的值 1111 1111 1111 1011,PA2引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0008);	//按位取反转换为二进制的值 1111 1111 1111 0111,PA3引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0010);	//按位取反转换为二进制的值 1111 1111 1110 1111,PA4引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0020);	//按位取反转换为二进制的值 1111 1111 1101 1111,PA5引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0040);	//按位取反转换为二进制的值 1111 1111 1011 1111,PA6引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0080);	//按位取反转换为二进制的值 1111 1111 0111 1111,PA7引脚为低电平,其他引脚均为高电平
			Delay_ms(100);				//延时100ms
	}
}

蜂鸣器

#include "stm32f10x.h"                  // Device header
#include "delay.h"
int main(void)
{
	因为蜂鸣器用的是PB12号引脚 使能时钟,开启GPIOB的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	//GPIO初始化
	GPIO_InitTypeDef GPIO_InitStructure;				//定义结构体变量
	//列出结构体的成员并赋值
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; 	//GPIO模式,赋值为推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;			//GPIO引脚,赋值为第12号引脚
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//GPIO速度,赋值为50MHz
	
	GPIO_Init(GPIOB,&GPIO_InitStructure);			//将赋值后的结构体变量地址传递给GPIO_Init函数
	
	//主循环体
	while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);	//将PB12引脚设置为低电平,蜂鸣器鸣响
		Delay_ms(100);								//延时100ms
		GPIO_SetBits(GPIOB,GPIO_Pin_12);	//将PB12引脚设置为高电平,蜂鸣器停止
		Delay_ms(100);								//延时100ms
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);	//将PB12引脚设置为低电平,蜂鸣器鸣响
		Delay_ms(100);								//延时100ms
		GPIO_SetBits(GPIOB,GPIO_Pin_12);	//将PB12引脚设置为高电平,蜂鸣器停止
		Delay_ms(700);								//延时700ms
		
	}
}

GPIO有八种工作模式

  GPIO_Mode_AIN = 0x0,             //AIN(Analog IN)是模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,    //IN_FLOATING 是浮空输入
  GPIO_Mode_IPD = 0x28,            //IPD(IN Pull Down) 下拉输入
  GPIO_Mode_IPU = 0x48,    /        /IPU(IN Pull Up) 上拉输入
  GPIO_Mode_Out_OD = 0x14,        //Out_OD(Out Open Drain)是开漏输出
  //在开漏输出模式下,高电平没有驱动能力,低电平有驱动能力
  //开漏输出高电平相当于高阻态,没有驱动能力,低电平有驱动能力
  
  GPIO_Mode_Out_PP = 0x10,        //Out_PP(Out Push Pull) 是推挽输出
  //在推挽模式下高低电平都有驱动能力
  
  GPIO_Mode_AF_OD = 0x1C,        //AF_OD(Atl Open Drain)是复用开漏
  GPIO_Mode_AF_PP = 0x18        //AF_PP(Atl Push Pull) 是复用推挽  
 点灯用的是推挽输出,即GPIO_Mode_Out_PP 

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lmh.s

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

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

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

打赏作者

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

抵扣说明:

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

余额充值