1、准备材料

开发板(STM32F407G-DISC1

ST-LINK/V2驱动

STM32CubeMX软件(Version 6.10.0

keil µVision5 IDE(MDK-Arm

2、实验目标

使用STM32CubeMX软件配置STM32F407开发板点亮LED灯

3、实验流程

3.0、前提知识

笔者使用的STM32F407G-DISC1开发板主控制器为STM32F407VGT6,该MCU封装为LQFP 100,一共100个引脚,除去16个POWER引脚、1个NRST引脚和一个BOOT0引脚外,还剩余82个引脚,剩下的这些引脚均可以作为GPIO输入输出引脚使用,这些引脚分为6组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE和GPIOH,除GPIOH只有2个引脚外,其余5组均为16个引脚,如下图所示

在编程语言学习的过程中,一般学习者初始程序大多选择输出“Hello World!”,而在嵌入式单片机的学习中,一般学习者初始程序大多为“点亮LED灯”,笔者使用的开发板上拥有四个不同颜色的LED灯,其硬件原理图如下图所示,从电路连接上可以看出,从上到下绿橙红蓝四个LED灯分别由单片机的PD12、PD13、PD14和PD15四个引脚控制,当这四个引脚输出高电平时,相应的LED则会被点亮

3.1、CubeMX相关配置

在Pinout & Configuration页面右边单片机引脚预览Pinout view中,寻找需要设置的具体GPIO,这里我们选择PD12、PD13、PD14和PD15四个引脚,左键单击引脚可以对引脚功能进行设置,这里我们统一选择为GPIO_Output

在页面左边单片机功能分类栏目中选择GPIO,然后在页面中间栏目GPIO Mode and Configuration中可以看到所有使用到的具体GPIO及其相关配置,单击某个GPIO可以对其配置进行修改

当引脚选择GPIO Output时,GPIO mode有推挽输出和开漏输出两种,GPIO Pull-up/Pull-down可以选择无上/下拉、上拉和下拉其中的几种,需要注意的是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动(注释1)

当GPIO mode设置为推挽输出时,此时上/下拉只有在没有输出时才有作用,也就是说,推挽输出状态下,如果控制输出高电平那IO状态就为高电平,若控制输出低电平那IO状态就为低电平,此时与上/下拉无关,而当没有控制输出时,此时IO的状态由上/下拉决定(注释2)

当GPIO mode设置为开漏输出时,如果控制输出低电平那IO状态就为低电平;若控制输出高电平,此时输出指令就不会起到作用,IO状态由上/下拉决定

3.2、生成代码

由于不需要重新设置时钟和工程,因此直接单击上图页面右上角GENERATE CODE重新生成工程即可

打开工程,在main.c主函数中可以看到初始化部分多了MX_GPIO_Init()函数,此函数即初始化4个LED引脚为输出的函数

右键单击函数,单击Go To Definition Of 'MX_GPlO_Init' 定位(注释3)到函数定义所在的文件gpio.c(注释4)中,可以看到初始化函数中所做的设置正是我们在STM32CubeMX中所做的设置

此时如果不增加任何代码,编译整个工程应该是可以正常编译通过,0错误和0警告

然后我们就可以添加我们自己的功能代码,在主函数初始化LED的引脚之后,将引脚输出为高电平即可点亮LED,还可以在主循环中每隔一定时间翻转LED引脚的输出电平,形成LED闪烁的状态,添加代码如下图所示

源代码如下

/*点亮四个LED灯*/
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port,GREEN_LED_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(ORANGE_LED_GPIO_Port,ORANGE_LED_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(RED_LED_GPIO_Port,RED_LED_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port,BLUE_LED_Pin,GPIO_PIN_SET); /*每隔100ms翻转绿色LED灯状态*/
HAL_GPIO_TogglePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin) ;
HAL_Delay(100);

4、常用函数

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

功能:设置某个GPIO固定输出高电平或低电平

参数:

  1. GPIOx:引脚组别(GPIOA - GPIOI)
  2. GPIO_Pin:引脚(GPIO_PIN_0 - GPIO_PIN_15)
  3. PinState:低电平(GPIO_PIN_RESET)、高电平(GPIO_PIN_SET)

举例:

HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);

设置PA0引脚输出高电平

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:设置某个GPIO的输出电平翻转

参数:

  1. GPIOx:引脚组别(GPIOA - GPIOI)
  2. GPIO_Pin:引脚(GPIO_PIN_0 - GPIO_PIN_15)

举例:

HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);

翻转PA0引脚输出电平

5、烧录验证

5.1、具体步骤

“初始化LED引脚为输出 -> 使用HAL库函数设置LED引脚输出高电平 -> 引脚对应的LED点亮”

5.2、实验现象

烧录程序,然后观察开发板上LED灯的闪烁状态,发现开发板上电后4个LED均被点亮,其中GREEN_LED每隔一段时间闪烁一次

6、注释解析

注释1:参看文章“GPIO推挽输出和开漏输出模式区别详解

注释2:参看文章“STM32F4 GPIO八种模式及工作原理详解

注释3:需要先编译整个工程才可以跳转

注释4:如果在STM32CubeMX的Project Manager/Code Generator/Generated files中没有勾选Generate peripheral initialization as a pair of 'c/.h' files per peripheral,则所有生成的代码都会在main.c中实现,而不是每个外设分成.c/.h的形式

更多内容请浏览 OSnotes的CSDN博客

STM32CubeMX教程2 GPIO输出 - 点亮LED灯的更多相关文章

  1. 树莓派 Learning 003 --- GPIO 001 --- 点亮LED

    树莓派 Learning 003 - GPIO 001 - 点亮LED 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 树莓派 Learni ...

  2. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  3. 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  4. Beaglebone Black–GPIO 高低电平控制 LED 灯

    上一篇,运用 Linux 的 sysfs,控制本机上的 LED 灯,usr0 至 usr3,这次用 GPIO 控制外部的电路,点亮 LED 灯. 这次的全部材料: BBB 一台 购买 BBB 自带的 ...

  5. C语言版——点亮LED灯,深入到栈

    在上一篇进行了汇编语言的编写之后,我们采用C语言来编写程序,毕竟C语言才是我们使用最多的语言. 仅仅是点亮LED灯显然太过于简单,我们需要分析最后的反汇编,了解函数调用栈,深入C语言骨髓去分析代码,并 ...

  6. 30个物联网传感器小实验:三行代码点亮LED灯

    30个物联网传感器小实验:三行代码点亮LED灯 三行代码点亮LED灯 LED灯闪烁 LED灯调亮度 LED淡入淡出 不写一行代码点亮LED灯 全彩RGB灯 面包板 30个物联网传感器小实验:三行代码点 ...

  7. 第二章之S5PV210在BL1中点亮LED灯

    1,u-boot中第一个入口在./arch/arm/cpu/armv7/start.S 翻到153行:如下图 前面都是进行一些基本设置,不用管. cpu_init_cp15设置协处理器, cpu_in ...

  8. JZ2440开发板:用按键点亮LED灯(学习笔记)

    本文是对韦东山嵌入式第一期学习的记录之一,如有您需要查找的信息,可以继续往下阅读. 想要用按键点亮LED灯,就需要知道按键和LED灯的相关信息,这样才可以进行之后的操作.阅读JZ2440的原理图,可以 ...

  9. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

  10. STM32F4 阿波罗寄存器点亮LED灯

    学习步骤: 使用寄存器点亮LED灯,需要进行如下的步骤,LED灯属于外设部分,首先需要开启外设的时钟使能,然后LED灯是PB1口,(芯片是正点原子的阿波罗),接着定义GPIOB口的输出模式,为上拉.推 ...

随机推荐

  1. Springboot中使用线程池的三种方式

    前言 多线程是每个程序员的噩梦,用得好可以提升效率很爽,用得不好就是埋汰的火葬场. 这里不深入介绍,主要是讲解一些标准用法,熟读唐诗三百首,不会作诗也会吟. 这里就介绍一下springboot中的多线 ...

  2. 「にちじょう記録」MTIDnWtMOA

    Mistakes That I Don't Want to Make Once Again. // Caution // 差分 / 前缀和后注意询问区间端点有变化-- 不要考虑了右边界就不考虑左边界 ...

  3. python3利用smtplib发送、抄送邮件并附带附件

    python3利用smtplib发送.抄送邮件并附带附件 1. 导包 import smtplib from email.mime.text import MIMEText from email.mi ...

  4. 详解RecyclerView的预布局

    概述 RecyclerView 的预布局用于 Item 动画中,也叫做预测动画.其用于当 Item 项进行变化时执行的一次布局过程(如添加或删除 Item 项),使 ItemAnimator 体验更加 ...

  5. 分布式与微服务——Iaas,Paas和Saas、单体应用和缺点、微服务概念、传统 分布式 SOA 架构与微服务架构的区别、微服务实战、什么是RPC、CAP定理和BASE理论、唯一ID生成、实现分布式

    文章目录 1-什么是Iaas,Paas和Saas 一 IaaS基础设施服务 二 paas平台即服务 三saas软件即服务 四 总结 2-单体应用和缺点 一 单体应用 二 单体应用的缺陷 3-微服务概念 ...

  6. Visible Lattice Points 题解

    Visible Lattice Points 题目大意 给定一个 \(N×N×N\) 的由若干点组成的立方体,点的坐标从 \((0,0,0)\) 到 \((N,N,N)\),求从点 \((0,0,0) ...

  7. 创建vue项目并搭建JSONSERVER

    1.该前提是你已经搭建好vue-cli脚手架,开始创建一个新项目,输入 vue init webpack demo(demo是自定义项目名). 2.cd demo 进入项目安装依赖 3.在已经创建的项 ...

  8. kubeadm 工具部署 kubernetes v1.16.2

    环境准备 3个节点,以下基于 Centos 7.6 系统, 内核版本:3.10.0-957.12.2.e17.x86_64 HOST NODE CPU MEM 192.168.1.111 master ...

  9. 教你使用逻辑公式和恒等式等价改写SQL

    今天同事给我一条2秒的SQL看看能不能优化. 原始SQL: SELECT pk_dept FROM aaaa WHERE 1 = 1 AND ((pk_group = '0001A1100000000 ...

  10. AcWing 178. 第K短路

    题意 给定一张 \(N\) 个点(编号 \(1,2-N\)),\(M\) 条边的有向图,求从起点 \(S\) 到终点 \(T\) 的第 \(K\) 短路的长度,路径允许重复经过点或边. 注意: 每条最 ...