STM32学习记录(三)————GPIO应用


前言

一个学习32单片机的小白~ 有问题评论或私信指出~


提示:以下是本篇文章正文内容,下面案例可供参考

1.LED闪烁

思路:
①打开RCC对应的GPIO时钟
②配置GPIO的结构体,配置为推挽输出,选择GPIOA_Pin_1,输出速度随意
③初始化LED为灭GPIO_ResetBits();
④主函数调用LED_Init()函数
⑤模拟delay函数
⑥主函数亮delay灭delay

//主函数代码
#include "stm32f10x.h"
#include "main.h"
#include "LED.h"

void delay_ms(uint32_t xms);

int  main()
{
	
	LED_Init();
	
	
   while(1)
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_1);
		delay_ms(1000);
		GPIO_SetBits(GPIOA,GPIO_Pin_1);
		delay_ms(1000);
	}
		 
   
}

void delay_ms(uint32_t xms)
{
	uint32_t i;
	while(xms--)
	{
		while(i--);
		{
			i = 12000;
		}
		
	}

}

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


void LED_Init(void)
{
	GPIO_InitTypeDef LED_Structure;
	//初始化时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//打开GPIOA
	
	LED_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
	LED_Structure.GPIO_Pin = GPIO_Pin_1;
	LED_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&LED_Structure);
	
}

2.蜂鸣器

1.蜂鸣器的种类

蜂鸣器是一种常用的电子发声元器件,采用直流电压供电。广泛应用于计算机,打印机,报警器,电子玩具,汽车电子设备灯等产品中常见的蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。

2.蜂鸣器的控制方式

有源蜂鸣器:内部有震荡源,只要通电即可自动发出固定频率的声音。(频率固定无法控制音色)

无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。(可改变频率来改变音色)

3.区分蜂鸣器

从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有黑胶密封。

无源蜂鸣器底部可以看到电路板,两种蜂鸣器都标注有正负极。

GPIO控制蜂鸣器

软件设计流程

  • 初始化系统
    • 初始化GPIO外设时钟
    • 初始化蜂鸣器的引脚
  • 输出电平控制蜂鸣器
//主函数代码
#include "stm32f10x.h"
#include "main.h"
#include "buzzer.h"

void delay_ms(uint32_t xms);

int  main()
{
	
	LED_Init();
	BUZZER_Init();
	
   while(1)
	{
		GPIO_ResetBits(GPIOB,GPIO_Pin_12);
		delay_ms(1000);
		GPIO_SetBits(GPIOB,GPIO_Pin_12);
		delay_ms(1000);
	}
		 
   
}

void delay_ms(uint32_t xms)
{
	uint32_t i;
	while(xms--)
	{
		while(i--);
		{
			i = 12000;
		}
		
	}

}

//BUZZER模块代码
#include "buzzer.h"
#include "stm32f10x.h"                  // Device header
void BUZZER_Init(void)
{
	GPIO_InitTypeDef BUZZER_Structure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	BUZZER_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
	BUZZER_Structure.GPIO_Pin = GPIO_Pin_12;
	BUZZER_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB,&BUZZER_Structure);

}

按键基础知识

1.深入理解GPIO输入

GPIO的特点:

  • 具有内部上拉或下拉的功能
  • 可以使用外部下拉或上拉

按键控制LED灯

软件设计流程

  • 初始化系统
    • 初始化GPIO外设时钟
    • 初始化按键和LED的引脚
  • 检测按键输入电平来控制LED灯
//主函数
#include "stm32f10x.h"
#include "main.h"
#include "LED.h"
#include "Key.h"


uint8_t KeyNum;
int  main()
{
	
	LED_Init();
	Key_Init();
	
   while(1)
	{
		KeyNum = Key_GetKeyNum();
		if(KeyNum == 1)
		{
			LED_ON();
		}
		if(KeyNum == 2)
		{
			LED_OFF();
		}
	}
		 
   
}

//LED模块
#include "led.h"
#include "stm32f10x.h"                  // Device header


void LED_Init(void)
{
	GPIO_InitTypeDef LED_Structure;
	//初始化时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//打开GPIOA
	
	LED_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
	LED_Structure.GPIO_Pin = GPIO_Pin_1;
	LED_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOA,&LED_Structure);
	
}

void LED_ON(void)
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}

void LED_OFF(void)
{
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
}

//Key模块代码
#include "Key.h"
#include "stm32f10x.h"                  // Device header

void delay_ms(uint32_t xms)
{
	uint32_t i;
	while(xms--)
	{
		while(i--);
		{
			i = 12000;
		}
		
	}

}

void Key_Init(void)
{
	GPIO_InitTypeDef KEY_Structure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	
	KEY_Structure.GPIO_Mode = GPIO_Mode_IPU;
	KEY_Structure.GPIO_Pin = GPIO_Pin_0;
	KEY_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&KEY_Structure);
	
	KEY_Structure.GPIO_Mode = GPIO_Mode_IPU;
	KEY_Structure.GPIO_Pin = GPIO_Pin_13;
	KEY_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOC,&KEY_Structure);
}

uint8_t Key_GetKeyNum(void)
{
	u8 Keynum = 0;
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0)
	{
		delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0);
		delay_ms(20);
		Keynum = 1;
	}
	if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)
	{
		delay_ms(20);
		while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0);
		delay_ms(20);
		Keynum = 2;
	}
	return Keynum;
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于STM32GPIO输出实验,点亮色LED,您可以按照以下步骤进行操作: 1. 首先,您需要在STM32的开发环境中创建一个新的工程。 2. 在工程中,您需要包含相应的头文件,如"stm32f10x.h"。 3. 接下来,配置相应的引脚为输出模式。假设红色LED连接到GPIOA的Pin0引脚,绿色LED连接到GPIOA的Pin1引脚,蓝色LED连接到GPIOA的Pin2引脚,您可以使用以下代码进行配置: ``` GPIO_InitTypeDef GPIO_InitStructure; // 使能GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置红色LED引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置绿色LED引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置蓝色LED引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ``` 4. 现在,您可以使用相应的寄存器来控制LED的点亮和熄灭。例如,要点亮红色LED,可以使用以下代码: ``` GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将Pin0引脚置高,点亮红色LED ``` 要熄灭红色LED,可以使用以下代码: ``` GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 将Pin0引脚置低,熄灭红色LED ``` 同样的方法,您可以控制绿色和蓝色LED的点亮和熄灭。 这就是点亮色LED的基本步骤。希望对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值