江协STM32:点亮第一个LED灯和流水灯

ee9ee087cb7b4b52a7a4bf3db90f74ca.png

很多单片机都是高电平弱驱动,低电平强驱动,所以这里是低电平有效

 

点亮一个LED灯

操作STM32的GPIO需要三个操作:

第一个使用RCC开启GPIO的时钟

第二步使用GPIO_Init函数初始化GPIO

第三步使用输出或输入函数控制GPIO

 

 

1.使用RCC开启GPIO的时钟

 

1.1.RCC的库函数

点击

efca2beb819f4f96880c86b0ca36e6fa.png

c6ba051a4c4b4d219a3fe4a30482c467.pngdc00826cd71a4f32a1be1ff2a6e62d5b.png主要用到这三个函数

904de417ed0a4563b54759ecbc9253e4.png

1126这个函数:第一个参数选择外设,第二个参数使能或失能

ac32b54ab851453f8cebc0c9414018f6.png

示例 开启GPIOA的时钟

1.2.GPIO库函数:

还是Librayry里面

0b8ac10f31df46238bf0dd26f248db57.png

7c1e600ee75648a583cb2a0a3f3105c8.png

GPIO全部函数

349行函数调用之后,所指定的GPIO函数外设就会被复位,这个就是这个函数的用途

350行函数,作用:复位AFIO外设

351行函数,非常重要,这个函数的作用是用结构体的参数来初始化GPIO口,我们需要先定义一个结构体变量,再给结构体赋值,最后调用这个函数,这个函数内部就会自动读取结构体的值,然哈自动把外设的各个参数配置好

 

352行函数,这个函数可以把结构体变量赋给一个默认值

353-356这四个函数就是GPIO的读取函数

357-360这四个就是GPIO的写入函数

353-360这些函数就可以实现读写GPIO口的功能

361-366目前不用

 

这里面最重要的函数是:351,353-360

 

LED灯程序编写:

489d7951123548efb84f7359db1e88f6.png2.1.首先调用RCC里面的APB2外设时钟控制函数

22ab690ab30948d891cedd5e86199d7d.png因为要点亮PA0口的LED,所以选择RCC_APB2Periph GPIOA这一项

ac32b54ab851453f8cebc0c9414018f6.png

第二个参数选择ENABLE,放到第二个参数

这样时钟就开启了

2.2.然后调用GPIO_Init函数

08491b9a24d64decae23223cc3506b3f.png

28ff1bfc8538455d9ca6555078ebb016.png

efd8efd6d12e4baeb06d6a446bd375b3.png第一个参数选择GPIOA,第二个参数是一个结构体

11d70070b3d54eae8d881d7abc3897f3.png把结构体定义出来

b9acaa60d6f54c33a45bc78b7923b91b.png然后用点把结构体的成员都定义出来

a59385fc759443bcb8a8f88cfb67cb0d.png

然后从8开始到10都是一个套路,右键跳转,看说明,复制粘贴一下参数

6aa8109a662b437f82a52f84b36b93df.png

选择这个,Ctrl+F搜索一下,然后跳转下图

d19af6cfc6484de6b710bf7fb71cbbfc.png这里就是GPIO的八种工作模式

AIN是模拟输入,IN_FLOATING是浮空输入,IPD是下拉输入,IPU是上拉输入

OUT_PD是开漏输出,OUT_PP是推挽输出,AF_OD是复用开漏,AF_PP是复用推挽

e7599225556745b480eae59c1e40f1c9.png

点灯是推挽输出,所以复制OUT_PP

推挽输出:可以高电平也可以低电平

bc58b16a792d4577af888d1ad16557a5.png

接下来GPIO_Pin选择引脚,然后继续右键跳转

317b9fa8c01642bc95bad2eabaeb5240.png选择menber

0621d6c3715a49a4ba20c815eef11edf.png然后选择这个,Ctrl+F然后跳转下图

c42e76cf42774671a9754585cd7b07b2.png这里因为用的是GPIOA外设的0号引脚,所以选择GPIO_Pin_0

