STM32F407寄存器点灯

server/2024/12/22 23:34:33/

背景描述:
最近用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.ppmy.cn/server/152350.html

相关文章

SEO初学者-搜索引擎如何工作

搜索引擎基础搜索引擎是如何建立索引的搜索引擎如何对网页进行排名搜索引擎是如何个性化搜索结果的 搜索引擎的工作方式是使用网络爬虫抓取数十亿个页面。爬虫也称为蜘蛛或机器人&#xff0c;它们在网络上导航并跟踪链接以查找新页面。然后&#xff0c;这些页面会被添加到搜索引…

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程

2024年12月陪玩系统-仿东郊到家约玩系统是一种新兴的线上预约线下社交、陪伴系统分享-优雅草央千澈-附带搭建教程 产品介绍 仿东郊到家约玩系统是一种新兴的线上预约&#xff0c;线下社交、陪伴、助娱、助攻、分享、解答、指导等服务模式&#xff0c;范围涉及电竞、运动、音乐…

变量的作用域和生命周期

作用域 作用域是程序设计概念&#xff0c;通常来说&#xff0c;一段程序代码中所用到的名字并不总是有效的&#xff0c;而限定这个名字的可用性的代码范围就是这个名字的作用域。 1、局部变量的作用域就是变量所在的局部范围。 2、全局变量的作用域是整个工程。 问题&#…

第二十四天 循环神经网络(RNN)LSTM与GRU

LSTM&#xff08;长短期记忆网络&#xff09;和GRU&#xff08;门控循环单元&#xff09;是两种流行的循环神经网络变体&#xff0c;它们被设计来解决传统RNN在处理长序列数据时遇到的梯度消失和梯度爆炸问题。这两种网络都通过引入门控机制来控制信息的流动&#xff0c;从而能…

Linux安装mysql5.7

一、下载mysql5.7 ​ 首先我们需要去下载linux版本的mysql-5.7.24的安装包。 1.可以去官方网站链接: https://downloads.mysql.com/archives/community/ ,下载mysql-5.7.24-linux-glibc2.12-x86_64.tar压缩包。 2.在线下载&#xff0c;使用wget命令&#xff0c;直接从官网下载…

Flutter组件————BottomNavigationBar

BottomNavigationBar 是Flutter中用于在屏幕底部显示导航栏的组件&#xff0c;它允许用户在几个主要视图之间进行切换。 参数 参数名类型描述itemsList定义导航栏中的每个项目&#xff0c;通常包含图标和标签。onTapValueChanged当用户点击导航栏中的项目时触发的回调函数&am…

springboot中——Logback介绍

程序中的日志&#xff0c;是用来记录应用程序的运行信息、状态信息、错误信息等。 Logback基本使用 springboot的依赖自动传递了logback的依赖&#xff0c;所以不用再引入依赖 之后在resources文件下创建logback.xml文件&#xff0c;写入 <?xml version"1.0" …

图形 3.3 曲面细分与几何着色器_大规模草渲染

细分后的顶点曲面细分与几何着色器 大规模草渲染 B站视频&#xff1a;图形 3.3 曲面细分与几何着色器 大规模草渲染 文章目录 细分后的顶点曲面细分与几何着色器 大规模草渲染着色器执行顺序曲面细分着色器概述曲线和曲面相关概念输入与输出总体流程Hull Shader常量外壳着色器…