STM32单片机控制LED闪烁+蜂鸣器(电路分析+代码分析)

一.电路分析

1.LED电路

(1)低电平驱动电路:PA0低电平驱动

电路图中的电阻R1作用:a.防止LED因为电流过大而烧毁;b.调节LED灯亮度

(2)高电平驱动电路:PA0高电平驱动

注:因为高电平弱驱动,低电平强驱动的规则。在很多单片机接法中大多采用第一种方法

2.蜂鸣器电路

对于功率略大的蜂鸣器,直接连接IO口会导致STM32负担过重

(1)PNP三极管驱动

基极连通PA0,低电平导通

(2)NPN三极管驱动

基极连通PA0,高电平导通

二.代码讲解

1.点亮LED

流程:

a.使用RCC开始GPIO的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

b.使用GPIO_Init函数初始化GPIO

从stm32的头文件Gpio.c中可以找到关于GPIO_Init的定义,如下:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

所以我们现在需要继续定义GPIO_InitStructure。而GPIO_InitStructure这部分还需要继续定义三个子函数,

分别为GPIO_Mode;GPIO_Pin;GPIO_Speed.

(1)GPIO_Mode

现在要寻找合适的GPIO_Mode,先右键跳转至GPIO_Mode的定义处,发现注释中“can be a value of GPIOMode_TypeDef”写道需要继续寻找对应的GPIOMode_TypeDef

所以cltr+F呼唤寻找GPIOMode_TypeDef,点击Find Next

即可找到GPIOMode_TypeDef的所有情况

所以有GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

(2)GPIO_Pin

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

(3)GPIO_Speed.

c.使用输出或者输入的函数控制GPIO口

GPIO_ResetBits(GPIOA, GPIO_Pin_0):低电平点亮LED

GPIO_SetBits(GPIOA, GPIO_Pin_0):高电平点亮LED

GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET):写入高/低电平点亮LED

2.LED流水灯

/*主循环,循环体内的代码会一直循环执行*/
	while (1)
	{
		/*使用GPIO_Write,同时设置GPIOA所有引脚的高低电平,实现LED流水灯*/
		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001,PA0引脚为低电平,其他引脚均为高电平,注意数据有按位取反
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010,PA1引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,PA2引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,PA3引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000,PA4引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000,PA5引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000,PA6引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
		GPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000,PA7引脚为低电平,其他引脚均为高电平
		Delay_ms(100);				//延时100ms
	}

3.蜂鸣器

VCC接正极,GND接负极,I/O口接入stm32上通过程序设置好的GPIO口

在电路图中,此处的三极管为PNP型。PNP三极管的基极为低电平时三极管导通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值