1ca4d782900e4bab9349f59ac594caf8.png

这样就设置好引脚了

b5dfbdb4e0774babb0a442fd32dfb894.png

然后设置第三个,还是右键跳转

ae398349d9b64426b32d7d682a335225.png

Ctil+F搜索,跳转下面页面

94cd352432494de797d98a9e47d9c3db.png输出速度选50HZ就行

464f5ed0ec074427a26bb18676480c8c.png

最后把GPIO初始化结构体的地址放到GPIO_Init的第二个参数就行了,这样GPIO初始化就完成了

当这个GPIO_Inlt函数执行完,这个GPIO外设的0号引脚就自动被配置为推挽输出,50HZ的速度了

 

它内部的主要执行逻辑就是读取结构体的参数,执行一堆判断和运算,最后写入到GPIO的配置寄存器

上面步骤已经把GPIO初始化完成,下面就可以使用输入输出函数了

ecffa8a086e144c1a71cc20443f776ee.png

2.3.这次试验就用这四个输出函数

GPIO_Setbits:

第一个参数是GPIOx,也就是设置IO口,例如如果是PA那就是GPIOA,第二个参数是GPIO_Pin,这个函数可以把指定的端口设置为电平

GPIO_ResetBits:

第一个参数是GPIOx,也就是设置IO口,例如如果是PA那就是GPIOA,第二个参数是GPIO_Pin,这个函数可以把指定的端口设置为电平

GPIO_Writebit:

这个函数有三个参数,前两个跟上面一样,第三个是BitValue,这个是根据第三个参数的值来设置指定的端口

GPIO_Write

第一个参数是GPIOx,也就是设置IO口,第二个参数是PortVal,这个函数可以同时对16个端口进行写入操作

 

 

开始实践

用一下第一个函数

de54bfd64af8465187290aceb477bfa1.png看注释

第一个GPIOx,x可以是A到G

第二个GPIO_Pin_x,x可以是0到15

3089c2c6d20e495eb68c3e1a6e2f9fd7.png这样就是控制了PA0

f6e23cc0fdb24df3bf8e31f0ea5c06a2.png这个函数是把指定端口设置低电平,所以灯亮了

56a3d06471454575a8a17eb7ed0cc9ac.png再来试试这个函数

e7eff00c720245b6ab63eb168482b71a.png

这个函数是把指定端口设置高电平,所以灯灭了

然后再来试试第三个函数

c1079342e6124af892f9db6687800a7a.png

第三个参数介绍的是指定写入的数据值,这个参数可以是BitAction这个枚举中的一个值

fc1365ae8bb2408a99c6febf4aa1e057.pngBit_RESET是清除端口值,也就是置低电平

Bit_SET是设置端口值,也就是置高电平

e3afb8ae84b740169f97b12a9f37c8c2.png写Bit_RESET

2cf3cfcade014828822d7bd8069e1eaf.png灯又亮了

 

596587e1aa2f4567b3baadd13d2ebfd4.pngBit_SET

6eb35531053b4aa39eeced52b5db44f3.png

灯又灭了

这就是这三个函数的用法

 

流水灯实验

0c0c318fe2ed4c03a9ebba27a9696b65.png

还是之前LED的文件,复制粘贴一下

e9292fbedbb74d8c95a67e496b303ffd.png

流水灯是用GPIOA的0-7号端口,所以这里要加端口1-7,在GPIO_Pin_0后面或运算GPIO_Pin_1或运算GPIO_Pin_2,这样就可以一次性把三个端口一次性都初始化了

f172220da6b545e08c9e78301e5edc3c.png

为什么可以这样呢,我们看这个,这里可以看到,Pin0对应的是0x0001

cb6e308db1154b14867ae729825cbed8.png

这个是二进制形式

以此类推,每个端口对应一个位,如果把它们进行按位或的操作,这就是按位或的操作逻辑

比如Pin0,Pin1,Pin2按位或,结果就是0111,这样就相当于同时选中了三个端口

ad35805198be4c3891cded287de5bc50.png

