cortex-A7核LED灯实验--STM32MP157

实验目的:实现LED1 / LED2 / LED3三盏灯工作

一,分析电路图

1,思路

分析电路图可知:

网络编号 == 引脚编号

LED1 == PE10

LED2 ===> PF10 

LED3 ===> PE8

2,工作原理:

写1:LED灯亮,写0:LED灯灭

二,框图

1,A7核和GPIO控制器:通过内部总线通讯,查看芯片手册可知总线为AHB4总线

2,(核外特殊功能寄存器):芯片厂家出厂时,固化到芯片内部的一端寻址空间,地址固定

3,A7核通过汇编指令 LDR / STR控制特殊功能器

4,根据框图需要分析:

RCC章节 == 使能GPIOE和GPIOF组控制器

GPIO章节 == 1)初始化GPIO引脚,2)引脚输出高低电平

三,分析RCC章节

1,确定总线连接

查看芯片手册:GPIO通过AHB4总线和RCC连接

2,基地址

GPIOF:0x50007000

GPIOE:0x50006000

RCC:   0x50000000

3,分析RCC_MP_AHB4ENSETR寄存器

作用:使能GPIO组寄存器

地址:0x50000000 + 0xA28 = 0x50000A28

伪代码:RCC_MP_AHB4ENSETR [4] = 1   === GPIOE 

RCC_MP_AHB4ENSETR [5] = 1   === GPIOF

四,分析GPIO章节

1,概述

 2,框图

 图片已经损坏 :<

 1,分析GPIOx_MODER寄存器

作用:设置GPIO引脚模式(输入,输出,复用,模拟)本实验输出高低电平,选用输出

地址:0x50006000 + 0x00 = 0x50006000 

        0x50007000 + 0x00 = 0x50007000

伪代码:GPIOE_MODER [21:20] = 01 ==== LED1

        GPIOF_MODER [21:20] = 01 ==== LED2

        GPIOE_MODER [17:16] = 01 ==== LED3

 2,分析GPIOx_OTYPER寄存器

推挽输出类型:PMOS管和NMOS管都可以进行工作

开漏输出类型:只有NMOS管可以进行工作

作用:设置GPIO引脚输出类型为推挽输出

地址:0x50006000 + 0x04 = 0x50006004

0x50007000 + 0x04 = 0x50007004

伪代码:GPIOE_OTYPER [10] = 0 ==== LED1

        GPIOF_OTYPER [10] = 0 ==== LED2

        GPIOE_OTYPER [8] = 01 ==== LED3

 3,分析GPIOx_OSPEEDR寄存器

作用:设置GPIO引脚输出速率(低速、中速、高速、快速)

地址:0x50006000 + 0x08 = 0x50006008

0x50007000 + 0x08 = 0x50007008

伪代码:GPIOE_OSPEEDR [21:20] = 01 ==== LED1

GPIOF_OSPEEDR [21:20] = 01 ==== LED2

GPIOE_OSPEEDR [17:16] = 01 ==== LED3

 4,分析GPIOx_PUPDR寄存器

作用:设置GPIO引脚是否需要上下拉电阻(禁止上下拉电阻、上拉、下拉、保留)本实验通过引脚控制灯的亮灭,需要禁止上下拉电阻

地址:0x50006000 + 0x0C = 0x5000600C

0x50007000 + 0x0C = 0x5000700C

伪代码:GPIOE_PUPDR [21:20] = 00 ====LED1

GPIOF_PUPDR [21:20] = 00 ====LED2

GPIOE_PUPDR [17:16] = 00 ====LED3

5,分析GPIOx_ODR寄存器

作用:设置引脚输出高 / 低电平写1:输出高电平,LED灯点亮 写0:输出低电平,LED灯熄灭

地址:0x50006000 + 0x14 = 0x50006014

0x50007000 + 0x14 = 0x50007014

伪代码:GPIOE_ODR [10] = 1 / 0 ====LED1

GPIOF_ODR [10] = 1 / 0 ====LED2

GPIOE_ODR [8] = 1 / 0 ====LED3

五,寄存器封装

1,单个寄存器封装

