STM32入门教程-2023版【3-2】详细讲解实现LED流水灯

关注 + 点赞    不错过精彩内容

图片

大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 

三、LED流水灯

依据电路图连接电路

图片

复制LED闪烁的工程,改个名字叫3-2 LED流水灯

图片

修改部分代码,因为我们连接的都是GPIOA的端口,所以第一句不用变的

图片

接着初始化端口的这一部分,我们流水灯用的是GPIOA的0到7号端口,所以这里要加一些端口,如图所示这样就可以把这三个端口初始化了

图片

为什么可以这样用“|”操作?

在stm32f10x_gpio.h文件中可以看到,各个端口的定义,将各位转化为二进制是0000000000000001、0000000000000010、0000000000000100,这里每一个端口对应着一个位,按位或的操作就相当于0000000000000111

图片

最后,我们还可以看到,这里有个GPIO_Pin_All,它对应的数据就是0xFFFF,也就是所有位都为1,这样就相当于选中了所有的引脚

图片

在这里,除了这个GPIO_Pin可以用按位或的操作方式外,这个时钟控制的这一项,也是可以用按位或的操作有式来选择多个外设的

图片

介绍完按位或,我们就可以在这里使用按位或把这8个引脚都选上,这样就把16个端口全部配置为推挽输出模式

图片

在while中,为了实现同时控制16个端口,我们就可以使用GPIO_Write这个函数了,我们复制过来,第一个参数是GPIOx,我们直接写GPIOA

图片

第二个转到定义看一下,这第二个参数就是直接写到GPIO的ODR寄存器里的

图片

所以我们可以写0x0001,对应二进制就是0000 0000 0000 0001,因为C语言不支持直接写二进制,所以这里只能转换为十六进制来写,这16个二进制分别对应PA0到PA15总共16个端口,最低位对应PA0,然后往上依次是PA1、PA2,一直到PA15

图片

因为是低电平点亮,所以前面再加一个按位取反的符号,这样就是第一个LED点亮,其他都熄灭了

图片

以此类推可以实现8个Led灯的点亮,再加上Delay延时函数,就可以实现8个Led灯的循环点亮,想快一点的话可以让Delay函数延时时间改为100,如:Delay_ms(100);

#include "stm32f10x.h"                  // Device header#include "delay.h" int main(void){                GPIO_InitTypeDef GPIO_Initstructure;        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                GPIO_Initstructure.GPIO_Mode = GPIO_Mode_Out_PP;        //GPIO_Initstructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; 按或取        GPIO_Initstructure.GPIO_Pin = GPIO_Pin_All;        GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_Init(GPIOA, &GPIO_Initstructure);                while(1)        {                        GPIO_Write(GPIOA, ~0x0001); //0000 0000 0000 0001                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0002); //0000 0000 0000 0010                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0004); //0000 0000 0000 0100                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0008); //0000 0000 0000 1000                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0010); //0000 0000 0001 0000                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0020); //0000 0000 0010 0000                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0040); //0000 0000 0100 0000                Delay_ms(500);                GPIO_Write(GPIOA, ~0x0080); //0000 0000 1000 0000                Delay_ms(500);        }}

可以看到LED循环点亮!

图片

作 者 :硬核王同学

------- END ------

关注公众号回复“加群”按规则加入技术交流群  回复“1024”查看更多内容

图片

如果觉得有用请点个免费的赞

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 内容生成pdf文件

1.引入itext7 implementation com.itextpdf:itext7-core:7.1.13上面比较大,可以直接下载需要集成的jar包 implementation files(libs\\layout-7.1.13.jar) implementation files(libs\\kernel-7.1.13.jar) implementation files(libs\\io-7.1.13.jar) implementatio…

亚马逊站内广告位置在哪设置?怎么设置广告位置?-站斧浏览器

亚马逊站内广告位置在哪设置? 亚马逊提供了多种广告类型,包括: Sponsored Products(赞助产品):在搜索结果和商品详情页中展示。 Sponsored Brands(赞助品牌):在搜索结…

C语言快速入门——前景引入

计算机语言 计算机语言发展计算机的世界操作系统概述计算机编程语言C语言开发环境部署 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! 文章来自:https://www.itbaima.cn/document 计算机语言发展 在学习C语言之前&…

进程的介绍及相关命令

首先,先了解一下计算机五大性能的命令 cpu top w 内存 top free 硬盘剩余 df 硬盘读写性能 iostat 网络带宽 iftop 一,进程与程序 1,什么是程序 : 硬盘上躺着,执行特点任务的一串代码 2&am…

VS2010 ,创建DLL,并调用DLL

一、创建DLL 1. 新建Win32空项目 项目命名为genxls。 2. 创建DLL空项目 3. 头文件,新建项, genxls.h 头文件内容为 // genxls.h #ifndef _DLL_API #define _DLL_API _declspec(dllexport) #else #define _DLL_API _declspec(dllimport) #endif _DLL_A…

我不想学JAVA---------JAVA和C的区别