这里还有一个这个函数,GPIO_Pin_All,它对应的数据就是0xFFFF,也就是所有位都为1,这样就相当于选中了所有的引脚

 

b7961ed8a18c4bbabe95c667e615519a.png

时钟控制这一项,也是可以利用按位或的操作方式来选择多个外设的,数据规律是每一位对应一个外设

 

a65d70db6993470aa71e1f03e08cb586.png

这个也可以利用按位或选择多个引脚,所以Setbit+了个s

6506ae4c1e884659889b914204ced7c3.png

这个函数也是一样的意思

 

97ca45a17e23440db7c3a18000e58d00.png

这里的话就直接用GPIO_Pin_Alll了,这样就把16个端口全部配置为了推挽输出模式

20b53d024783427f8158d9abdc01583f.png为了现在同时控制16个端口,我们就可以使用GPIO_Write这个函数了

GPIO_Write

第一个参数是GPIOx

610fdfaf6ec84725967d2edb95df46dd.png

跳转看看,这里写的是,指定写到输出数据寄存器的值

1f4e31b5d98d412f90196a0450f73375.png可以看到,这第二个参数就是直接写道GPIO的ODR寄存器里面的

6d7bcd2250a4453eace1811153e3fd03.png所以直接写0x0001,因为c语言不支持写二进制,所以这里只能写十六进制

fa2fe6770bdd4397980eeabbaaf4b218.png最低位对应PA0,然后往上依次是PA1,PA2

efdac11ca0264e789e1479a737723932.png

一直到PA15

93e5dcba78bd4ea38fb355d846c8d88f.png

因为是低电平点亮,所以要在前面再加按位取反的符号

 

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

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

相关文章

游戏开发笔记:游戏海外版本时区问题(解释时区问题,分解为js写法和lua写法来分析记录,整理出对应语言的相关函数方法。)

对于海外游戏而言,与时间相关的功能,都不能忽略时区的计算。根据 ‘ 服务端资源是有限的,客户端资源是无穷无尽的 ’的定义来说,基本上时区包括时间的计算都是由客户端来进行计算,今天内容也是围绕客户端来展开。 时区算法常见的时间描述时区需要计算的点在lua语言中的写…

Docker数据卷挂载

一、容器与数据耦合的问题: 数据卷是虚拟的,不真实存在的,它指向文件中的文件夹 ,属主机文件系统通过数据卷和容器数据进行联系,你改变我也改变。 解决办法: 对宿主机文件系统内的文件进行修改,会立刻反应…

HBase的Python API操作(happybase)

一、Windows下安装Python库:happyhbase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行…

Day23:事务管理、显示评论、添加评论

