2-STM32入门

news2024/12/24 21:30:25

STM32入门

意法半导体公司推出STM32芯片。

只需动手。

第一步安装开发环境。

STM32CubeIDE

点灯大师

1.新建工程

File -> New -> STM32 Project

选择自己的开发版型号,输入项目名称,创建一个STM32工程。

在这里插入图片描述

点亮红色小灯的引脚为PB0(不了解的情况下,需要先阅读该开发板的开发手册如下图)

在这里插入图片描述

鼠标左键点击后将模式改为GPIO_OutPut模式。鼠标右键添加用户标签为LED_RED。

  • STM32控制PA7的方式为推挽输出(Output Push Pull)

按住ctrl+s保存,自动跳转到main.c文件中

方式一:找到mian()函数程序入口,在while(1)括号内添加点灯代码,后运行。

HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);

​ 方式二:

在图形界面

Pinout & Configuration -> System Core -> GPIO -> 点击PB0 ->将GPIO output level 改为 high -> ctrl +s 保存 直接运行

  • 运行需要使用ST-LINK将开发板连接到电脑上。

控制小灯的亮灭

1.控制程序延后执行,单位ms(毫秒)

HAL_Delay(1000);

2.读取按键此时的电频状态

HAL_GPIO_ReadPin(KEY_GPIO_Pin,KEY1_Pin)

HAL_GPIO_ReadPin返回值为GPIO_PinState,即

typedef enum
{
  GPIO_PIN_RESET = 0u,
  GPIO_PIN_SET
} GPIO_PinState;

3.按键的浮空输入模式Nopushup -No pushDown(GPIO八大模式之一)以及上拉操作的实现

将此GPIO口处于一个高阻态的状态下,相当于芯片内部有一个很大的电阻,此时PB12处如果接的是上拉电源,则芯片读取到的PB12为高电平上拉操作实现方法:使用电源将GPIO口处的电平拉高)

在这里插入图片描述

  • 注意:上拉电源需要接一个电阻,此电阻称为上拉电阻,上拉也被称为加个上拉电阻。此电阻作用有四个作用:
  • 确定逻辑电平:在数字电路中,某些引脚如果悬空(未连接),其逻辑电平可能不确定,容易受到外界噪声干扰,导致信号不稳定。通过上拉电阻,可以将引脚拉到一个确定的逻辑高电平(比如Vcc),避免悬空状态。
  • 确保输入稳定:对于某些输入引脚,如果直接悬空,输入信号可能会因为噪声等干扰产生不确定性。上拉电阻提供了一个稳定的路径,将输入电平维持在高电平,确保输入状态稳定。
  • 与开漏(open-drain)电路配合:在一些情况下(如I²C总线),设备的输出引脚可能是开漏(open-drain)或开集电极(open-collector)结构。这类输出电路只能拉低电平,无法拉高。此时,上拉电阻用于提供逻辑高电平,当设备不主动拉低时,电阻将输出引脚拉到高电平。
  • 限制电流:上拉电阻还能限制电流的大小,防止短路时电流过大对电路造成损坏。

当KEY1按下导线接地(GND),此时芯片读取到的PB12为低电平

在这里插入图片描述

下拉操作:

将3.3V电源与GND进行交换就得到了下拉电路

在这里插入图片描述

此时当KEY1断开时,PB12与地线相连接,此时芯片读取到的PB12为低电平,当KEY1按下时,PB12与3.3V电源相连接,且设置了PB12为浮空输出状态,PB12处的电阻极大,此时芯片读取到的PB12则为高电平,与上拉正好相反。

此下拉电阻的作用:

  • 确定逻辑电平:当输入引脚没有接入信号(悬空)时,可能会处于不确定状态,容易受到噪声或干扰。下拉电阻可以确保在引脚未被主动驱动时,将其逻辑电平拉到低电平(通常为0V),从而避免悬空状态。

  • 防止浮动:在一些电路中,如果输入端悬空,可能会随机捕获干扰信号,导致逻辑状态漂移。通过下拉电阻,可以避免输入端在没有信号输入时浮动,确保引脚在没有外部驱动时处于稳定的低电平。

  • 与开路结构配合:在某些应用场景中,电路可能只负责拉高电平,而不主动拉低(例如开路集电极或开漏输出)。在这种情况下,下拉电阻可以确保当输出引脚未被驱动时,引脚被拉到低电平。

  • 提供明确的默认状态:下拉电阻可以为电路中的输入或输出引脚提供一个明确的默认状态,防止其在未连接或未驱动时进入未知状态。这在一些逻辑电路和输入按钮设计中尤为重要。

需要达到的能力:看到逻辑电路知道其是上拉操作还是下拉操作,什么状态下开关是松开,什么时候是按下。

