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. mooc第五单元《管理组织》单元测试

    第五单元<管理组织>单元测试     返回 本次得分为:30.00/50.00, 本次测试的提交时间为:2020-08-30, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 ...

  2. MySQL中sql_mode的设置

    在升级MySQL版本到8.0的过程中,需要关注sql_mode参数默认值的变化,8.0版本sql_mode不支持 NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有 NO_AU ...

  3. 【CISCN2019 华北赛区 Day1 Web1】Dropbox 1

    一.[CISCN2019 华北赛区 Day1 Web1]Dropbox 1 看题 首先是需要注册登录,然后进入是一个文件上传和下载的页面.尝试php一句话木马和burp抓包修改后缀的木马都失败,看来是 ...

  4. [ABC310D] Peaceful Teams 题解

    Peaceful Teams 题目大意 将 \(n\) 个人分成 \(T\) 组,要求每组不能包含敌对的人,问有多少种分法. 思路分析 注意到 \(n,T\) 均很小,考虑爆搜. 注意到直接枚举会枚举 ...

  5. Flask后端开发(一)-基础知识和前期准备

    目录 1.背景介绍 1.1. 项目背景 1.2. 项目难点 1.3. 项目环境 2. flask后端开发实现的功能 3. flask部署和前后端对接 3.1. flask运行配置和服务器部署 3.2. ...

  6. 手把手教你在项目中引入Excel报表组件

    摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 GrapeCity Documents for Excel(以下 ...

  7. C/C++ __builtin 超实用位运算函数总结

    以 __builtin 开头的函数,是一种相当神奇的位运算函数,下面本人盘点了一下这些以 __builtin 开头的函数,希望可以帮到大家. 1 __builtin_ctz( ) / __buitli ...

  8. 彻底掌握Python中 * 号

    Python中的 *号是一个特殊的符号,在其他编程语言中,它最广为人知的用途就是作为乘法运算的符号.而在Python中,它的用途远不止如此. 本文总结了Python中*号的所有用途,以供参考. 1. ...

  9. Python 利用pandas和matplotlib绘制柱状折线图

    创建数据可视化图表:柱状图与折线图结合 在数据分析和展示中,经常需要将数据可视化呈现,以便更直观地理解数据背后的趋势和关联关系.本篇文章将介绍如何使用 Python 中的 Pandas 和 Matpl ...

  10. 虚拟机centos7上安装docker+jenkins

    虚拟机centos7上安装docker+jenkins 学习某册子的CICD时,安装了docker和jenkins,记录的安装过程和中间碰到的问题. 使用的虚拟机为Parallels Desktop, ...