事务管理 事务的定义 什么是事务 事务是由N步数据库操作序列组成的逻辑执行单元,这系列操作要么全执行,要么全放弃执行。 事务的特性(ACID) 原子性(Atomicity):事务是应用中不可再分的最小执行体(事务中部分执行失败就会回滚 。一致性(C…

Windows入侵排查

目录 0x00 前言 0x01 入侵排查思路 1.1 检查系统账号安全 1.2 检查异常端口、进程 1.3 检查启动项、计划任务、服务 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时…

6_相机坐标系_相机4个坐标系详述

相机系列文章是用来记录使用opencv3来完成单目相机和6轴机械臂手眼标定。本人吃饭的主职是linux下6轴机械臂相关应用开发。但对于机械臂运动学、相机应用等都非常感兴趣,所以对一些线性代数基础薄弱又想深入了解机械臂内部运算的同志比较有体会。由于是探索性学习&a…

9.windows ubuntu 子系统,centrifuge:微生物物种分类。

上次我们用了karken2和bracken进行了物种分类,这次我们使用centrifuge. Centrifuge 是一种用于快速和准确进行微生物分类和物种鉴定的软件。其主要功能包括: 快速分类和物种鉴定: Centrifuge 可以对高通量测序数据(如 metagenomic 或 RNA-Se…

2018年亚马逊云科技推出基于Arm的定制芯片实例

2018年,亚马逊云技术推出了基于Arm的定制芯片。 据相关数据显示,基于Arm的性价比比基于x86的同类实例高出40%。 这打破了对 x86 的依赖,开创了架构的新时代,现在能够支持多种配置的密集计算任务。 这些举措为亚马逊云技术的其他创…

OSPF-区域间路由计算

一、概述 前面学习了我们学习了Router-LSA和Network-LSA,它们都只能在区域内进行泛洪,而且我们之前一直主要是单区域学习。OSPF的核心是骨干区域Area 0,其它都为非骨干区域。但是在大型网络中,单区域OSPF会存在一定的问题&#xf…

HWOD:九键输入法的转换

一、知识点 A的ASCII码是65,Z的ASCII码是90 a的ASCII码是97,z的ASCII码是122 从z到a的反循环,用26求余数 二、题目 1、描述 九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, …

企微获客助手功能,行为触发如何实现回传的?

获客助手,这个听起来就相当酷炫的名字,它实际上是一个帮助企业将推广流量快速导入企业微信的神器。通过它,企业可以吸引越来越多的用户加为好友,从而建立起更紧密的客户关系。但是,如何进一步提升导入企业微信的流量质…

【机器学习之旅】概念启程、步骤前行、分类掌握与实践落地

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

“浙江制造”认证+立标,开拓“宁波”未来之旅

🤓高品质高质量的“代名词”: 🙎🏻‍♂️“浙江制造”是以“区域品牌、🍉先进标准、市场认证、国际认同”为核心,🍅以“标准认证”为手段,集质量、🥕技术、服务、信誉为…

【深度学习|基础算法】2.AlexNet学习记录

AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 5、模型训练6、导出onnx模型 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计,模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠…

在ubuntu上编译prometheus

大纲 系统环境编译环境默认的版本GolangNodejsNPM 更新Nodejs和NPMNodejsNPM 编译运行 prometheus的编译并不难,核心是要将编译环境配置到符合要求的地步,否则就会出现各种错误,而且难以排查。 我们主要需要关心go、npm和nodejs的版本。 以下…

Chrome 插件 tabs API 解析

Chrome.tabs API 解析 使用 chrome.tabs API 与浏览器的标签页系统进行交互,可以使用此 API 在浏览器中创建、修改和重新排列标签页 Tabs API 不仅提供操作和管理标签页的功能,还可以检测标签页的语言、截取屏幕截图,以及与标签页的内容脚本…

批量删除 rabbitmq中随机队列

批量删除 amq.gen–* 随机队列 操作错误产生了无效随机队列,需要批量删除 过滤列出指定amq.gen–队列 # 列出 指定 vhost/qq 以amq.gen开头的所有队列 rabbitmqctl list_queues --vhost / | grep ^amq.gen-# 批量删除队列 #由于list_queues会列出队列名称以及对应…

【SAP2000】在框架结构中应用分布式面板荷载Applying Distributed Panel Loads to Frame Structures

在框架结构中应用分布式面板荷载 Applying Distributed Panel Loads to Frame Structures 使用"Uniform to Frame"选项,可以简单地将荷载用于更多样化的情况。 With the “Uniform to Frame” option, loads can be easily used for a greater diversity of situat…

Win11电脑cpu温度过高怎么办呢

Win11电脑cpu温度过高怎么办呢?有时候我们感觉电脑发烫,担心电脑过烫会不会损坏。正常情况下,cpu的温度在45~65度之间,但不排除电脑同时开了太多软件,或者在玩吃鸡、英雄联盟等的大型游戏而导致温度超过85度。只要最高…

亚信安全荣获2023年度5G创新应用评优活动两项大奖

近日,“关于2023 年度5G 创新应用评优活动评选结果”正式公布,亚信安全凭借在5G安全领域的深厚积累和创新实践,成功荣获“5G技术创新的优秀代表”和“5G应用创新的杰出实践”两项大奖。 面向异构安全能力的5G安全自动化响应系统 作为5G技术创…