如:看下图

在这里插入图片描述

可知,这是一个上拉操作的电路图,未按下KEY1时处于高电平GPIO_PIN_SET,按下时处于低电平(GPIO_PIN_RESET)

下图可知KEY2是一个不是上拉也不是下拉的电路图,当KEY2按下时没有电平的改变。此时你就疑惑了,这种按键如何检测其按下与否。下面介绍GPIO八大模式之一的上拉输入模式,

需要在图形界面Pinout & Configuration -> System Core -> GPIO -> 点击PB13 ->将GPIO Pull-up/Pull-down 改为 Pull-up -> ctrl +s 保存

更改成功后就与上面相同了。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c8a53a845f074f709dcd47db7053a29a.png
)

4.翻转小灯状态

HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);

每执行一次,会改变小灯的状态在GPIO_PIN_SET与GPIO_PIN_RET之间转换。

5.阅读下面代码,理解其逻辑

if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)==GPIO_PIN_RESET) {
    HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET); 	 		
}else {
    HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
}

代码逻辑:当读取KEY1按下时(低电平RESET)将小灯点亮),当KEY1抬起时小灯熄灭。

在这里插入图片描述

代码二:

if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)== GPIO_PIN_RESET){
    HAL_Delay(10);

    if(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)== GPIO_PIN_RESET){
		HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
        while(HAL_GPIO_ReadPin(KEY2_GPIO_Port, KEY2_Pin)== GPIO_PIN_RESET){}
	 }
}

代码逻辑:

key为上拉操作,只有当key2按下时检测到低电平,延迟10ms(此区间为波动较大可软件消抖)后再次读取到低电平,就将LED_GREEN的状态改变,改变后,key2依然处于低电平,死等,等待到该状态结束。直到按键松开,循环才会结束,代码才能继续执行。
RESET){}
}
}


代码逻辑:

key为上拉操作,只有当key2按下时检测到低电平,延迟10ms(此区间为波动较大可软件消抖)后再次读取到低电平,就将LED_GREEN的状态改变,改变后,key2依然处于低电平,死等,等待到该状态结束。直到按键松开,循环才会结束,代码才能继续执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2216493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

头戴式耳机性价比高的品牌有哪些?五款头戴式耳机200元左右推荐

耳机作为最被广大用户接受的数码产品,相信很多小伙伴都会拥有一个,甚至多个。但…在众多耳机样式中,如果论音质,同价位中头戴式应该是最好的,毕竟全包耳设计,能够让其有效隔绝外界噪音,实现更加…

svg全链路流程轨迹

直接上效果 <template><div class"right-page"><div class"container"><div class"line-wrap"><svgversion"1.1"xmlns"http://www.w3.org/2000/svg"xmlns:xlink"http://www.w3.org/1999/…

如何在极速浏览器中实现谷歌浏览器的扩展功能

在当今数字化时代&#xff0c;浏览器扩展功能极大地增强了我们的在线体验。尤其是谷歌浏览器&#xff0c;以其丰富的扩展生态而闻名。但是&#xff0c;如果你想在极速浏览器中使用这些谷歌浏览器的扩展功能&#xff0c;该怎么办呢&#xff1f;本文将为你详细解析如何实现这一目…

【Golang】Go语言http编程底层逻辑实现原理与实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

前端全栈混合之路Deno篇:Deno2.0与Bun对比,谁更胜一筹?它们分别适合怎样的项目,谁更适合前端转全栈?

在前端全栈开发中&#xff0c;工具的不断演变让开发者们始终在寻找更高效、更现代化的解决方案。继Node.js之后&#xff0c;Deno和Bun 成为了两个比较火热的运行时。Deno2.0的近期的发布让它在性能和兼容性方面大幅提升-尤其是兼容了npm包&#xff08;但我感觉应该不是全部兼容…

Linux源码阅读笔记-设备驱动程序

基础知识 Linux 内核输入子系统是对分散、多种不同类别的输入设备&#xff08;鼠标、键盘、触摸屏、手写板等&#xff09;进行统一的驱动程序。优势&#xff1a;统一物理形态各异相似输入设备处理功能&#xff1b;提供分发输入报告给用户应用程序的简单事件接口&#xff1b;抽…

DW-大模型生图安全疫苗注入作业记录

Task1.跑通baseline Task2.赛题评测方法 //------------------------------------------------------------------------- Task1-BaseLine 创建实例后与你运行代码&#xff0c;git clone model 太慢了 上modelspace 找到通义千问下载 模型下载慢问题 解决办法 modelscope do…

【数据分析】估算问题(费米估算问题)

