嵌入式:ARM Day4

news2024/11/18 19:35:58

一、自己编写代码实现三盏灯点亮

 源码:


.text 
.global _start
_start: 			@进行一次初始化
	bl RCC_INIT
	bl LED1_INIT
	bl LED2_INIT
	bl LED3_INIT
	b loop

loop: 				@循环开关灯
	bl LED1_ON
	bl delay_1s
	bl LED1_OFF
	bl delay_1s
	bl LED2_ON
	bl delay_1s
	bl LED2_OFF
	bl delay_1s
	bl LED3_ON
	bl delay_1s
	bl LED3_OFF
	bl delay_1s
	bl LED1_ON
	bl LED2_ON
	bl LED3_ON
	bl delay_1s
	bl LED1_OFF
	bl LED2_OFF
	bl LED3_OFF
	bl delay_1s
	b loop


RCC_INIT:
	@使能对应控制器,通过RCC_MP_AHB4ENSETR寄存器进行设置
	@引脚为E第[4]位 置1,引脚为F寄存器第[5]位 置1
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0x3<<4)   @将P引脚与F引脚的寄存器一起使能
	str r1,[r0]
	mov pc,lr

@LED1的所有初始化工作
LED1_INIT:
	@1.通过GPIOx_MODER寄存器将PE10引脚设置为输出模式,并将[21:20]位 置01
	ldr r0,=0x50006000
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	orr r1,r1,#(0x1<<20)
	str r1,[r0]

	@2.通过GPIOx_OTYPER寄存器将PE10引脚设置为推挽输出模式,并将第[10]位 置0
	ldr r0,=0x50006004
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]

	@3.通过GPIOx_OSPEEDR寄存器将PE10引脚设置为低速输出模式,并将第[21:20]位 置00
	ldr r0,=0x50006008
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

	@4.通过GPIOx_PUPDR寄存器将PE10引脚设置为禁止上下拉电阻模式,并将第[21:20]位 置00
	ldr r0,=0x5000600C
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]
	mov pc,lr

@LED2的所有初始化工作
LED2_INIT:
	@1.通过GPIOx_MODER寄存器将PF10引脚设置为输出模式,并将[21:20]位 置01
	ldr r0,=0x50007000
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	orr r1,r1,#(0x1<<20)
	str r1,[r0]

	@2.通过GPIOx_OTYPER寄存器将PF10引脚设置为推挽输出模式,并将第[10]位 置0
	ldr r0,=0x50007004
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]

	@3.通过GPIOx_OSPEEDR寄存器将PF10引脚设置为低速输出模式,并将第[21:20]位 置00
	ldr r0,=0x50007008
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]

	@4.通过GPIOx_PUPDR寄存器将PF10引脚设置为禁止上下拉电阻模式,并将第[21:20]位 置00
	ldr r0,=0x5000700C
	ldr r1,[r0]
	bic r1,r1,#(0x3<<20)
	str r1,[r0]
	mov pc,lr

@LED3的所有初始化工作
LED3_INIT:
	@1.通过GPIOx_MODER寄存器将PE8引脚设置为输出模式,并将[17:16]位 置01
	ldr r0,=0x50006000
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	orr r1,r1,#(0x1<<16)
	str r1,[r0]

	@2.通过GPIOx_OTYPER寄存器将PE8引脚设置为推挽输出模式,并将第[8]位 置0
	ldr r0,=0x50006004
	ldr r1,[r0]
	bic r1,r1,#(0x1<<8)
	str r1,[r0]

	@3.通过GPIOx_OSPEEDR寄存器将PE8引脚设置为低速输出模式,并将第[17:16]位 置00
	ldr r0,=0x50006008
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	str r1,[r0]

	@4.通过GPIOx_PUPDR寄存器将PE8引脚设置为禁止上下拉电阻模式,并将第[17:16]位 置00
	ldr r0,=0x5000600C
	ldr r1,[r0]
	bic r1,r1,#(0x3<<16)
	str r1,[r0]
	mov pc,lr

@点亮LED1灯
LED1_ON:
	@.通过GPIOx_ODR寄存器将PE10引脚设置为输出高电平模式,并将第[10]位 置1 
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@熄灭LED1灯
LED1_OFF:
	@.通过GPIOx_ODR寄存器将PE10引脚设置为输出低电平模式,并将第[10]位 置0 
	ldr r0,=0x50006014
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@点亮LED2灯
LED2_ON:
	@.通过GPIOx_ODR寄存器将PF10引脚设置为输出高电平模式,并将第[10]位 置1 
	ldr r0,=0x50007014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@熄灭LED2灯
