STM32F407寄存器点灯

news2024/12/19 13:06:30

背景描述:
最近用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.coloradmin.cn/o/2262184.html

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

相关文章

2024年12月11日Github流行趋势

项目名称&#xff1a;maigret 项目维护者&#xff1a;soxoj, kustermariocoding, dependabot, fen0s, cyb3rk0tik项目介绍&#xff1a;通过用户名从数千个站点收集个人档案信息的工具。项目star数&#xff1a;12,055项目fork数&#xff1a;870 项目名称&#xff1a;uv 项目维护…

Halcon中histo_2dim(Operator)算子原理及应用详解

在Halcon中&#xff0c;histo_2dim算子是一个用于计算双通道灰度值图像的直方图的工具。以下是对该算子的原理及应用的详细解释&#xff1a; 一、原理 histo_2dim算子的函数原型为&#xff1a;histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )。 输入参数&#xff…

mysql免安装版配置教程

一、将压缩包解压至你想要放置的文件夹中&#xff0c;注意&#xff1a;绝对路径中要避免出现中文 二、在解压目录下新建my.ini文件&#xff0c;已经有的就直接覆盖 my.ini文件内容 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\tools\\mysql-8.1.0-win…

(六)- DRM驱动开发(qcom)

一&#xff0c;Linux Android Display 1&#xff0c;Linux Android Display Software Subsystem 密 2&#xff0c;Linux Android Display Architecture 密 二&#xff0c;DRM/KMS Adreno DPU 1&#xff0c;硬件框图 密 1.1 Qualcomm Adreno DPU 8-Series Overview 密 …

手眼标定工具操作文档

1.手眼标定原理介绍 术语介绍 手眼标定&#xff1a;为了获取相机与机器人坐标系之间得位姿转换关系&#xff0c;需要对相机和机器人坐标系进行标定&#xff0c;该标定过程成为手眼标定&#xff0c;用于存储这一组转换关系的文件称为手眼标定文件。 ETH&#xff1a;即Eye To …

CTFshow-文件上传(Web151-170)

CTFshow-文件上传(Web151-170) 参考了CTF show 文件上传篇&#xff08;web151-170&#xff0c;看这一篇就够啦&#xff09;-CSDN博客 Web151 要求png&#xff0c;然后上传带有一句话木马的a.png&#xff0c;burp抓包后改后缀为a.php&#xff0c;然后蚁剑连接&#xff0c;找fl…

基于YOLOv8模型监控视频中的车辆检测与识别应用

1.摘要 该项目旨在通过技术手段加强交通纪律&#xff0c;提供一种更为人性化和智能化的交通监控方法。具体而言&#xff0c;通过利用PyQt5、YOLOv8和TensorFlow等技术栈&#xff0c;实现了对车辆的高效检测与识别&#xff0c;主要实现车辆类型识别以及速度监测等功能&#xff0…

CISC RISC

CISC&#xff1a;设计目标是通过复杂的指令来提高代码密度&#xff0c;减少指令数量&#xff0c;适合内存资源较为有限的系统。CISC处理器的硬件复杂度较高&#xff0c;但在某些应用场合&#xff08;如桌面计算机&#xff09;能够提供足够的性能。 RISC&#xff1a;设计目标是…

AI Agent与MEME:技术与文化融合驱动Web3创新

AI Agent如何引领Web3新时代&#xff1f; 随着Web3与区块链技术的迅速发展&#xff0c;AI Agent作为人工智能与区块链的交汇点&#xff0c;正在逐步成为推动去中心化生态的重要力量。同时&#xff0c;MEME文化凭借其强大的社区驱动力和文化渗透力&#xff0c;在链上生态中扮演着…

前端的知识(部分)

11 前端的编写步骤 第一步:在HTML的页面中声明方法 第二步:在<script>中定义一个函数,其中声明一个data来为需要的数据 赋值一个初始值 第三步:编写这个方法实现对应的功能

【鸿睿创智开发板试用】移植OpenCV 4到OpenHarmony 4.1

目录 目录 引言 编译系统镜像 (1) 下载代码后解压SDK (2) 下载docker镜像   (3) 编译OH 编译OpenCV 下载OpenCV源代码 构建编译配置文件 执行编译命令 安装库和头文件 测试 结语 引言 最近有个需求是在基于RK3568的OpenHarmony 4.1系统中使用OpenCV&#xff0c…

二分查找【Lecode_HOT100】

文章目录 1.搜索插入位置No.352.搜索二维矩阵No.743.在排序数组中查找元素的第一个和最后一个位置No.344.搜索旋转排序数组No.335.寻找旋转排序数组中的最小值No.153 1.搜索插入位置No.35 class Solution {public int searchInsert(int[] nums, int target) {int l 0;int r n…

蜂窝结构机械超材料

本研究设计了两种蜂窝结构机械超材料&#xff0c;具有可变的、依赖于拉伸或压缩的正负泊松比&#xff0c;并通过NOKOV度量动作捕捉验证了超材料的形变特性。 研究人员以《Mechanical Metamaterials with Discontinuous and Tension/Compression-Dependent Positive/Negative Po…

JAVA入门:使用IDE开发

JAVA入门:使用IDE开发 什么是IDE IDE(Integrated Development Environment,集成开发环境)是一种软件应用程序,它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程,让编程更加方便。 IDEA 业界公认最好用的JAVA IDE 安装IDEA 打开IDEA官…

opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形

一、Sobel算子 案例图片 cv2.Sobel(src, ddepth, dx, dy, ksize3, scale1, delta0, borderTypeNone) 功能&#xff1a;用于计算图像梯度&#xff08;gradient&#xff09;的函数 参数&#xff1a; src: 输入图像&#xff0c;它应该是灰度图像。 ddepth: 输出图像的所需深度&am…

CEF127 编译指南 MacOS 篇 - 拉取 CEF 源码(五)

1. 引言 在完成了所有必要工具的安装和配置后&#xff0c;我们进入到获取 CEF 源码的阶段。对于 macOS 平台&#xff0c;CEF 的源码获取过程需要特别注意不同芯片架构&#xff08;Intel 和 Apple Silicon&#xff09;的区别以及版本管理。本文将详细介绍如何在 macOS 系统上获…

C# OpenCV机器视觉:图像平滑

在一个寒冷的冬日&#xff0c;阿强窝在家里的沙发上&#xff0c;裹着厚厚的毛毯&#xff0c;手里捧着一杯热巧克力。他的朋友们约他一起去滑雪&#xff0c;但阿强却更喜欢待在温暖的家中&#xff0c;享受这份宁静。突然&#xff0c;他的手机响了&#xff0c;是朋友们发来的滑雪…

基于quasar,只选择年度与月份的组件

为什么要做 quasar是个基于vue的强大的UI开发库&#xff0c;它提供了非常多的组件&#xff0c;比如日期选择。但是有些时候只需要选择到月份就可以了&#xff0c;quasar中没有&#xff0c;所以自己动手写了一个。因为对界面编程我不熟悉&#xff0c;所以&#xff0c;如果你有更…

02-3.python入门基础一操作符与表达式

接上章 : 02-2.python入门语法一变量与数据类型2 本文将深入介绍Python中的各种操作符&#xff0c;包括算术操作符、比较操作符、逻辑操作符等&#xff0c;并详细讲解如何使用这些操作符构建表达式。通过丰富的示例与详细的讲解&#xff0c;帮助读者全面掌握这一重要的基础知识…

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等

【自动化】Python SeleniumUtil 工具 【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动…