嵌入式单片机基础篇(二)之stm32F1控制LED指示灯以及蜂鸣器详解

嵌入式单片机基础篇(二)

stm32F1控制LED指示灯以及蜂鸣器详解

下面以stm32f103zet6以及51单片机为例,讲解单片机基础知识LED指示灯以及蜂鸣器的控制

第一部分:stm32

1、首先我们先介绍LED指示灯以及蜂鸣器的电路图以及控制原理,电路图如下:
蜂鸣器电路图如下:
嵌入式单片机基础篇(二)之stm32F1控制LED指示灯以及蜂鸣器详解_第1张图片
LED原理图如下:
嵌入式单片机基础篇(二)之stm32F1控制LED指示灯以及蜂鸣器详解_第2张图片
由上图可以分析出蜂鸣器高电平有效(发声),LED指示灯低电平有效(发光)。
2、硬件部分介绍完了之后我们就可以写代码控制蜂鸣器发声或者LED指示灯发光了
(1)我们先介绍LED以及蜂鸣器的初始化函数:

void LED_Init(void)
{
     
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟
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;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_5); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED1-->PE.5 推挽输出
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE,GPIO_Pin_5); /PE.5 输出高
}

该函数的功能就是用来实现配置 PB5和 PE5 为推挽输出,传输速度为50MHz,并将PB5和 PE5引脚置为高电平状态。***注意:***在配置 STM32 外设的时候,任何时候都要先使能该外设的时钟。GPIO 是挂载在 APB2 总线上的外设,在固件库中对挂载在 APB2 总线上的外设时钟使能是通过函数 RCC_APB2PeriphClockCmd()来实现的。代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
这行代码的作用是使能 APB2 总线上的 GPIOB 和 GPIOE 的时钟。
***说明:***因为 GPIOB 和 GPIOE 的 IO 口的初始化参数都是设置在结构体变量GPIO_InitStructure 中,因为两个 IO 口的模式和速度都一样,所以我们只用初始化一次,在
GPIOE.5 的初始化的时候就不需要再重复初始化速度和模式了。最后一行代码:
GPIO_SetBits(GPIOE,GPIO_Pin_5);的作用是在初始化中将 GPIOE.5 输出设置为高。
***如何设置某个引脚的高低电平状态?***用以下代码:
GPIO_SetBits(GPIOB, GPIO_Pin_5); //设置 GPIOB.5 输出 1,也就是高电平
GPIO_ResetBits (GPIOB, GPIO_Pin_5); //设置 GPIOB.5 输出 0,也就是低电平
讲完以上的知识我们再看蜂鸣器的初始化代码就一目了然了:

void BEEP_Init(void)
{
     
 GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 //使能 GPIOB 端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //BEEP-->GPIOB.8 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为 50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure); //根据参数初始化 GPIOB.8
 GPIO_ResetBits(GPIOB,GPIO_Pin_8); //输出 0,关闭蜂鸣器输出
}

我们来总结一下如何初始化stm32的一个引脚:


1、使能端口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
2、设置某个具体引脚(PB5)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOB, &GPIO_InitStructure);
3、设置IO口具体模式(一共8种,举例为推挽输出)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
4、设置IO口的传输速度(50Hz)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
5、设置引脚的电平状态
GPIO_SetBits(GPIOB, GPIO_Pin_5); //设置 GPIOB.5 输出 1,也就是高电平
GPIO_ResetBits (GPIOB, GPIO_Pin_5); //设置 GPIOB.5 输出 0,也就是低电平

第二部分:51单片机

51单片机的引脚状态设置:
P1^2=0; //将p1.2引脚置低电平
P1^2=1;//将p1.2引脚置高电平

你可能感兴趣的:(嵌入式,单片机,单片机,stm32)