1. 费米估算 费米估算问题是一种估算方法&#xff0c;它要求在没有足够信息的情况下&#xff0c;通过合理的假设和简化模型来计算一个复杂问题的大致答案。这种估算方法以意大利物理学家恩里科费米命名&#xff0c;他以能够在没有精确数据的情况下进行快速而准确的估算而闻名。…

ssm基于Web的老年公寓信息管理+jsp

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1 课题背景 1 1.2 课题意义 1 1.3 研究内容 2 第2章 开发环境与技术 3 …

web3还未真正普及,网页已经漂亮的不像话了。

尽管 Web3 还未真正普及开来&#xff0c;但如今的网页已经呈现出令人惊叹的美丽景象。设计师们凭借着先进的技术和无限的创意&#xff0c;打造出一个个精美绝伦的网页界面。 色彩的搭配和谐而富有吸引力&#xff0c;布局合理且充满艺术感。动画效果生动活泼&#xff0c;为用户…

YOLOv8模型改进 第七讲 一种新颖的注意力机制 Outlook Attention

随着目标检测技术的不断发展&#xff0c;YOLOv8 作为最新一代的目标检测模型&#xff0c;已经在多个基准数据集上展现了其卓越的性能。然而&#xff0c;在复杂场景中&#xff0c;如何进一步提升模型的检测精度和鲁棒性依然是一个重要挑战。本文将探讨将 Outlook Attention 机制…

头戴式耳机300元预算选择有哪些?头戴式耳机300元左右五款推荐!

晚上下班或周末在家&#xff0c;想要沉浸式观影、游戏&#xff0c;肯定少不了一款头戴式耳机&#xff0c;它的两个大耳罩既不会像入耳式耳机那样对耳仓产生压迫不适感&#xff0c;也能全面包裹耳朵必要时尽可能的隔绝外界环境音&#xff0c;比那种把耳朵开放在外的骨传导耳机更…

FreeRtos到底是什么?

一&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统 FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统&#xff0c;功能包括&#xff1a;任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等&…

lua脚本使用cjson转换json时,空数组[]变成了空对象{}

一、前言 项目lua使用工具&#xff1a;cjson 问题&#xff1a;reids中部分数据的json key存在为[]的值&#xff0c;使用cjson进行解析的时候将原本空数组[]解析成了空对象{} 目标&#xff1a;原本[] 转 [] 二、解决方案 在使用cjson类库时&#xff0c;先配置json转换要求 -…

信息与计算科学:“数学 + 计算机”,奏响未来科技新乐章

在当今科技飞速发展的时代&#xff0c;有一个专业如同一颗闪耀的新星&#xff0c;散发着独特的魅力&#xff0c;那就是信息与计算科学专业。 一、专业全貌&#xff1a;追根溯源&#xff0c;领略交叉之美 &#xff08;一&#xff09;专业的诞生与发展 1998 年&#xff0c;教育…

线上代码调试,使用Chorme的请求mock

前端页面上展示的数据有问题&#xff0c;第一反应肯定是要验证是不是接口返回的数据的问题 可以直接利用谷歌浏览器更改接口返回的返回值 如何使用谷歌浏览器mock请求 mock一个请求&#xff0c;我们首先需要打开浏览器的Network面板&#xff0c;找到请求后&#xff0c;点击鼠标…

【Python异常处理】详解Python中的异常捕获和处理!

【Python异常处理】详解Python中的异常捕获和处理&#xff01; 在编写 Python 程序时&#xff0c;异常是不可避免的。无论是输入错误、资源不可用&#xff0c;还是其他逻辑问题&#xff0c;都会导致程序中断。为了编写更健壮的代码&#xff0c;理解并使用 Python 中的异常捕获…

解密1688详情 API 接口:获取与运用指南

1688&#xff08;阿里巴巴中国站&#xff09;作为国内领先的B2B电子商务平台&#xff0c;为企业提供商品批发、采购等业务。随着电子商务的快速发展&#xff0c;企业对于数据的需求日益增长。为了帮助企业更高效地获取商品信息&#xff0c;1688提供了丰富的API接口&#xff0c;…

华为eNSP实验:交换机流量控制之流量抑制

一、交换机流量控制之流量抑制 流量抑制是一种网络管理技术&#xff0c;用于防止过量的数据流通过网络设备&#xff0c;从而避免网络拥塞和性能下降。具体如下&#xff1a; 基本原理&#xff1a; 流量抑制通过设置特定的阈值来限制网络中的数据流量。当某个端口或接口的入站流…

第三课:python学习之安装pygame

首先确定自己的python已经将环境变量配置完成 第二步&#xff1a;敲击python命令看环境变量是否配置成功 第三步&#xff1a;敲击命令pip可以查看pip下有很多的命令&#xff0c;都有提示 第四步&#xff1a;我们开始安装pygame,我们使用pip install pygame命令进行安装 第五步…