江协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语言中的写…

Vue 模版编译原理

当我们使用Vue编写完一个组件以后,Vue会根据模版编译一个render函数,调用render函数生成虚拟DOM,然后将虚拟DOM映射成真实DOM 当数据发生变化时,Vue会触发更新视图,调用render函数返回新的虚拟DOM,对比新旧…

重置reactive对象(深拷贝与浅拷贝)

需求&#xff0c;点击不同登录方式&#xff0c;该图标高亮&#xff0c;别的图标置灰。&#xff08;高亮和置灰都有相应的引入图片&#xff09; <div class"other_icon"><img click"changeLoginType(item.index)" v-for"item in imgAddress&…

Docker数据卷挂载

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

HBase的Python API操作(happybase)

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

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

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

Windows入侵排查

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

adb: error: failed to get feature set: no devices/emulators found

这个错误信息 adb: error: failed to get feature set: no devices/emulators found 表明 adb 工具无法找到任何连接的Android设备或模拟器来执行安装操作。这通常发生在以下几种情况&#xff1a; 没有设备连接&#xff1a;确保你的Android设备已经通过USB线连接到电脑&#xf…

Scikit-learn 数据挖掘和数据分析工具的使用指南

Scikit-learn是Python中一款非常强大且广泛使用的数据挖掘和数据分析工具。它为数据挖掘和数据分析任务提供了简单高效的接口&#xff0c;涵盖了分类、回归、聚类、降维、模型选择等多个方面。以下是一份详细的使用指南&#xff0c;帮助用户更好地理解和使用Scikit-learn。 一…

js如何遍历查询一个颗树

近段时间去面试的时候&#xff0c;被面试官问到如何遍历查询一个颗树的时候&#xff0c;可能最近自己看了数据结构的书之后&#xff0c;隐隐约约就想到二叉树的三种排序&#xff08;前序、中序、后序&#xff09;&#xff0c;但是当时自己没有想起这三种排序的名字&#xff0c;…

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

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

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

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

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

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

OSPF-区域间路由计算

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

linux的git命令学习[常见命令]

linux的git命令学习 工作做使用vscode下的git插件来管理代码的。 #安装git apt-get install git #配置ssh密钥 ssh-keygen -t rsa -C "name"cat ~/.ssh/id_rsa.pub#复制ssh密钥到github账号配置好就可以进行ssh克隆了 #配置账号&#xff0c;邮箱 git config -…

HWOD:九键输入法的转换

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

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

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

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

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;机器学习 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

解锁交互魔法:探索Vue中的v-on指令!

&#x1f31f; Vue开发者必看&#xff01; &#x1f31f; 想要为你的Vue应用添加交互性&#xff1f;那就要了解 Vue 的神奇技能之一&#xff1a;v-on指令&#xff01;&#x1f680; &#x1f3af; v-on指令&#xff1a;在Vue中&#xff0c;v-on指令用于监听DOM事件&#xff0…

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

&#x1f913;高品质高质量的“代名词”&#xff1a; &#x1f64e;&#x1f3fb;‍♂️“浙江制造”是以“区域品牌、&#x1f349;先进标准、市场认证、国际认同”为核心&#xff0c;&#x1f345;以“标准认证”为手段&#xff0c;集质量、&#x1f955;技术、服务、信誉为…