LED2_OFF:
	@.通过GPIOx_ODR寄存器将PF10引脚设置为输出低电平模式,并将第[10]位 置0 
	ldr r0,=0x50007014
	ldr r1,[r0]
	bic r1,r1,#(0x1<<10)
	str r1,[r0]
	mov pc,lr

@点亮LED3灯
LED3_ON:
	@.通过GPIOx_ODR寄存器将PE8引脚设置为输出高电平模式,并将第[8]位 置1 
	ldr r0,=0x50006014
	ldr r1,[r0]
	orr r1,r1,#(0x1<<8)
	str r1,[r0]
	mov pc,lr

@熄灭LED3灯
LED3_OFF:
	@.通过GPIOx_ODR寄存器将PE8引脚设置为输出低电平模式,并将第[8]位 置0 
	ldr r0,=0x50006014
	ldr r1,[r0]
	bic r1,r1,#(0x1<<8)
	str r1,[r0]
	mov pc,lr

@ 大概1s的延时函数
delay_1s:
	mov r3, #0x10000000
	mm:
	cmp r3, #0
	subne r3, r3, #1
	bne mm
	mov pc, lr

.end

二、在C语言中Ox5000A28如何表示一块地址空间

int *ptr = (int *)0x5000A28

        在上述代码中,int *ptr定义了一个指向整数类型的指针ptr,(int *)将地址0x5000A28强制转换为整数类型的指针,后续可以通过*ptr访问与修改该地址空间中的值。

三、思维导图

 

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

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

相关文章

13 Web全栈 pnpm

什么是pnpm&#xff1f; 可以理解成performant npm缩写 速度快、节省磁盘空间的软件包管理器 特点 快速- pnpm比其他包管理器快2倍高效- node_modules中的文件链接自特定的内容寻址存储库支持monorepos- 内置支持单仓多包严格- pnpm默认创建了一个非平铺的node_modules 因此代…

Spring中循环依赖解决方案

循环依赖 循环依赖是Spring框架中常见的问题之一&#xff0c;当两个或多个类相互引用对方时&#xff0c;就会出现循环依赖的情况。这种情况下&#xff0c;Spring框架无法确定哪个类应该先实例化和初始化&#xff0c;从而导致异常。常见的解决方法有&#xff1a;构造函数注入、s…

STM32单片机通过串口烧录hex程序

我之前买过一个STM32最小程序单片机&#xff0c;原来下载51单片机都是使用串口方式&#xff0c;这里也通过串口方式烧录STM32单片机&#xff0c;还需要借助一个USB TO TTL工具。 USB TO TTL工具类似一个U盘工具&#xff0c;只不过它另一端是接线&#xff0c;一般电脑会自动安装…

C++入门篇9---list