1、在汇编语言中0x50000A28代表一块地址空间,但是在C语言中表示十六进制数,在C语言中,如何将0x50000A28表示一块地址空间的(volatile unsigned int*)0x50000A28  ====> ldr r0,=0x50000A28
2、如何取出0x50000A28这块地址空间中的内容(*(volatile unsigned int*)0x50000A28) ====> ldr r1,[r0]
3、将0x50000A28这块地址空间中的第4位进行置1,保证其他位不变(*(volatile unsigned int*)0x50000A28)  = (*(volatile unsigned int*)0x50000A28) | (0x1 << 4);  ====> orr r1,r1,#(0x1 << 4)  str r1,[r0]
4、用宏定义如何对寄存器进行封装#define RCC_MP_AHB4_ENSETR  (*(volatile unsigned int*)0x50000A28)   RCC_MP_AHB4_ENSETR =  RCC_MP_AHB4_ENSETR | (0x1 << 4);RCC_MP_AHB4_ENSETR |= (0x1 << 4);
5、将GPIOE/GPIOF寄存器进行封装#define GPIOE_MODER  (*(volatile unsigned int*)0x50006000) #define GPIOE_OTYPER  (*(volatile unsigned int*)0x50006004)#define GPIOE_OSPEEDR  (*(volatile unsigned int*)0x50006008)#define GPIOE_PUPDR (*(volatile unsigned int*)0x5000600C)#define GPIOE_ODR  (*(volatile unsigned int*)0x50006014)         

2,结构体封装寄存器

typedef struct{volatile unsigned int MODER;    //MODERvolatile unsigned int OTYPER;   //OTYPERvolatile unsigned int OOSPEEDR;    //OSPEEDRvolatile unsigned int PUPDR;  //PUPDRvolatile unsigned int IDR;  //IDRvolatile unsigned int ODR; //ODR        
}gpio_t;
#define GPIOE    ((gpio_t*)0x50006000)   注释:GPIOE ===> 0x50006000
#define GPIOF    ((gpio_t*)0x50007000)   注释:GPIOF ===> 0x50007000
访问结构体成员:GPIOE->MODER

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

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

相关文章

Spring Cloud Alibaba-Sentinel规则

1 流控规则 流量控制&#xff0c;其原理是监控应用流量的QPS(每秒查询率) 或并发线程数等指标&#xff0c;当达到指定的阈值时 对流量进行控制&#xff0c;以避免被瞬时的流量高峰冲垮&#xff0c;从而保障应用的高可用性。 第1步: 点击簇点链路&#xff0c;我们就可以看到访…

一篇文章带你了解-selenium工作原理详解

前言 Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0c…

RK3562 VS RK3566 性能解析

RK3562是深圳触觉智能最新推出的一款高性能核心板及其开发套件&#xff0c;采用四核A53Mali G52架构&#xff0c;主频2GHz&#xff0c;内置1T NPU算力以及13M ISP&#xff0c;拥有丰富的外围接口。其次在解码方面&#xff0c;支持H.264 1080P60fps、H.265 4K30fps&#xff1b;编…

EMQX启用双向SSL/TLS安全连接以及java连接

作为基于现代密码学公钥算法的安全协议&#xff0c;TLS/SSL 能在计算机通讯网络上保证传输安全&#xff0c;EMQX 内置对 TLS/SSL 的支持&#xff0c;包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS&#xff0c;也可…

cocos 2.4 版本 设置物理引擎步长 解决帧数不一致的设备 物理表现不一致问题 设置帧刷新率

官网地址Cocos Creator 3.8 手册 - 2D 物理系统 官网好像写的不太对 下面是我自己运行好使的 PhysicsManager.openPhysicsSystem()var manager cc.director.getPhysicsManager();// 开启物理步长的设置manager.enabledAccumulator true;// cc.PhysicsManagercc.PhysicsManag…

python+django+协同过滤算法-基于爬虫的个性化书籍推荐系统(包含报告+源码+开题)

为了提高个性化书籍推荐信息管理的效率&#xff1b;充分利用现有资源&#xff1b;减少不必要的人力、物力和财政支出来实现管理人员更充分掌握个性化书籍推荐信息的管理&#xff1b;开发设计专用系统--基于爬虫的个性化书籍推荐系统来进行管理个性化书籍推荐信息&#xff0c;以…

Go Map

学习了GO语言中数组&#xff0c;切片类型&#xff0c;但是我们发现使用数组或者是切片存储的数据量如果比较大&#xff0c;那么通过下标来取出某个具体的数据的时候相对来说&#xff0c;比较麻烦。例如&#xff1a; names : []string{"张三","李四","…

Spring Boot集成MyBatis Plus

