野火霸天虎 STM32F407 学习笔记_2 寄存器介绍

news2024/11/22 10:29:46

寄存器

虽然正式编程没有必要用寄存器编程,通常都是库函数或者 hal 库。但是还是有必要学一下原理的。

寄存器映射

芯片视图如下。

丝印:芯片上印的信息。型号,内核,生产批次等。

引脚:左上角是有小圆点的,从左上-左下-右下-右上逆时针看。或者如果没有小圆点,把丝印方向摆正,从左上角开始看。

image-20231102121423731

芯片内部组成:

image-20231102121841662

寄存器映射:32位,232=4GB,因此所有程序都需要通过内存 4GB 去映射访问。

image-20231102122058475

block7:M4 芯片内外设,比如一些通信总线这些都算外设。

block1:内存。

block0:代码。不过实际上由于设计工艺的问题,block0 block1 都只用了很少的一部分来存代码或者作为内存。

外设寄存器放在 block2 中。根据不同块速度不一样,又具体分为不同速度的外设(AHB APB)。

总线速度:AHB>APB2>APB1. APB1 是较低速的外设,包括 I2C UART SPI 看门狗等。

我们想要操作特定的外设,其实就是控制他的寄存器。控制寄存器就要找到寄存器相应的地址往里面写入数据,寄存器地址就是内存中的地址映射。

比如 GPIOF 我们想让其端口全部输出高电平。我们查找 stm32f407 手册,发现 GPIOF 的地址是 0x40021400,GPIOF 的 ODR(output data register)相对起始地址的偏移地址是14,则我们需要给 0x40021414 的地址写入数据 0xFFFF.

image-20231102123404148

51 单片机库函数中封装的 reg51.h 中,利用 sfr 定义寄存器地址;而 stm32 库函数中使用宏定义,这些就是寄存器映射操作。对芯片里一个特殊功能的内存单元起别名的过程就是寄存器映射。 给这个地址再分配一个地址交重映射,stm32 中不咋常用。

C语言对寄存器的封装

这样逐个地址,哪怕已经进行了寄存器映射,还是很复杂。

c 语言库函数实际进行的封装操作是使用结构体批量定义。

/* GPIO 外设基地址 */
#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000)
#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400)
#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800)
#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00)
#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000)
#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400)
#define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800)
#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00)

/* GPIO 寄存器列表 */
typedef struct {
    uint32_t MODER; /*GPIO 模式寄存器 地址偏移: 0x00 */
    uint32_t OTYPER; /*GPIO 输出类型寄存器 地址偏移: 0x04 */
    uint32_t OSPEEDR; /*GPIO 输出速度寄存器 地址偏移: 0x08 */
    uint32_t PUPDR; /*GPIO 上拉/下拉寄存器 地址偏移: 0x0C */
    uint32_t IDR; /*GPIO 输入数据寄存器 地址偏移: 0x10 */
    uint32_t ODR; /*GPIO 输出数据寄存器 地址偏移: 0x14 */
    uint16_t BSRRL; /*GPIO 置位/复位寄存器低 16 位部分 地址偏移: 0x18 */
    uint16_t BSRRH; /*GPIO 置位/复位寄存器高 16 位部分 地址偏移: 0x1A */
    uint32_t LCKR; /*GPIO 配置锁定寄存器 地址偏移: 0x1C */
	uint32_t AFR[2]; /*GPIO 复用功能配置寄存器 地址偏移: 0x20-0x24 */
} GPIO_TypeDef;

/* 使用 GPIO_TypeDef 把地址强制转换成指针 */
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)
#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)

所有外设都是如此,首先定义总线 APB AHB 地址,然后每个外设在其基础上进行偏移,每个外设的不同部分再在该外设基址上进行偏移。

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

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

相关文章

CH09_重新组织数据

拆分变量(Split Variable) 曾用名:移除对参数的赋值(Remove Assignments to Parameters) 曾用名:分解临时变量(Split Temp) let temp 2 * (height width); console.log(temp); t…

JVM——类的生命周期(加载阶段,连接阶段,初始化阶段)

目录 1.加载阶段2.连接阶段1.验证2.准备3.解析 3.初始化阶段4.总结 类的生命周期 1.加载阶段 ⚫ 1、加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道。 ⚫ 2、类加载器在加载完类…

SAP 物料凭证在凭证流中显示归档

问题: 在交货单做过PGI/PGR之后,显示物料凭证已归档,但是实际上并不是人为归档 MIGO去显示物料凭证的时候显示不存在 VL09 无法冲销 如下图所示 原因:1.人为做了归档 2.在做PGI的时候出现了异常。导致出现了问题 解决…

本章内容的重点是对各种电子式电动机保护器电路的原理分析和故障维修指导,对电子式电动机保护器以下简称为电动机保护器。

上世纪八十年代之前,电子技术的应用尚处于初级阶段,对电动机的保护任务多由热继电器承担,国内型号为为JR20-XX系列、JR36-XX系列等。其保护机理如下:热继电器由发热元件、双金属片、触点及一套传动和调整机构组成。发热元件是一段…

react-hook-form。 useFieldArray Controller 必填,报错自动获取较多疑问记录