list是带头双向循环链表 一、list的相关接口及其功能 1. 构造函数 函数声明功能说明list(size_type n,const value_type& valvalue_type())构造的list中包含n个值为val的元素list()构造空的listlist(const list& x)拷贝构造list(InputIterator first, InputIterator…

推荐系统系列之推荐系统概览(上)

在当今信息化高速发展的时代&#xff0c;推荐系统是一个热门的话题和技术领域&#xff0c;一些云厂商也提供了推荐系统的SaaS服务比如亚马逊云科技的 Amazon Personalize 来解决客户从无到有迅速构建推荐系统的痛点和难点。在我们的日常生活中&#xff0c;推荐系统随处可见&…

论文阅读 - Understanding Diffusion Models: A Unified Perspective

文章目录 1 概述2 背景知识2.1 直观的例子2.2 Evidence Lower Bound(ELBO)2.3 Variational Autoencoders(VAE)2.4 Hierachical Variational Autoencoders(HVAE) 3 Variational Diffusion Models(VDM)4 三个等价的解释4.1 预测图片4.2 预测噪声4.3 预测分数 5 Guidance5.1 Class…

【项目设计】从零实现一个高并发内存池

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《项目设计》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录 &#x1f449;项目介绍&…

005-Spring 扩展点 :PostProcess

目录 Spring 扩展点 &#xff1a;PostProcess介绍PostProcess大纲文字明细使用方法示例Autowired 功能实现Resource 功能实现 后记 Spring 扩展点 &#xff1a;PostProcess 介绍 Spring 核心做的事情其实很简单就是&#xff1a;控制反转和依赖注入 也就是把 Class 解析为 Bea…

npm install ffi各种失败,换命令npm i ffi-napi成功

网上各种帖子安装ffi&#xff0c;基本上到了windows build tools这里会卡住。 使用命令npm install --global --production windows-build-tools 安装报错信息如下&#xff1a; PS E:\codes\nodejsPath\tcpTest> npm install --global --production windows-build-tools …

06-加密算法

加密算法 一、前言知识1、加密解密2、MD5&#xff08;最常见&#xff09;3、SHA4、进制5、时间戳6、URL编码7、base64编码8、unescape编码9、AES加密10、DES&#xff08;类似于base64&#xff09; 二、常见加密形式算法解析三、演示案例1、某 CTF 比赛题目解析2、某 CMS 密码加…

【不带权重的TOPSIS模型详解】——数学建模

目录索引 定义&#xff1a;问题引入&#xff1a;不合理之处&#xff1a;进行修改&#xff1a; 指标分类&#xff1a;指标正向化&#xff1a;极小型指标正向化公式&#xff1a;中间型指标正向化公式&#xff1a;区间型指标正向化公式&#xff1a; 标准化处理(消去单位)&#xff…

pytorch报错torch.cuda.is_available()结果false处理方法

文章目录 问题及起因问题起因 解决方法 问题及起因 问题 前几天跑项目&#xff0c;笔记本上的GPU可以正常跑起来。要跑VAE模型&#xff0c;重新安装了torch,GPU就无法使用了&#xff0c;我重新安装了 cuda,torch.cuda.is_available()的结果依然是False。 起因 配置项目环境…

测试人员的BUG防不胜防

“灵异事件&#xff01;程序里发现了新Bug但是它正常运行啦&#xff01;”、“谁敢信&#xff0c;我电脑死机竟然是因为放青藏高原的时候硬盘共振振幅太大了——”…… 人生处处有Bug&#xff0c;哪一个最令你目瞪口呆&#xff0c;久久不能忘怀&#xff1f;今天就来浅浅分享一…

Spring系列篇--关于IOC【控制反转】的详解

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么是Spring 二.Spring的特点 三.什…

TCP服务器—实现数据通信

目录 前言 1.接口介绍 2.编写服务器 3.编写客户端 4.编译链接 5.测试 6.总结 前言 今天我们要介绍的是使用TCP协议实现数据通信&#xff0c;相比于之前写的UDP服务器实现数据信&#xff0c;在主体逻辑上并没有差别。客户端向服务器发送信息&#xff0c;服务器接受信息并回…

如何进行无线网络渗透测试?

今天我们将继续深入探讨Kali Linux的应用&#xff0c;这次我们将重点介绍如何使用Kali Linux进行无线网络渗透测试。无线网络渗透测试是评估无线网络安全性的重要步骤&#xff0c;而Kali Linux作为一款专业的渗透测试发行版&#xff0c;提供了丰富的工具来帮助你进行这项任务。…

支持https访问

文章目录 1. 打开自己的云服务器的 80 和 443 端口2. 安装 nginx3. 安装 snapd4. 安装 certbot5. 生成证书6. 拷贝生成的证书到项目工作目录7. 修改 main.go 程序如下8. 编译程序9. 启动程序10. 使用 https 和端口 8081 访问页面成功11. 下面修改程序&#xff0c;支持 https 和…

【RocketMQ】NameServer总结

NameServer是一个注册中心&#xff0c;提供服务注册和服务发现的功能。NameServer可以集群部署&#xff0c;集群中每个节点都是对等的关系&#xff08;没有像ZooKeeper那样在集群中选举出一个Master节点&#xff09;&#xff0c;节点之间互不通信。 服务注册 Broker启动的时候会…

grafana-zabbix基础操作篇------导入数据源

文章目录 一、grafana的安装1.1、下载地址1.2、下载后导入所安装机器1.3、yum安装解决依赖1.4、启动grafana1.5、查看端口是否启用&#xff08;端口默认3000&#xff09;1.6、浏览器访问 二、添加zabbix数据源2.1、导入数据源 **下一篇 我们讲讲构建仪表板的操作** 今天&#x…

SpringMVC拦截器的介绍,拦截器的基本实现,拦截器链配置

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 拦截器 一、拦截器概念二、拦截器与过滤器的区别三、拦截器…