当前位置: 首页 > news >正文

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

相关文章:

cortex-A7核LED灯实验--STM32MP157

实验目的&#xff1a;实现LED1 / LED2 / LED3三盏灯工作 一&#xff0c;分析电路图 1&#xff0c;思路 分析电路图可知&#xff1a; 网络编号 引脚编号 LED1 PE10 LED2 > PF10 LED3 > PE8 2&#xff0c;工作原理&#xff1a; 写1&#xff1a;LED灯亮&#xf…...

WPF实战项目十三(API篇):备忘录功能api接口、优化待办事项api接口

1、新建MenoDto.cs /// <summary>/// 备忘录传输实体/// </summary>public class MenoDto : BaseDto{private string title;/// <summary>/// 标题/// </summary>public string Title{get { return title; }set { title value; }}private string con…...

clickhouse(十四、分布式DDL阻塞及同步阻塞问题)

文章目录 一、分布式ddl 阻塞、超时现象验证方法解决方案 二、副本同步阻塞现象验证解决方案 一、分布式ddl 阻塞、超时 现象 在clickhouse 集群的操作中&#xff0c;如果同时执行一些重量级变更语句&#xff0c;往往会引起阻塞。 一般是由于节点堆积过多耗时的ddl。然后抛出…...

怎么入门网络安全(黑客)?

目录&#xff1a; 一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员&#xff08;以编程为基础的学习&#xff09;再开始学习2.不要把深度学习作为入门第一课3.以黑客技能、兴趣为方向的自学误区&#xff1a;4.不要收集过多的资料二、学习网络安全的一些前期准备三…...

c++ boost::json

Boost社区12月11日发布了1.75版本&#xff0c;在之前&#xff0c;​​Boost使用Boost.PropertyTree解析​​JSON​​​&#xff0c;​​XML​​​&#xff0c;​​INI​​​和​​INFO​​​格式的文件。但是由于成文较早及需要兼容其他的数据格式&#xff0c;相比较于其他的​…...

《Flink学习笔记》——第九章 多流转换

无论是基本的简单转换和聚合&#xff0c;还是基于窗口的计算&#xff0c;我们都是针对一条流上的数据进行处理的。而在实际应用中&#xff0c;可能需要将不同来源的数据连接合并在一起处理&#xff0c;也有可能需要将一条流拆分开&#xff0c;所以经常会有对多条流进行处理的场…...

openmmlab出现KeyError: ‘xxx is not in the model registry....‘

问题描述 在复现基于mmpose框架的算法时&#xff0c;运行程序出现KeyError: xxx is not in the model registry....的问题&#xff0c;报错原因是自定义的backbone等结构或者某些当前代码使用的方法没有注册到现有的包中, 导致在import的时候无法导入该方法。 解决方案 找到…...

错误代码0x80131500要怎么解决?快速修复方法

错误代码0x80131500通常与.NET Framework 相关的问题有关。它可能表示.NET Framework的安装损坏、版本冲突或系统文件缺失等。下面我们一起来探讨一下解决错误代码0x80131500有哪些。 以下是一些解决方法 安装最新的.NET Framework版本&#xff1a;访问Microsoft官方网站&…...

PMO(Project Management Office)

PMO 是项目管理办公室&#xff08;Project Management Office&#xff09;的缩写。它是组织内的一个部门或团队&#xff0c;负责支持和促进项目管理活动&#xff0c;以确保项目按时、按预算、按要求完成。 PMO 的职责和角色可以因组织的性质和需求而有所不同&#xff0c;但通常…...

STM32 CUBEMX CAN通信数据发送失败原因分析

CAN通信是一种数据通信协议&#xff0c;用于在不同设备之间进行通信。它是一种高效的、实时的、可靠的、多主机的、串行通信系统&#xff0c;通常用于汽车电子、工业自动化等领域。CAN通信协议是由德国BOSCH公司于1986年引入&#xff0c;并在欧洲和日本广泛使用。CAN通信具有独…...

长安链并行调度机制(2):DAG构建和从节点执行流程

长安链采用高效的并行调度方式执行交易&#xff0c;了解长安链交易调度、冲突检测和DAG构建流程有助于开发者更好地理解长安链并行调度的运行机制&#xff0c;帮助开发者编写高质量、低冲突的智能合约&#xff0c;更好地构建区块链应用。 上一篇内容我们说明了长安链交易调度、…...

leetcode做题笔记110. 平衡二叉树

给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 思路一&#xff1a;递归 int height(struct TreeNode* root) {if (root NULL) {return…...

iOS开发Swift-字符串与字符

1.字符串的定义 let someString "some string value"2.多行字符串的定义(""") let quotation """ 有一个人前来买瓜。 "这瓜甜吗&#xff1f;"他问。 """前一个"""前和后一个""&…...

Linux Kernel:syscall之fork与exec

环境: Kernel Version:Linux-5.10 ARCH:ARM64 一:前言 上一节我们提到了进程的产生方式fork,exec与clone,本节将详细分析fork和exec族系统调用的具体实现。通常这些调用不是由应用程序直接发出的,而是通过一个中间层调用,即负责与内核通信的C标准库。从用户状态切换到…...

CentOS 修改MySQL密码

CentOS 修改MySQL密码 1.登录MySQL 2.执行如下命令 update user set passwordpassword(mivbAs7Awc) where userroot;报错如下&#xff1a; Unknown column ‘password’ in ‘field list’ 3.执行如下命令 update user set passwordpassword(mivbAs7Awc) where userroot碰到…...

Android通过setaffinity实现绑核

有时候为了降低App算力占用&#xff0c;会把关键的线程绑定到大核中&#xff0c;下面介绍一种绑核的方式 查看绑核 查看pid :/ # ps -A | grep test u0_a15 25178 405 15950272 176544 do_epoll_wait 0 S com.test.jnites查看线程号 top -H -p 25178 25224 u0_…...

stm32的位带操作

在51单片机中&#xff0c;我们可以使用P2^1来对单片机的某一位进行操作&#xff0c;到了stm32&#xff0c;我们通过位带操作&#xff0c;将寄存器的每一位映射到一个32位的地址。如下是我查资料摘录的一些图片。 映射方式 SRAM: AliasAddr 0x22000000 (A-0X20000000)*8*4n*4…...

Java 电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…...

https协议经过SpringMVC重定向之后变成http协议

之前项目的协议还是http&#xff0c;当改为https之后&#xff0c;就出现了这个问题。 服务访问地址&#xff1a;https://wuxinke.demo.com 访问某个页面的地址&#xff1a;https://wuxinke.demo.com/aps/judgeProviderOrCtenant.ht 经SpringMVC重定向之后&#xff0c;地址变…...

iOS 分别对一张图的局部进行磨砂,拼接起来不能贴合

效果图 需求&#xff0c;由于视图层级的原因&#xff0c;需要对图片分开进行磨砂&#xff0c; 然后组合在一起 如图&#xff0c;上下两部分&#xff0c;上下两个UIImageVIew大小相同&#xff0c;都是和图片同样的大小&#xff0c;只是上面的UIimageVIew 只展示上半部份 &#…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...