Advertisement

STM32学习笔记——GPIO的输入、输出与检测

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本笔记深入浅出地介绍了如何使用STM32微控制器进行GPIO的基本操作,包括设置引脚方向(输入/输出)、读取和配置引脚状态以及中断检测的方法。适合初学者快速入门STM32 GPIO编程。 本例程演示如何操作GPIO输入和输出。通过检测USER1、USER2按键的状态,点亮不同的LED,并将键值输出到串口1。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • STM32——GPIO
    优质
    本笔记深入浅出地介绍了如何使用STM32微控制器进行GPIO的基本操作,包括设置引脚方向(输入/输出)、读取和配置引脚状态以及中断检测的方法。适合初学者快速入门STM32 GPIO编程。 本例程演示如何操作GPIO输入和输出。通过检测USER1、USER2按键的状态,点亮不同的LED,并将键值输出到串口1。
  • STM322】——GPIO按键.zip
    优质
    本资源是《STM32学习笔记》系列中的第二部分,专注于讲解如何使用STM32微控制器进行GPIO输入操作及按键检测技术,适合初学者深入理解嵌入式系统开发。 STM32学习记录——2.GPIO输入—按键检测 1. 使能GPIO端口的时钟; 2. 初始化目标引脚为输入模式(此时引脚电平受外部按键电路影响,浮空上拉或下拉配置对功能没有区别); 3. 编写测试程序以监测按键状态,并通过该状态控制LED灯。
  • STM32 GPIO寄存器配置
    优质
    本文章详细介绍了如何在STM32微控制器中通过配置GPIO输入输出寄存器来设置引脚功能和工作模式。适合初学者学习与实践。 STM32是一款基于ARM Cortex-M内核的微控制器,在嵌入式系统设计领域广泛应用。其GPIO(通用输入输出)接口用于与外部设备交互数据。配置GPIO口涉及对寄存器的操作,这些操作控制着工作模式、速度和上拉下拉特性等。 在STM32中,通过读写GPIOx的CRH(高四位配置寄存器)和CRL(低四位配置寄存器)来完成GPIO口的设置。其中“x”代表具体的端口号如GPIOA或GPIOB,这两个寄存器分别控制高低8位引脚。 代码中的两个宏定义SDA_IN() 和 SDA_OUT() 用于将特定引脚PB9和PB7配置为上拉输入模式与推挽输出模式: 1. 对于`SDA_IN()`: - PB9在CRH寄存器的高位,故需清除相关位并设置为输入。代码中使用`GPIOB->CRH &= 0XFFFFFF0F;`和`GPIOB->CRH |= (u32)8 << 4;`来实现。 - 对PB7,在CRL中的低位操作类似,但需要清零后置位以设为上拉输入模式。代码是`GPIOB->CRL &= 0X0FFFFFFF;`和`GPIOB->CRL |= (u32)8 << 28;`。 2. 对于`SDA_OUT()`: - PB9与PB7的推挽输出配置类似,只是模式设置由输入改为输出。例如,对于PB7使用代码 `GPIOB->CRL &= 0X0FFFFFFF; GPIOB->CRL |= (u32)3 << 28`。 - 对于CRH中的高位引脚如PB10,则需清零并设为推挽输出模式。例如,通过`GPIOB->CRH &= 0XFFFFF0FF; GPIOB->CRH |= (u32)3 << 8`。 理解上述配置的关键在于掌握每个引脚在CRL和CRH寄存器中的具体位置及对应的设置方式。通常,模式由4位二进制表示(如输入浮空为0001, 推挽输出为 0011, 上拉输入为 0100)。 实际应用中,为了提高代码的可读性和维护性,使用宏定义或函数封装配置过程是常见的做法。例如: - 选择正确的GPIO端口如PC5。 - 确定CRL还是CRH寄存器(由于PC5属于低8位引脚,则用CRL)。 - 清零相关位置的位 (如`GPIOC->CRL &= 0XFFFFF0FF;`),然后设置为上拉输入模式 (`GPIOC->CRL |= 0X00011000;`)。 这种方式有助于灵活配置STM32的GPIO口以满足不同外设需求。理解寄存器结构和工作原理是开发STM32项目的基础,并能帮助编写高效可靠的代码。
  • 我对STM32 GPIO模式理解
    优质
    本文详细探讨了STM32微控制器GPIO端口的不同输入和输出工作模式,包括上拉/下拉电阻、开漏配置及各种速度设置等,并提供了实践应用示例。 刚开始学习的时候感觉有些复杂,我想简单地分享一下自己的理解,并希望与大家多多交流。
  • VASP文件心得
    优质
    本笔记详细记录了使用VASP软件进行材料模拟时设置和优化输入参数的经验与技巧,旨在帮助初学者快速掌握VASP操作方法。 对于刚开始使用VASP的新手来说,了解如何设置输入文件是非常重要的一步。这包括熟悉所需的参数以及它们在计算中的作用。建议首先阅读相关的文档和教程来获得基础知识,并通过实践逐步掌握技巧。此外,加入一些讨论组或者论坛可以让你接触到更多关于如何有效配置这些文件的实用经验和技巧分享。
  • STM32 GPIO 速度配置
    优质
    本文章介绍如何在STM32微控制器中调整GPIO端口输出速度,包括设置时钟、配置引脚模式及速度等级等步骤。 当STM32的GPIO端口设置为输出模式时,可以选择三种速度:2MHz、10MHz和50MHz。这个速度指的是I/O口驱动电路的速度,用于选择不同的输出驱动模块,以达到最佳的噪声控制和降低功耗的目的。
  • 【Python】format()格式化技巧—
    优质
    本篇笔记详细介绍了Python中的format()函数及其格式化字符串的方法和技巧,适合编程初学者参考学习。 ### 一、旧式 `%` 格式化输出 在Python编程中,格式化输出是一种常见的任务,它允许我们按照特定的样式显示数据。其中一种方法是使用旧式的 `%` 格式化方式。 ```python a = 字符 print(这是一个字符%c % a) # 输出:这是一个字符字符 ``` 这里的 `c` 用于输出单个字符,而 `s` 和 `d` 分别用于字符串和十进制整数。例如: ```python b = string print(这是一个字符%c 和一段字符串%s % (a, b)) # 输出:这是一个字符字符 和一段字符串string # 浮点数保留四位小数: c = 520.1314666 print(保留四位小数%.4f % c) # 输出:保留四位小数520.1315 ``` ### 二、`format()` 格式化输出 Python的 `format()` 函数提供了更为灵活和强大的格式化选项。 #### 定位输出 ```python first = 人生苦短 second = 我始终在你身边 print(虽然{},但是{}.format(first, second)) # 输出:虽然人生苦短,但是我始终在你身边 ``` 在这里,通过 `{}` 和位置参数来指定输出的位置。 #### 高级输出 `format()` 函数支持多种高级格式设置方法: - 保留小数位数: 使用 `:.nf` 格式化符。例如:`{:.4f}` - 进制转换: 可以使用 `{:}`,如二进制的 `{:b}`, 十六进制的 `{:x}` - 百分比输出: 使用 `{:.p%}`,如保留一位小数百分比格式化符:`{:.1%}` - 一般数字显示方式: 可以使用`{:g}` - 数字分隔符: 如中文地区设置下,可以使用 `:{:,}` #### 对齐和填充 通过 `format()` 函数还可以控制输出的对齐: - 右对齐:`{:}`, 使用 `>` 表示右对齐 - 左对齐(默认):直接使用 `{}` - 居中:使用 `{:^width}>` - 自定义填充字符: 如`{:0^20}`,其中0为自定义的填充字符 例如: ```python first = 我爱你 print(我想对你说{:>20}.format(first)) # 输出:我想对你说 我爱你 print({:*^20}.format(first)) # 输出:**********我爱你******* ``` #### 向函数中传入序列和字典 `format()` 函数可以使用列表、元组或字典进行格式化输出: ```python list = [我爱你, 一生一世] dict = {a: 我爱你, b: 永远} print({[0]}.format(list)) # 输出:我爱你 print(因为{0[a]}, 所以{0[b]}.format(dict)) # 输出:因为我爱你, 所以永远 ``` 以上是关于Python中 `%` 和 `format()` 格式化输出方法的介绍。尽管两者都有各自的优点,但考虑到灵活性和可读性,通常推荐使用 `format()` 函数进行格式化操作。掌握这些技术有助于提高代码的质量与维护性。
  • STM32
    优质
    《STM32入门学习笔记》是一份系统而实用的学习资料,旨在帮助初学者快速掌握STM32微控制器的基础知识和编程技巧。通过实例解析与实践操作相结合的方式,使读者能够轻松上手进行嵌入式开发项目。 这段笔记共93页,19000多字,是在观看B站UP主“江科大自化协”的STM32入门视频期间整理的。分享出来供大家参考使用。不创造知识,只是对已有知识进行记录和搬运。大家也可以去这位UP主的频道观看相关视频。
  • STM32 Cube HAL库GPIO详解及应用(通过按键控制LED闪烁)附代码
    优质
    本教程详细解析了STM32 Cube HAL库中GPIO模块的使用方法,并结合实际案例——利用按键控制LED灯的闪烁,帮助读者掌握GPIO输入输出的应用技巧。同时提供完整的学习代码以供参考实践。 STM32Cube HAL库是由ST Microelectronics公司为STM32微控制器提供的强大软件开发工具,它简化了底层硬件驱动的编程过程,使开发者能够更专注于应用程序逻辑的设计。HAL库提供了一致性的API接口,使得在不同系列的STM32芯片之间切换变得非常容易。 本教程将探讨如何使用GPIO(通用输入输出)进行操作,并演示通过按键控制LED灯闪烁的方法。 GPIO是微控制器中最基础但至关重要的部分之一,它允许MCU与外部设备通信。STM32Cube HAL库封装了对GPIO的操作功能,提供了易于理解和使用的函数如`HAL_GPIO_Init()`、`HAL_GPIO_ReadPin()`和`HAL_GPIO_WritePin()`等。 配置GPIO引脚为输入或输出模式是必要的步骤。例如,若要将一个引脚设置为输入状态,则可以使用`HAL_GPIO_Init()`函数,并指定相应的GPIO端口和引脚号以及对应的模式(如GPIO_MODE_INPUT)。对于输出功能的设定,可以选择推挽输出(GPIO_MODE_OUTPUT_PP)或者开漏输出(GPIO_MODE_OUTPUT_OD),并选择适当的速度等级(例如:GPIO_SPEED_FREQ_LOW、GPIO_SPEED_FREQ_MEDIUM等)。 在一个按键控制LED灯闪烁的例子中,通常会有一个引脚连接到按键,并另一个引脚连接至LED。将用于检测按键状态的GPIO配置为输入模式;而与LED相连的那个则设置成输出模式。为了监测按钮是否被按下,可以周期性地调用`HAL_GPIO_ReadPin()`函数来读取当前的状态值。当键被按下的时候,返回值会变为低电平。 接下来,在实现该功能时我们可以编写一个循环以持续检测按键状态并控制LED灯的亮灭变化。例如:使用`HAL_Delay()`函数添加延时,并在检测到按钮按下后通过调用`HAL_GPIO_WritePin()`改变LED的状态使其开始闪烁。这种程序结构使代码易于复用于其他项目中。 此外,STM32Cube HAL库还支持中断处理机制来响应按键事件。当按键被按下的时候可以触发一个上升沿信号,并且设置相应的中断服务函数(ISR)以执行特定的操作而无需持续检查按钮的状态变化情况。这种方式提高了程序的实时性和效率。要启用中断功能,则需要先配置GPIO端口的中断模式(如:GPIO_IT_RISING_EDGE表示检测到上升沿时产生触发),然后注册对应的ISR。 HAL库还提供了中断回调函数,例如`HAL_GPIO_EXTI_Callback()`允许在按键事件发生时执行自定义代码逻辑。这使得主程序更加简洁清晰,并且可以进一步简化开发流程和提高效率。 通过掌握STM32Cube HAL库提供的GPIO操作接口,开发者能够快速构建基于STM32的嵌入式系统并实现各种功能需求,例如本教程中的使用按键控制LED灯闪烁的例子展示了一个基本应用案例。结合实际项目代码练习可帮助深入理解相关概念和技术,并提高个人在该领域的开发能力。
  • Python
    优质
    《Python的输入与输出》介绍了如何在Python程序中获取用户输入、处理数据以及将结果输出给用户,是编程初学者掌握基本交互技能的重要内容。 Python是一种广泛使用的高级编程语言,在数据处理、网络爬虫和Web开发等领域表现出色。掌握Python的输入输出功能对于编写实用脚本和应用程序至关重要。 一、Python输入 1. `input()`函数:这是最基本的用户输入方式,暂停程序执行等待用户在终端输入信息,并返回一个字符串。 ```python name = input(请输入你的名字:) print(你好, + name) ``` 这段代码提示用户输入名字并问候对方。 2. `sys.stdin.read()`: 从标准输入流读取数据的方法,通常用于命令行脚本。它可以读取一行或多行文本直到遇到EOF(文件结束符)。 3. `sys.stdin.readline()`:这个方法可以读取一行包含换行符的输入。 4. `sys.stdin.readlines()`:该方法会读取所有行并返回一个列表,其中每一项对应于单独的一行。 二、Python输出 1. `print()`: 这是最常用的输出方式。它可以打印任何类型的数据。 ```python num = 123 print(数字是:, num) ``` 或者直接: ```python print(Hello, World!) ``` 2. `sys.stdout.write()`:这个方法可以将内容写入标准输出,但不会自动换行。 ```python import sys sys.stdout.write(Hello ) sys.stdout.write(World) ``` 3. `sys.stdout.flush()`: 调用此函数清空缓冲区能够立即显示输出。 三、Python爬虫 1. `requests`库:用于发送HTTP请求,获取网页内容。 ```python import requests response = requests.get(http://example.com) content = response.text ``` 2. `BeautifulSoup`: 解析HTML或XML文档的工具,方便提取所需信息。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(content, html.parser) title = soup.find(title).text ``` 3. `Scrapy`框架:用于构建完整的爬虫项目,提供了从抓取、解析到存储的一整套解决方案。 4. `re`: 正则表达式模块,常用来在文本中匹配特定模式和提取网页数据。 掌握这些输入输出及Python爬虫技术会让你的编程更加高效。无论是简单的命令行交互还是复杂的网络爬虫项目,Python都能提供强大的工具支持。