STM32CubeMX教程2 GPIO输出 - 点亮LED灯

这篇具有很好参考价值的文章主要介绍了STM32CubeMX教程2 GPIO输出 - 点亮LED灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、准备材料

开发板(STM32F407G-DISC1)

STM32CubeMX软件(Version 6.10.0)

keil µVision5 IDE(MDK-Arm)

ST-LINK/V2驱动

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相关配置

3.1.0、工程基本配置

打开STM32CubeMX软件,单击ACCESS TO MCU SELECTOR选择开发板MCU(选择你使用开发板的主控MCU型号),选中MCU型号后单击页面右上角Start Project开始工程,具体如下图所示

开始工程之后在配置主页面System Core/RCC中配置HSE/LSE晶振,在System Core/SYS中配置Debug模式,具体如下图所示

详细工程建立内容读者可以阅读“STM32CubeMX教程1 工程建立”

3.1.1、时钟树配置

系统时钟使用8MHz外部高速时钟HSE,HCLK、PCLK1和PCLK2均设置为STM32F407能达到的最高时钟频率,具体如下图所示

3.1.2、外设参数配置

在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状态由上/下拉决定

因此PD12、PD13、PD14和PD15四个引脚模式选择推挽输出,无上下拉,具体配置如下图所示

3.2、生成代码

3.2.0、配置Project Manager页面

单击进入Project Manager页面,在左边Project分栏中修改工程名称、工程目录和工具链,然后在Code Generator中勾选“Gnerate peripheral initialization as a pair of 'c/h' files per peripheral”,最后单击页面右上角GENERATE CODE生成工程,具体如下图所示

详细Project Manager配置内容读者可以阅读“STM32CubeMX教程1 工程建立”实验3.4.3小节

3.2.1、外设初始化调用流程

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

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

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

3.2.2、添加其他必要代码

然后我们就可以添加我们自己的功能代码,在主函数初始化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、常用函数

/**
  * @brief  设置某个GPIO固定输出高电平或低电平
  * @param  GPIOx:引脚组别(GPIOA - GPIOI)
  * @param  GPIO_Pin:引脚(GPIO_PIN_0 - GPIO_PIN_15)
  * @param  PinState:低电平(GPIO_PIN_RESET)、高电平(GPIO_PIN_SET)
  * @retval None
    */
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

/*设置PA0引脚输出高电平*/
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);

/**
  * @brief  设置某个GPIO的输出电平翻转
  * @param  GPIOx:引脚组别(GPIOA - GPIOI)
  * @param  GPIO_Pin:引脚(GPIO_PIN_0 - GPIO_PIN_15)
  * @retval None
    */
void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

/*翻转PA0引脚输出电平*/
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);

5、烧录验证

5.1、具体步骤

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

5.2、实验现象

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

6、注释解析

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

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

注释3:需要在keil软件魔术手Options for Target‘GPIO'/Output中勾选Browse Infomation,然后编译整个工程才可以跳转

注释4:如果在STM32CubeMX的Project Manager/Code Generator/Generated files中没有勾选Generate peripheral initialization as a pair of 'c/.h' files per peripheral,则所有生成的代码都会在main.c中实现,而不是每个外设分成.c/.h的形式文章来源地址https://www.toymoban.com/news/detail-769374.html