背景 动态多个数据Controller包裹时候,原生html标签input可以add时候自动获取焦点,聚焦到最近不符合要求的元素上面 matiral的TextField同样可以可是x-date-pickers/DatePicker不可以❌ 是什么原因呢,内部提供foucs??属…

【C++】医学影像信息管理系统源码

狭义的医学影像信息系统是指基于医学影像存储和通信系统的管理系统,从技术上解决了影像处理技术。临床信息系统是指支持医院医务人员临床活动,收集和处理患者临床医疗信息的信息管理系统。放射科信息系统是指放射科挂号、分诊、影像诊断报告、信息查询、…

在Qt中解决opencv的putText函数无法绘制中文的一种解决方法

文章目录 1.问题2.查阅资料3.解决办法 1.问题 在opencv中,假如直接使用putText绘制中文,会在图像上出现问号,如下图所示: 2.查阅资料 查了一些资料,说想要解决这个问题,需要用到freetype库或者用opencv…

ASO优化之Google Play评分评论的重要性

应用程序的成果不仅仅是拥有功能齐全且无错误的产品,评分和评论会影响谷歌应用商店的排名算法,好评和差评都会影响应用在商店中的排名,这是关于与用户建立信任的一个环节。 1、积极主动地管理评论。 定期监控评论、解决用户问题以及根据反馈…

python脚本-网页爬虫获取网页图片

python脚本-网页爬虫获取网页图片 代码 import requests import re import time url"http://10.9.47.154/python-spider/" # 爬取网站的url headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like …

阿里云双11特惠:云服务器1年99元,新老同享,续费同价!

2023年双11阿里云推出了金秋云创季活动,云服务器特惠,2核2G云服务器1年99元,新老同享,续费同价! 活动地址: https://txy.ink/aliyun/ 活动详情: 阿里云面向个人开发者、学生、小微企业推出爆…

电压跟随器输入脚悬空引起的振荡

昨天在调试一个电路板的时候,发现进单片机AD脚的信号上面有个50Hz的波形,峰峰值还挺大,有几百毫伏。这种情况只有在输入端悬空的时候才出现;在输入端接了信号或者传感器的时候,就又正常了。 经过排查,发现…

92 数据流中的中位数

数据流中的中位数 题解1 小根堆大根堆另一种写法 中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFi…

使用Java与Jsoup库构建有趣的爬虫项目

目录 一、网络爬虫的概念和应用 二、Jsoup库的功能和优势 三、使用Java与Jsoup库编写网络爬虫 四、网络爬虫的法律和道德问题 五、注意事项 六、总结 本文将深入探讨如何使用Java与Jsoup库构建一个实际且有趣的网络爬虫项目。我们将首先简要介绍网络爬虫的概念和应用&…

运动耳机哪个好?跑步耳机哪个好?运动耳机排行榜推荐

​运动时没有音乐的相伴真的很枯燥,当你打开音乐,世界就只剩下你和你的运动。运动的同时听歌还能让你完全沉浸在音乐中,享受运动的乐趣。无论是在激烈的比赛中,还是在轻松的晨跑中,它都能为你提供最佳的听觉体验。然而…

银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit

脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64mkdir -p /home/zenglg cd /home/zenglg git clone --depth 1 https://gitee.com/xia-chu…

【23-24 秋学期】NNDL 作业6 卷积

卷积常用于特征提取 实验过程中注意认真体会“特征提取”,弄清楚为什么卷积能够提取特征。 一、概念 用自己的语言描述“卷积、卷积核、特征图、特征选择、步长、填充、感受野”。 二、探究不同卷积核的作用 卷积神经网络工作原理的直观理解_superdont的博客-CS…

DCN无线网络解决方案

一、概述 网络环境建设项目的目标是要建设一套安全可靠、性能领先的无线网络系统,能够良好支撑协同工作平台。经过几年的建设,网络建设已经由大规模建设阶段逐步转入“建设与服务并重,着力深化应用”的新阶段。在此阶段,网络工作…

基于Apache SeaTunnel 的数据精确一致性技术实践

引言 在分布式系统中,保障数据一致性是至关重要的任务之一。数据一致性是指分布式系统中的各个节点在进行数据更新时能够保持数据的准确性和完整性。然而,由于网络延迟、节点故障等原因,分布式系统中的数据一致性问题变得复杂而具有挑战性。…

行业揭秘:腾讯共享wifi码推广零加盟费是真的吗?

近年来,“共享经济”概念在商业领域取得了巨大成功。共享WiFi贴码成为共享经济的一种典型案例,被越来越多的人看作是一种低风险、高回报的投资方式。而在这个市场中,腾讯WiFi码推广以“零加盟费”而备受关注。本文将探讨腾讯WiFi码推广零加盟…

中国商界杂志中国商界杂志社中国商界编辑部2023年第10期目录查询

要闻 我国旅游市场步入理性繁荣阶段 赵熠如; 10-11 产业 老国货品牌再迎高光时刻 能否留住流量 涂瀚文; 12-13《中国商界》投稿:cnqikantg126.com 金融集聚有力 促进长三角城市高质量发展 刘盛坤; 14-17 辽宁农贸市场亟待优化升级路径在哪儿&#x…