文章目录 一、前言二、步骤2.1、步骤 1&#xff1a;创建 Spring Boot 项目2.2、添加依赖2.2.1、基本的Spring和Spring MVC功能2.2.2、MySQL驱动依赖2.2.3、 MyBatis Plus 的依赖 2.3、配置数据库连接2.4、创建实体类2.5、创建 Mapper 接口2.6、编写 Service 层2.7、编写 Contro…

前端vue3+ts架构

1、vue creat 项目名称 选择自定义 选择需要的依赖 选择vue3 一路enter&#xff0c;选择eslistprettier 继续enter&#xff0c;等待安装 按步骤操作&#xff0c;项目启动成功 2、vscode安装5款插件 2、代码保存自动格式化&#xff0c;保证每个开发人员代码一致&#xff0c;根目…

数据结构体--5.0图

目录 一、定义 二、图的顶点与边之间的关系 三、图的顶点与边之间的关系 四、连通图 五、连通图的生成树定义 一、定义 图&#xff08;Graph&#xff09;是由顶点的又穷非空集合合顶点之间边的集合组成&#xff0c;通常表示为&#xff1a;G&#xff08;V&#xff0c;E&…

CSC7203S 应用注意事项

CSC7203S 为高性能电流模式 PWM 开关电源功率转换器&#xff0c;满足绿色环保标准&#xff1b;广泛适用于经济型开关电源&#xff0c;如 DVD、机顶盒、传真机、打印机、LCD 显示器等。CSC7203S采用SOP-8封装。  内置 700V 高压功率开关管  输入电压&#xff08;85V~265V&a…

Gitlab创建一个空项目

1. 创建项目 Project slug是访问地址的后缀&#xff0c;跟前边的ProjectUrl拼在一起&#xff0c;就是此项目的首页地址&#xff1b; Visibility Level选择默认私有即可&#xff0c;选择内部或者公开&#xff0c;就会暴露代码。 勾选Readme选项&#xff0c;这样项目内默认会带…

MVC、MVP、MVVM的成本角度结合业务,如何考虑选型?一文了解方方面面

大家都知道&#xff0c;使用架构的目的是使程序模块化&#xff0c;做到模块内部的高聚合和模块之间的低耦合&#xff0c;使得程序在开发的过程中&#xff0c;开发人员只需要专注于一点&#xff0c;提高程序开发的效率。那么MVC、MVP、MVVM&#xff0c;该怎么选&#xff1f;在什…

Redis——》如何评估锁过期时间

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

mall :rabbit项目源码解析

文章目录 一、mall开源项目1.1 来源1.2 项目转移1.3 项目克隆 二、RabbitMQ 消息中间件2.1 rabbit简介2.2 分布式后端项目的使用流程2.3 分布式后端项目的使用场景 三、安装RabbitMQ(Win10)3.1安装erLang语言&#xff0c;配置环境变量3.2 安装RabbitMQ服务端3.3 测试安装效果 四…

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

作者&#xff1a;刘军 不论您是一名开发者、架构师、CTO&#xff0c; 如果您曾深度参与在微服务开发中&#xff0c;那么相信您一定有过开源微服务框架或体系选型的疑问&#xff1a;Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio&#xff0c;到底应该选…

Linux 虚拟机同步时间crontab以及crond详解

目录 一 Linux 虚拟机同步时间设置 1. 检查是否安装cron服务&#xff08;即时间同步器&#xff09; 2. 下载时间同步器 3. 编辑crontab 内容 4. 同步更新电脑网络时间 5.设置 reload 6. 查看 crond 状态 二 crond 详解 1. 启动/关闭cron服务 2. crontab命令格式 3. …

ShardingSphere——柔性事务SEATA原理

摘要 Apache ShardingSphere集成了 SEATA 作为柔性事务的使用方案&#xff0c;本文主要介绍其实现ShardingSphere中柔性事务SEATA原理原理。帮助你更好的理解ShardingSphere原理。同时帮助大家更好的使用柔性事务SEATA原理。 一、Seata柔性事务 Apache ShardingSphere 集成了…

说说广播流与普通流

分析&回答 user actions 可以看作是事件流&#xff08;普通流&#xff09;patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据&#xff0c;为了达到数据共享&am…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行&#xff0c;如Windows、Linux、Unix等&#xff0c;并且支持多种编程语言和技术&#xff0c;如PHP、Perl、Python、Java等。…