到了这里,关于STM32CubeMX教程2 GPIO输出 - 点亮LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

    今日继续学习使用  STM32 F103C8T6开发板 点亮一个LED灯,文章提供源码,测试工程,实验效果图,希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 : 引脚安排整理: 定时器的引脚例举: 串口的引脚例举:  CAN串口通信: SPI通信: IIC通信:  其余引脚: 烧录引脚:

    2024年02月11日
    浏览(52)
  • STM32 HAL库 通用定时器介绍及相关应用例程 定时器中断 输出PWM (点亮LED呼吸灯、输出PWM、输入捕获) CubeMX

    (部分图引自于ATK) 前情提要(基本定时器) 点此进入 通用定时器类别 通用定时器和基本定时器相比大致的工作方式是相似的,不过通用定时器比基本定时器多了一些很好用的功能,比如: 外部输入捕获 输出比较 输出PWM 时钟源 CubeMX为我们提供了配置时钟的非常方便的工

    2024年04月15日
    浏览(86)
  • 最详细STM32,cubeMX 点亮 led

    这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 实验开发板:STM32F103C8T6。 所需软件:keil5 , cubeMX 。 实验目的:了解 led 点亮原理,cubeMX配置 , GPIO 等相关函数 。 代码编写软件 : MDK keil5 。 图形化配置软件 :STM32cubeMX。 仿真器驱动 : STLINK 。 串口驱动 :CH340 。

    2024年01月16日
    浏览(46)
  • GPIO(STM32)点亮LED灯、按键KEY

    GPIO(general porpose intputoutput):通用输入输出端口的简称。可以通过软件控制其输出和输入。stm32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。 在STM32F4xx芯片上的GPIO口被分成各个组,一共有7组IO口,以A、B、C、D、E、F、G等命名(不同

    2024年04月14日
    浏览(43)
  • STM32--GPIO点亮LED灯(手把手,超详细)

    写在前面: 在前面的学习中,我们学习了 STM32的编译环境(MDK)、时钟树以及GPIO的8种工作模式 ;这节我们学习正式入门STM32--- 点亮第一个LED灯 ;即利用GPIO进行电灯,尽管是一个十分简单的实现,但是其步骤也是一个完整的STM32项目,可以说是“麻雀虽小,五脏俱全”;因

    2024年02月03日
    浏览(52)
  • cubmx基础操作,hal库基本配置流程之使用 stm32cubmx生成HAL库进行gpio点亮led(stm32h7xx)(超详细,小白教程)

    HAL库(硬件抽象层库)是一个提供对底层硬件操作的抽象的库,它使得开发者可以使用统一的接口进行硬件操作,而不必关心底层硬件的具体实现细节。HAL库通常由硬件厂商提供,用于支持其硬件设备,并为其提供标准化的接口。 HAL库的主要目的是简化底层硬件的操作,使得

    2024年02月20日
    浏览(58)
  • STM32F103ZET6 GPIO工作模式介绍+使用寄存器点亮第一个LED灯

    目录  GPIO的工作模式介绍 1.输入模式(模拟、上拉、下拉、浮空) 2.输出模式(推挽/开漏) 3.复用功能(推挽/开漏) 4.模拟输入输出(上下拉无影响) 如何使用寄存器点亮第一个LED灯         在输入模式时,施密特触发器打开,输出被禁止。可通过输入数据寄存器 GPIOx_

    2024年02月06日
    浏览(71)
  • 3、stm32:GPIO输出——LED闪烁、LED流水灯、蜂鸣器

    目录 一、GPIO简介 二、GPIO基本结构 三、GPIO模式 四、GPIO常用寄存器 (1)端口配置低高寄存器(GPIOx_CRL/GPIOx_CRH)(x=A…E) (2)端口输入数据寄存器(GPIOx_IDR)(x=A…E) (3)端口输出数据寄存器(GPIOx_ODR)(x=A…E) (4)端口位设置/清除寄存器(GPIOx_BERR)(x=A…E) (5)端口位清除寄存器(GP

    2024年02月09日
    浏览(45)
  • STM32CubeMX教程3 GPIO输入 - 按键响应

    开发板(STM32F407G-DISC1) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 使用STM32CubeMX软件配置STM32F407开发板的按键作为输入,利用按键输入使LED灯产生响应 对于所有的GPIO来说都是既可以作为输出引脚也可以作为输入引脚使用,本开发板上有一个用户按键,

    2024年02月03日
    浏览(61)
  • 【ARM裸机编程 | 海思SS528】- 操作 GPIO 寄存器输出低电平点亮 LED 灯

    这篇文章主要介绍在 海思SS528 开发板,去操作某个 GPIO 寄存器输出高、低电平,来熄灭或点亮 LED 灯。 首先,了解一下 ARM裸机编程 ,也就是在一块没有移植操作系统的ARM开发板去编程,相当于把它当成单片机去使用,很多与硬件相关的操作都需要直接读写该硬件的寄存器。

    2024年02月10日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包