【STM32学习】(二)CubeMX基于HAL库GPIO输出/输入

2023-05-16

本文主要记录下初学cubeMX进行HAL库配置~

单片机STM32F407ZGT6

一、新建工程

打开CubeMX,Access To MCU SELETOR

二、配置CubeMX

1、设置Debug方式

因为我用的是ST-Link,故选择Serial Wire,若是选择J-link,可以选择JTAG~

 2、设置RCC时钟

因为外部晶振我只接了8Mhz,因此只使能HSE高速时钟,如果OSC32管脚接了32.768khZ晶振的话可以使能LSE低速时钟哈!

 配置时钟:

点击Clock Configuration ,

因为我外部晶振是8Mhz,因此填写8

选择HSE,PLLCLK,

该芯片最大主频是168Mhz,因此我们只需填写168,然后回车!系统就为我们自动计算其他分频系数~超方便!

 3、设置GPIO

说明:PF8 —— LED0

           PE2 —— KEY1

在右下角框内输入需要搜索的管脚号~即可在芯片上闪烁显示! 

 

LED亮灭需要设置管脚为输出模式GPIO_Output

 按键需要设置管脚为输入模式GPIO_Input

我们可以通过Modified进行修改设置

 

 接下来我们看下原理图:

按键原理图:
当按键按下去后,只需检测IO输入电平为低电平,即可以确定该按键按下!因此,一开始初始化需要设置为上拉模式 

上拉模式的目的是使一开始IO的电平为高电平!

 LED灯原理图

我们都知道LED二极管具有单向导电性,故若要LED不亮,只需在初始化时设置为高电平

而若要LED亮,只需设置为低电平

 

 4、编辑工程

注意:文件路径切记不能有中文,有中文的话会出错!!

 

5、生成代码!

 

 

 

 6、编写代码

找到main.c文件,然后我们就可以在while循环里编写代码啦!

 之前我们在配置Cubemx的GPIO时,是不是设置了别名,其实系统就为我们生成了宏定义

这样编写就特别方便明了!

GPIO相关语句:

 在这里我们用到了前两个语句,一个是读取IO电平状态函数,一个是设置IO电平

当我们的按键按下时,由于按键会有一小段时间不稳定,需要进行消抖(也就是延时20ms再检测电平状态)

GPIO_PIN_RESET  表示 0

GPIO_PIN_SET       表示 1

 

 

  while (1)
  {
		if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)
		{
			HAL_Delay(20);//消抖
			if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET)
			{
				HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET);
			}
		}
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

若下载后没有反应,可以点击复位键一下,可能原因是没有设置上电后复位,

可以通过这篇文章进行设置【STM32】MDK点 Reset and Run 还是要点复位的运行解决方案_Q小鑫的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32学习】(二)CubeMX基于HAL库GPIO输出/输入 的相关文章

  • 如何为连接到 I2C gpio 扩展器的虚拟 mdio-gpio 设备配置 ACPI *.asl

    我正在使用 Q7 模块 x86 并尝试在 Linux 上使用 ACPI SSDT Overlay 配置我们的外设 但我对此很挣扎 我想我误解了ACPI的一些核心概念 Problem CPU gt I2C gt PCA9575 GPIO Ex
  • 什么是 /sys/class/gpio/export 和 `/sys/class/gpio/unexport 机制以及底层 sysfs 功能是什么?

    在 Android 和 Linux 下使用旧版 sysfs GPIO 的第一步是export您要使用的特定 GPIO 引脚 当您完成 GPIO 引脚的操作后unexport it 我一直在寻找一个解释export命令实际上是这样做的 但是我
  • STM32F103概要

    The STM32F103x4 STM32F103x6 STM32F103xC STM32F103xD and STM32F103xE are a drop in replacement for STM32F103x8 B medium d
  • STM32 GPIO工作原理详解

    STM32 GPIO介绍 1 STM32引脚说明 GPIO是通用输入 输出端口的简称 是STM32可控制的引脚 GPIO的引脚与外部硬件设备连接 可实现与外部通讯 控制外部硬件或者采集外部硬件数据的功能 以STM32F103ZET6芯片为例
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • C、硬件抽象层中“extern”类型的变量

    我正在研究硬件抽象层 该 HAL 的目的是在 Linux 驱动程序和 MCU 驱动程序之间轻松切换 我正在研究SPI接口 下面是 打开 SPI接口的HAL函数的签名 哈尔 spi h spi handle t spi open spi po
  • mmap 比 ioremap 慢

    我正在为运行 Linux 2 6 37 的 ARM 设备进行开发 我正在尝试尽快切换 IO 引脚 我制作了一个小内核模块和一个用户空间应用程序 我尝试了两件事 使用以下命令直接从内核空间操作 GPIO 控制寄存器ioremap mmap G
  • Sphinx:如何排除自动模块中的导入?

    我有一个用 Python 编写的 Raspberry Pi 项目 它使用 RPi GPIO 模块 代码上的所有工作都是在 Windows 机器上完成的 其中 RPi GPIO 不会安装 每次我尝试运行 autodoc 时 它都会崩溃 说它无
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • Python使用sudo启动时找不到模块

    我有一个使用 Google Assistant 库的脚本 并且必须从那里导入一些模块 我发现这只适用于 Python 虚拟环境 这真的很奇怪 在同一个文件夹中 我有一个使用 GPIO 引脚并且必须使用 root 的脚本 它们相互交互 因此当
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • GCC 变量映射和 MISRA-C

    我主要知道两种使用 GCC 声明内存映射寄存器的方法 有许多变体 使用双字段 每个外设的数据结构等 要么使用初始化为正确地址的指针 例如volatile uint32 t pMyRegister uint32 t 0xDEADBEEFUL
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公
  • “此 GPIO 引脚已存在:”第二次出现 GPIO 1 异常

    我正在 Raspberry pi 和 java 上工作 通过使用 pi4j 使 LED 闪烁 一切都已清除并且工作正常 LED 按照代码闪烁 但是当我第二次运行时 它会导致以下错误 我已经搜索了很多有很多相同的问题没有明确的答案如何解决 任

随机推荐