前言 我一个研究方向是SLAM的为什么要来学JAVA。 从九月份开学到现在,已经学了Linux,数据结构,SLAM,C的基础操作,期间还参与编写了一本VHDL的教材。还有上课、考试什么的其他杂七杂八的事情就不说了。 读研好苦逼&…

IPv6邻居发现协议(NDP)---路由发现

IPv6路由发现(前缀公告) 邻居发现 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻…

利用蚁剑钓鱼上线CS

前言 ​ 中国蚁剑使用Electron构建客户端软件,Electron实现上用的是Node.js,并且Node.js能执行系统命令,故可以利用蚁剑的webshell页面嵌入js来直接执行命令,进而钓鱼来上线CS。(类似Goby,Goby也是使用Ele…

小迪安全第一天

一、常用的专业术语 参考: https://www.cnblogs.com/sunny11/p/13583083.html POC(proof of concept)验证漏洞的代码EXP(exploit) 利用对一段漏洞代码的利用Playload:有效载荷,当利用exploit成功后如何通过一个管道把这个权限给…

制药企业符合CSV验证需要注意什么?

在制药行业中,计算机化系统验证(CSV)是确保生产过程的合规性和数据完整性的关键要素。通过CSV验证,制药企业可以保证其计算机化系统的可靠性和合规性,从而确保产品质量和患者安全。然而,符合CSV验证并不是一…

【通讯录案例-延时调用-第三方框架-HUD框架 Objective-C语言】

一、我们接着来看这个通讯录啊,上节课我们说到这里, 1.给它加个注释,// 当用户名和密码正确的时候 进行跳转 我们现在已经把这个判断用户名和密码,登录的这个,以及Segue的简单使用,我们已经说完了, 好,然后呢,在这个里边儿啊, 我们呢,示例程序里边儿,是这个样子的…

C#自动删除20天前文件夹图片

资料夹如下,需求为自动删除20天前保存的图片 如下为该方法函数,保留天数可以自定义 public static void CleanFile(){string path $"{SvMaster.DataPath}\\Image";\\文件夹路径DirectoryInfo dir new DirectoryInfo(path);FileSystemInfo[] …

CEC2017(Python):七种算法(RFO、DBO、HHO、SSA、DE、GWO、OOA)求解CEC2017

一、7种算法简介 1、红狐优化算法RFO 2、蜣螂优化算法DBO 3、哈里斯鹰优化算法HHO 4、麻雀搜索算法SSA 5、差分进化算法DE 6、灰狼优化算法GWO 7、鱼鹰优化算法OOA 二、CEC2017简介 参考文献: [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., &…

亚马逊促销效果不好怎么办?亚马逊促销规则是什么?-站斧浏览器

亚马逊促销效果不好怎么办? 分析原因:首先需要深入分析促销效果不佳的原因。可能是促销活动的设计不够吸引人,或者是目标受众定位不准确。 调整策略:根据分析结果调整促销策略。例如,优化广告文案、更改推广时段或调…

CentOS7部署Kafka

CentOS7部署Kafka 一、部署1、前置条件2、下载与解压3、修改配置4、启动kafka二、使用详解1、创建一个主题2、展示所有主题3、启动消费端接收消息4、生产端发送消息三、代码集成pom.xmlapplication.propertiesKafkaConfiguration.javaKafkaConsumer.javaKafkaProducer.javaVehi…

什么是软件安全性测试?如何进行安全测试?

一、什么是软件安全性测试? 软件安全性测试是指对软件系统中的安全漏洞进行检测和评估的过程。其目的是为了确保软件系统在面对各种安全威胁时能够保持其功能的完整性、可用性和机密性。 二、软件安全性测试可以通过以下几个步骤来进行: 1. 需求分析&a…

python的初识(print+intput函数和变量的基本运用)

#主页传送:江南的江 #每日鸡汤:你要知是非以不辩为解脱,烦恼以忍辱为智慧,办事以尽力为有功,处人以真诚为品格。做人的方略是:把好自己的口,明了心中的事,干好手里的活,走…

Uncaught TypeError: Cannot read property ‘snj‘ of null

项目场景: 项目相关背景: 调试项目时,控制台出现红色报错信息 问题描述 问题: 调试项目时,控制台出现如下所示的报错信息: Uncaught TypeError: Cannot read property snj of nullat T.Inj.Ya [as Inj…

软件测试基础理论学习-软件测试方法论

软件测试方法论 软件测试的方法应该建立在不同的软件测试类型上,不同的测试类型会存在不同的方法。本文以软件测试中常见的黑盒测试为例,简述常见软件测试方法。 黑盒测试用例设计方法包括等价类划分法、边界值分析法、因果图法、判定表驱动法、正交试…

C++|【25】构造函数和【26】析构函数

为什么需要构造函数 创造一个实体类,而未将其内部变量提前赋予新值,并强行进行调用,将会随机分配上一个新的值。 而使用构造函数可以确保,可以使得变量有一个稳定的初始值。 Init函数需要人为去调用,而采用构造函数&am…