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.rhkb.cn/news/110921.html

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

相关文章

防雷检测综合应用方案

防雷检测是指对建筑物的防雷装置进行定期或不定期的检测&#xff0c;以评估其性能和安全状况&#xff0c;发现并消除隐患&#xff0c;保障人身和财产安全的一项重要工作。防雷检测的内容包括对接闪器、避雷带、引下线、接地装置、等电位联结、避雷器等部件的形式、位置、连接、…

RecyclerView面试问答

RecycleView 和 ListView对比: 使用方法上 ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。 RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式 ViewHolder的编写规范化,ListVie…

Spring security报栈溢出几种可能的情况

今天在运行spring security的时候&#xff0c;发现出现了栈溢出的情况&#xff0c;总结可能性如下&#xff1a; 1.UserDetailsService的实现类没有加上Service注入到容器中&#xff0c;导致容器循环寻找UserDetailsService的实现类&#xff0c;最终发生栈溢出的现象。 解决方法…

Redis 7 第三讲 数据类型 进阶篇

⑥ *位图 bitmap 1. 理论 由0和1 状态表现的二进制位的bit 数组。 说明:用String 类型作为底层数据结构实现的一种统计二值状态的数据类型 位图本质是数组,它是基于String 数据类型的按位操作。该数组由多个二进制位组成,每个二进制位都对应一个偏…

Java进阶(6)——抢购问题中的数据不安全(非原子性问题) Java中的synchronize和ReentrantLock锁使用 死锁及其产生的条件

目录 引出场景&#xff1a;大量请求拥挤抢购事务的基本特征ACID线程安全的基本特征 加锁(java)synchronized锁ReentrantLock锁什么是可重入锁&#xff1f;如何保证可重入 滥用锁的代价&#xff1f;&#xff08;死锁&#xff09;死锁的四个必要条件死锁的案例 总结 引出 1.大量请…

基于SpringBoot的员工(人事)管理系统

基于SpringBoot的员工&#xff08;人事&#xff09;管理系统 一、系统介绍二、功能展示三.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于SPringBoot的员工管理系统 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 前端技术&#xff1a;BootS…

Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结

Go 第三方库引起的线上问题、如何在线线上环境进行调试定位问题以及golang开发中各种问题精华整理总结。 01 前言 在使用 Go 语言进行 Web 开发时&#xff0c;我们往往会选择一些优秀的库来简化 HTTP 请求的处理。其中&#xff0c;go-resty 是一个被广泛使用的 HTTP 客户端。…

运用亚马逊云科技Amazon Kendra,快速部署企业智能搜索应用

亚马逊云科技Amazon Kendra是一项由机器学习&#xff08;ML&#xff09;提供支持的企业搜索服务。Kendra内置数据源连接器&#xff0c;支持快速访问Amazon S3、AmazonRDS、AmazonFSX以及其他外部数据源&#xff0c;帮助用户自动提取文档并建立索引。Kendra支持超过30多种多国语…

【真题解析】系统集成项目管理工程师 2022 年下半年真题卷(案例分析)

本文为系统集成项目管理工程师考试(软考) 2022 年下半年真题&#xff08;全国卷&#xff09;&#xff0c;包含答案与详细解析。考试共分为两科&#xff0c;成绩均 ≥45 即可通过考试&#xff1a; 综合知识&#xff08;选择题 75 道&#xff0c;75分&#xff09;案例分析&#x…

无涯教程-分类算法 - 逻辑回归

逻辑回归是一种监督学习分类算法&#xff0c;用于预测目标变量的概率&#xff0c;目标或因变量的性质是二分法&#xff0c;这意味着将只有两种可能的类。 简而言之&#xff0c;因变量本质上是二进制的&#xff0c;其数据编码为1(代表成功/是)或0(代表失败/否)。 在数学上&…

reactantd(12)动态表单的默认值问题

最近遇到一个需求是有一个表单可以输入各种信息&#xff0c;然后还需要有一个编辑功能&#xff0c;点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法&#xff0c;然后我的思路是使用initialValues搭配setState()使用。默认值都为空&#xff0c;然后点击单条数…

VMware虚拟机---Ubuntu无法连接网络该怎么解决?

在学习使用Linux系统时&#xff0c;由于多数同学们的PC上多是Windows系统&#xff0c;故会选择使用VMware创建一个虚拟机来安装Linux系统进行学习。 安装完成之后&#xff0c;在使用时总是会遇到各种各样的问题。本片随笔就主要针对可能出现的网络问题进行一个总结&#xff0c;…

Git仓库简介

1、工作区、暂存区、仓库 工作区&#xff1a;电脑里能看到的目录。 暂存区&#xff1a;工作区有一个隐藏目录.git&#xff0c;是Git的版本库&#xff0c;Git的版本库里存了很多东西&#xff0c;其中最重要的就是称为stage&#xff08;或者叫index&#xff09;的暂存区&#xf…

stm32读写片内flash项目总结(多字节读写tongxindu)

1.flash操作驱动程序 a头文件 #ifndef FLASH_H #define FLASH_H #include “stm32f4xx.h” #define BOARD_NUM_ADDR 0x0800C000 #define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址 #define FLASH_WAITETIME 50000 //FLASH等待超时时间 //FLASH 扇区的起始地址…

idea --Git Commit Template插件

Git Commit Template是一款免费的IntelliJ IDEA插件&#xff0c;用于提供Git提交模板。该插件可以帮助开发者编写规范的Git提交信息&#xff0c;提高代码管理效率。 首先安装插件&#xff1a; 使用Git Commit Template插件: 注&#xff1a;long description和Breaking changes…

开源文库系统moredoc

什么是 moredoc &#xff1f; moredoc 中文名 魔豆文库&#xff0c;是基于 golang 开发的类似百度文库、新浪爱问文库的开源文库系统&#xff0c;支持 TXT、PDF、EPUB、MOBI、Office 等格式文档的在线预览与管理&#xff0c;为 dochub 文库(github, gitee &#xff09;的重构版…

代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II

代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机&#xff0c;122.买卖股票的最佳时机II 121. 买卖股票的最佳时机122.买卖股票的最佳时机II 121. 买卖股票的最佳时机 题目链接 视频讲解 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股…

英特尔开始加码封装领域 | 百能云芯

在积极推进先进制程研发的同时&#xff0c;英特尔正在加大先进封装领域的投入。在这个背景下&#xff0c;该公司正在马来西亚槟城兴建一座全新的封装厂&#xff0c;以加强其在2.5D/3D封装布局领域的实力。据了解&#xff0c;英特尔计划到2025年前&#xff0c;将其最先进的3D Fo…

Ubuntu安装RabbitMQ

一、安装 更新系统软件包列表&#xff1a; sudo apt update安装RabbitMQ的依赖组件和GPG密钥&#xff1a; sudo apt install -y curl gnupg curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmo…

网易新财报:游戏稳、有道进、云音乐正爬坡

今年以来&#xff0c;AI大模型的火热程度屡屡攀升&#xff0c;越来越多的企业都加入到了AI大模型的赛场中&#xff0c;纷纷下场布局。而在众多参与者中&#xff0c;互联网企业的身影更是频频浮现&#xff0c;比如&#xff0c;百度、阿里巴巴、腾讯等等。值得一提的是&#xff0…