STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习GPIO通用输入输出口,包含两部分,第一小节主要学习GPIO的输出,第二小节是写三个简单的程序进行练习,分别是LED闪烁、LED流水灯、蜂鸣器等;第三小节是学习GPIO输入,第四小节是写两个简单的程序进行练习,分别是按键控制LED和光敏传感器控制蜂鸣器;
本小节主要是对上一节学习的GPIO输出知识进行实战练习,编写三个程序进行练习,分别实现LED闪烁、LED流水灯、蜂鸣器等,并附上程序源码;

文章目录

  • 一、本节目标
    • LED闪烁
  • 二、搭建面包板电路
  • 三、程序源码
    • 3.1 相关库函数简介
      • 3.1.1 直接查看.h和.c文件
      • 3.1.2 查看用户手册
      • 3.1.3 网上搜索
    • 3.2 LED闪烁源码

一、本节目标

LED闪烁

现象:面包板上的有一个LED在不断地闪烁,如下图所示:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第1张图片

二、搭建面包板电路

每个代码的接线图都放在了工程文件夹的第一个文件夹里,
STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第2张图片
比如LED闪烁的接线图如下所示:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第3张图片
STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第4张图片

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第5张图片

接线过程如下:
拿出面包板,把正极的红线朝上,注意别拿反了,然后拿出STM32最小系统板,按照上图的位置,上面和右边留两个孔,下面留三个孔,然后拿出跳线,将最小系统板的正负极引到面包板的供电引脚上,这样上下四排供电引脚就可以通过最小系统板获取电源了;G引到负极,3.3引到正极,如下图:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第6张图片

跳线连接完成后,我们把STLINK按照上面的引脚标识符连接到最小系统上,如下图:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第7张图片
我们这整个系统的供电是STLINK的3.3V接到最小系统,然后最小系统又通过跳线接到上下4排的供电孔的;最后拿出一个LED,长脚正极接到正极供电孔,短脚负极接到PA0端口上,如下图:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第8张图片

这样硬件电路就搭建完成了,然后把STLINK插到电脑上;可以发现最小系统板电源灯亮起,如下图:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第9张图片

三、程序源码

首先需要新建工程,新建工程的过程可以参考第二节:STM32单片机(二)STM32环境搭建

3.1 相关库函数简介

之前我们也介绍过,操作STM32的GPIO总共需要3个步骤:

  • 第一步,打开RCC开启GPIO的时钟
  • 第二步,使用GPIO_Init函数初始化GPIO
  • 第三步,使用输出或者输入的函数控制GPIO口

查看相关库函数的功能和参数的方法有三种:

3.1.1 直接查看.h和.c文件

这里总共涉及了RCC和GPIO两个外设,先来看下这两个外设都有哪些库函数;可以在Library中找到rcc.h文件:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第10张图片
该文件里有很多RCC的库文件,但是我们最常用的只有以下这三个函数:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第11张图片
RCC_AHB外设时钟控制;RCC_APB2外设时钟控制;RCC_APB1外设时钟控制;
对应的函数实现在对应的RCC.c文件里。

这个AHB外设时钟控制函数功能是使能或者失能AHB外设时钟的;

同理GPIO的库函数也是在gpio.h中定义,在gpio.c文件中实现的;

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第12张图片
GPIO_DeInit函数的功能是复位指定的GPIO外设;
AFIODeInit用来复位AFIO外设;
GPIO_Init函数非常重要,使用结构体参数来初始化GPIO口;一般我们初始化外设都是用Init函数来完成的;

GPIO_SetBits负责将指定的端口设置为高电平;
GPIO_ResetBits负责将指定的端口设置为低电平;
GPIO_WriteBit负责对指定端口进行写入操作;
GPIO_Write可以对16个端口进行写入操作;

3.1.2 查看用户手册

除了在源文件中直接查看函数定义外,还可以通过查看《STM32F103xx固件函数库用户手册.pdf》来查看库函数的功能和参数。

3.1.3 网上搜索

最后一种方式就是百度搜索,参考一下别人的代码;搜索STM32 GPIO初始化程序,

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第13张图片


STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第14张图片

这里都由例子,直接拿过来用就行;

3.2 LED闪烁源码

代码路径:STM32入门教程资料\程序源码\STM32Project\3-1 LED闪烁\User\main.c

首先添加Delay.h延时函数,在工程目录下新建System文件夹,里面存放Delay.h和Delay.c文件:
STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第15张图片
STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第16张图片
然后打开Keil5:

  • 在Target1上,右键,添加组,起名为System;
  • 然后在System文件夹上,右键->添加已有的文件到组->选择System文件夹下的两个Delay文件
  • 然后点开魔法棒,头文件路径添加上System:

STM32单片机(三)第二节:GPIO输出练习1(LED闪烁)_第17张图片

具体代码:

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

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA, GPIO_Pin_0);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
		Delay_ms(500);
	}
}

代码解释:
RCC_APB2PeriphClockCmd:打开GPIOA的时钟;

GPIO_Mode参数:选择模式;GPIO_Mode_Out_PP表示推挽模式;
GPIO_Pin:选择引脚;GPIO_Pin_0表示操作0号引脚;
GPIO_Speed:速度选择50MHz;

将这个参数设置给GPIO_Init后,这个GPIOA外设的0号引脚就自动被配置为推挽输出、50MHz的速度了;

GPIO初始化完成后,就可以使用GPIO的输入输出函数了;

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