STM32F407寄存器点灯

背景描述:
最近用32开发遇到问题不得不看寄存器了,就回顾了一下寄存器手册的查看方式和寄存器的使用方法;
上一次这么细致的记录还是在刚学习STM32的时候,之前觉得看寄存器手册以及配置寄存器是有点难度的事情,现在回头看已经是轻舟已过万重山了。
**

言归正传:
经常查看的是《STM32F407中文手册》,这个手册很重要!

实验目的:GPIOA_pin6配置为“推挽输出模式+25MHZ”实现LED闪烁效果;

业务流程:
在这里插入图片描述///

一,目的:通过实验学会查看寄存器手册,学会通过寄存器驱动MCU

1)下图是手册中对于GPIO输出的描述
在这里插入图片描述

2)在10类GPIO寄存器中选择需要配置的部分
在这里插入图片描述

3)注意时钟也要配置

二,实验现象:PA6连接的LED闪烁

三,实验步骤:

1-查看《STM32F407中文手册(完全版) 高清完整pdf版》和《Cortex-M4权威指南(英文版)》

获取以下信息:

1)寄存器映射框图

2)时钟总线框图

3)详细的寄存器地址范围

4)RCC时钟部分的寄存器功能

5)GPIO寄存器部分的功能

2-得到的必要信息

0)配置GPIO之前要开AHB1时钟(GPIOA挂载在AHB1总线下,所以开这个时钟)

在这里插入图片描述
在这里插入图片描述

1)寄存器映射框图
在这里插入图片描述
在这里插入图片描述

2)时钟总线框图和内部总线框图

在这里插入图片描述
在这里插入图片描述

3)详细的寄存器地址范围

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4)RCC时钟部分的寄存器功能【重要】

在这里插入图片描述
在这里插入图片描述

5)GPIO寄存器部分的功能【重要】
a)怎样设置寄存器把PA6设置为输出模式
在这里插入图片描述

在这里插入图片描述

b)怎样把PA6设置为推挽模式
在这里插入图片描述
在这里插入图片描述

c)怎样设置速度为25MHZ
在这里插入图片描述
在这里插入图片描述

d)怎样输出高电平
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

e)输出低电平
在这里插入图片描述

f)电平转换

//代码///
1-用这个函数代替HAL库的GPIOA_pin6的初始化


#define  DEBUG_RCC_BASE 0x40023800 //RCC基地址
#define  DEBUG_RCCAHB1_Offset 0x30 //AHB1寄存器偏移地址#define  DEBUG_GPIOA_BASE 0x40020000 //GPIOA基地址
#define  DEBUG_GPIOA_MODE_Offset 0x00 //GPIOA模式寄存器偏移地址
#define  DEBUG_GPIOA_OTYPER_Offset 0x04 //GPIOA输出类型寄存器偏移地址
#define  DEBUG_GPIOA_SPEED_Offset 0x08 //GPIOA速度寄存器偏移地址void DEBUG_GPIOA_INIT(void)
{//使用寄存器点亮LED//1-start_AHB1_RCC for GPIOA//2-set PA6 to output mode//3-set PA7 to GPIO_MODE_OUTPUT_PP mode//4-set PA6 to 25MHZ speed//5-set PA7 to GPIO_PULLUP mode//6-set PA6 to HIGH level//注意:这里的地址是0x40023830(单片机不认识这个数字),要强制转化为指针才能识别为地址unsigned int *P_RCC_AHB1_GPIOA = (unsigned int*)(DEBUG_RCC_BASE + DEBUG_RCCAHB1_Offset);//把数字强制转化为mcu认识的类型*(P_RCC_AHB1_GPIOA) = *(P_RCC_AHB1_GPIOA) | (1<<0);//0x40023810地址里的bit0的值置为1;//设置PA6为输出模式unsigned int *P_GPIOA_MODE = (unsigned int*)(DEBUG_GPIOA_BASE + DEBUG_GPIOA_MODE_Offset);*(P_GPIOA_MODE) &= ~(0x03 << 12);//输出模式为推挽输出(写零)//0x03:0000 0011;这个操作是把bit12,bit13置为0,*(P_GPIOA_MODE) = *(P_GPIOA_MODE) | (1<<12);//通用输出模式//bit13,bit12 值为00--->把bit12置为1,---->bit13,bit12 值变为01//设置PA6的输出模式为推挽输出unsigned int *P_GPIOA_OTYPER = (unsigned int*)(DEBUG_GPIOA_BASE + DEBUG_GPIOA_OTYPER_Offset);*(P_GPIOA_OTYPER) &= ~(0x01 << 6);//输出模式为推挽输出(写零)//0x01:0000 0001;这个操作是把bit12置为0,unsigned int *P_GPIOA_SPEED = (unsigned int*)(DEBUG_GPIOA_BASE + DEBUG_GPIOA_SPEED_Offset);*(P_GPIOA_OTYPER) &= ~(0x03 << 12);//速度设置为25MHZ(bit12,bit13写零)//0x03:0000 0011;这个操作是把bit12,bit13置为0}

2-GPIOA_pin6输出高电平

void DEBUG_GPIOA_SET1(void)
{unsigned int *P_GPIOA_ODR = (unsigned int*)(DEBUG_GPIOA_BASE + 0x14);*(P_GPIOA_ODR) |= (1<<6);
}

3-GPIOA_pin6输出低电平

void DEBUG_GPIOA_SET0(void)
{unsigned int *P_GPIOA_ODR = (unsigned int*)(DEBUG_GPIOA_BASE + 0x14);*(P_GPIOA_ODR) &= ~(1<<6);
}

4-GPIOA_pin6电平反转

void DEBUG_GPIOA_TOGGLE(void)
{unsigned int *P_GPIOA_ODR = (unsigned int*)(DEBUG_GPIOA_BASE + 0x14);*(P_GPIOA_ODR) ^= (1<<6);
}

5-整体逻辑
1)main函数中用DEBUG_GPIOA_INIT();代替MX_GPIO_Init();
2)while(1)里添加电平反转,验证LED闪烁的功能;
在这里插入图片描述

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

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

相关文章

Cline 3.0发布:从AI编程助手到通用智能体平台的进化

引言 在人工智能快速发展的今天&#xff0c;开发者工具正在经历一场革命性的变革。作为VSCode生态中备受欢迎的AI编程助手&#xff0c;Cline迎来了具有里程碑意义的3.0版本更新。本次Cline 3.0更新不仅带来了用户呼声最高的自动审批功能&#xff0c;还通过一系列创新优化全面提…

【Jenkins】持久化

文章目录 持续集成CI持续部署CD部署部署到linux服务器 持续集成好处&#xff1a; 持续集成CI 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;指的是频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的目的就是让产品可以快速…

Promise链式调用

Promise链式调用 上一篇我们实现了通过promise的方式实现获取国家基本信息&#xff0c;本次我们来使用promise链式调用来实现邻国的展现 首先&#xff0c;我们从第一个国家中获取到邻国的国家代码名称 const neighbour data[0].borders[0];然后我们通过fetch来获取邻国信息&a…

路由器的原理

✍作者&#xff1a;柒烨带你飞 &#x1f4aa;格言&#xff1a;生活的情况越艰难&#xff0c;我越感到自己更坚强&#xff1b;我这个人走得很慢&#xff0c;但我从不后退。 &#x1f4dc;系列专栏&#xff1a;网路安全入门系列 目录 路由器的原理一&#xff0c;路由器基础及相关…

2025系统架构师(一考就过):案例题之一:嵌入式架构、大数据架构、ISA

一、嵌入式系统架构 软件脆弱性是软件中存在的弱点(或缺陷)&#xff0c;利用它可以危害系统安全策略&#xff0c;导致信息丢失、系统价值和可用性降低。嵌入式系统软件架构通常采用分层架构&#xff0c;它可以将问题分解为一系列相对独立的子问题&#xff0c;局部化在每一层中…

重拾设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…

python使用pip进行库的下载

前言 现如今有太多的python编译软件&#xff0c;其库的下载也是五花八门&#xff0c;但在作者看来&#xff0c;无论是哪种方法都是万变不离其宗&#xff0c;即pip下载。 pip是python的包管理工具&#xff0c;无论你是用的什么python软件&#xff0c;都可以用pip进行库的下载。 …

【IMU:视觉惯性SLAM系统】

视觉惯性SLAM系统简介 相机&#xff08;单目/双目/RGBD)与IMU结合起来就是视觉惯性&#xff0c;通常以单目/双目IMU为主。 IMU里面有个小芯片可以测量角速度与加速度&#xff0c;可分为6轴(6个自由度)和9轴&#xff08;9个自由度&#xff09;IMU&#xff0c;具体的关于IMU的介…

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术&#xff0c;从一张模型图像中提取安全环的特征&#xff0c;并在后续图像中识别多个实例&#xff0c;完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…

【蓝桥杯】43688-《Excel地址问题》

Excel地址问题 题目描述 Excel 单元格的地址表示很有趣&#xff0c;它可以使用字母来表示列号。比如&#xff0c; A 表示第 1 列&#xff0c; B 表示第 2 列&#xff0c; … Z 表示第 26 列&#xff0c; AA 表示第 27 列&#xff0c; AB 表示第 28 列&#xff0c; … BA 表示…

【C++读写.xlsx文件】OpenXLSX开源库在 Ubuntu 18.04 的编译、交叉编译与使用教程

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-17 …

大数据、人工智能、云计算、物联网、区块链序言【大数据导论】

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;大数据入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 这是目…

ffmpeg翻页转场动效的安装及使用

文章目录 前言一、背景二、选型分析2.1 ffmpeg自带的xfade滤镜2.2 ffmpeg使用GL Transition库2.3 xfade-easing项目三、安装3.1、安装依赖([参考](https://trac.ffmpeg.org/wiki/CompilationGuide/macOS#InstallingdependencieswithHomebrew))3.2、获取ffmpeg源码3.3、融合xf…

什么是3DEXPERIENCE SOLIDWORKS,它有哪些角色和功能?

将业界领先的 SOLIDWORKS 3D CAD 解决方案连接到基于单一云端产品开发环境 3DEXPERIENCE 平台。您的团队、数据和流程全部连接到一个平台进行高效的协作工作&#xff0c;从而能快速的做出更好的决策。 目 录&#xff1a; ★ 1 什么是3DEXPERIENCE SOLIDWORKS ★ 2 3DEXPERIE…

如何正确计算显示器带宽需求

1. 对显示器的基本认识 一个显示器的参数主要有这些&#xff1a; 分辨率&#xff1a;显示器屏幕上像素点的总数&#xff0c;通常用横向像素和纵向像素的数量来表示&#xff0c;比如19201080&#xff08;即1080p&#xff09;。 刷新率&#xff1a;显示器每秒钟画面更新的次数&…

leetcode212. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…

CTFHUB 历年真题 afr-1

发现传参为 ?phello&#xff0c;尝试 ?pflag 发现都是 no 尝试假设它是个PHP文件&#xff0c;利用php伪协议 ?pphp://filter/readconvert.base64-encode/resourceflag 得到 base64 编码再解码发现了本题的 flag n1book{afr_1_solved}

重拾设计模式--备忘录模式

文章目录 备忘录模式&#xff08;Memento Pattern&#xff09;概述定义&#xff1a; 作用&#xff1a;实现状态的保存与恢复支持撤销 / 恢复操作 备忘录模式UML图备忘录模式的结构原发器&#xff08;Originator&#xff09;&#xff1a;备忘录&#xff08;Memento&#xff09;&…

5G -- 5G网络架构

5G组网场景 从4G到5G的网络演进&#xff1a; 1、UE -> 4G基站 -> 4G核心网 * 部署初中期&#xff0c;利用存量网络&#xff0c;引入5G基站&#xff0c;4G与5G基站并存 2、UE -> (4G基站、5G基站) -> 4G核心网 * 部署中后期&#xff0c;引入5G核心网&am…

前端开放性技术面试—面试题

1. 上线出现问题如何解决&#xff1f; 步骤&#xff1a; 立即响应&#xff1a;迅速确认问题的存在和影响范围。回滚&#xff1a;如果问题严重影响用户&#xff0c;考虑立即回滚到上一个稳定版本。日志分析&#xff1a;查看服务器日志、应用日志和前端日志&#xff0c;定位问题…