【寄存器开发速成】半小时入门寄存器开发(基于STM32的寄存器开发简明教程)

news2024/10/12 14:30:03

一.认识寄存器

        寄存器(register)是CPU(中央处理器)的组成部分,是一种直接整合到cpu中的有限的高速访问速度的存储器,它是有一些与非门组合组成的,分为通用寄存器和特殊寄存器。

        寄存器是CPU的最基本组成部分,是学习芯片最基础最底层的东西。我们都知道单片机是内部集成CPU,RAM,ROM以及IO口和其他外围电路的集成电路芯片。我们想操作单片机,就得了解内部的寄存器,通过寄存器间接控制整个芯片。

        单片机的本质其实就是在操作寄存器,单片机的库函数实质上也是把寄存器操作封装好。

二 .寄存器映射

        对于STM32F103,或者Cortex_M3内核来说,其内部可寻址的最大空间为2^32B,即4GB。

注意:这里的4GB不是指它的存储空间,指的是其能够有效访问的内存单元(地址总线)的数量。

在这4GB空间中,ARM分为了八个块,每个块都有不同的用途 

其中我们要特别关注Block2这块区域,这块区域被设计为外设总线的映射区域,以四个字节为一个单元,共32bit,每一个单元对应不同的功能,我们通过操作这些单元就可以驱动相应的外设,这就是寄存器的操作方式。

于是ST公司就为这些特定的功能单元取了一个别名,封装进了文件stm32f10x.h,这个过程就叫做寄存器映射

三.使用寄存器

*(unsigned int*)(0x4001 0C0C) = OxFFFF;

上面这句代码表示将0x4001 0C0C这个十六进制数转换为(unsigned int*)类型的地址,然后解引赋值。

但是上面的操作太繁琐了,于是改进为宏定义:

#define  GPIOB_ODR  *(unsigned int*)(0x4001 0C0C)

 于是就可以:

GPIOB_ODR =0XFFFF:

四.查找寄存器

1.参考手册

        如果想查看某个寄存器的话,我们可以到STM32F10xxx参考手册(中文)中查找。

可以看到,以上所有的寄存器基本上都是以地址偏移来表示的,即基地址+偏移量

例如GPIOB就是在APB2总线的基地址0x4001 0000上偏移了0x0C00后得到的0x2001 0C00。

我们还可以在上述手册中看到对应寄存器各个位的详细解释。

2.示例

例如APB2总线的一个寄存器RCC_APB2ENR:

如果我们想开启TIM8的时钟使能,就可以这么写:

RCC_APB2ENR |= 0x2000;

或者

unsigned int *pRCC_APB2ENR = (unsigned int *)0x40021018;
*pRCC_APB2ENR |= 0x00002000;

 

有些寄存器是几个外设通用的,比如GPIO的寄存器:

 后面的(x=A..E)就代表这个寄存器是几个GPIO端口(A..E)通用的。

头文件里也很明确定义了结构体类型:

对于这种我们调用时就可以这么调用了:

GPIOB->LCKR = xxxxxxxxx;

五.总结

        由于寄存器更接近底层,所以寄存器操作更快,效率也更高,虽然记忆起来比库函数麻烦,但是仍有可取之处,两者各有优劣,当然我们可以使用两者混合编程,把优势发挥到最大。


                                                                                                                        如有错误,感谢指正

                                                                                                                                        2024.10.12 

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

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

相关文章

产品经理,真有35岁这道坎吗?

前言 在职场生涯的某个阶段,产品经理们往往会面临一个普遍的疑问:是否存在一个35岁的门槛,一旦跨过,职业发展就会遭遇瓶颈?尤其是在技术迭代迅速的互联网行业,这样的担忧尤为明显。然而,对于有…

教你如何2小时从零开始搭建一套完整的性能测试环境

文章目录 一、前言1.1 准备工作1.2 最终目标 二、安装步骤2.1 购买云服务器和NAS存储2.2 kubekey方式安装k8s集群2.2.1 环境检查及安装基础包2.2.2 kubekey安装k8s集群2.2.3 压测机环境准备2.2.4 中间件部署2.2.4.1 部署NFS远程共享存储2.2.4.2 部署MySQL2.2.4.3 部署Redis2.2.…

spring 启动失败 active: @env@

参考:SpringBoot启动失败报错,spring.profiles.active:env中环境变量无法识别报错_active: env_profileactive启动报错 ine 3, column 13:-CSDN博客

通义灵码-----阿里巴巴推出的 AI 编程助手,一站式安装使用教程。 我自己就是在用,感觉写代码会高效很多

"通义灵码"(Tongyi Lingma),这是阿里巴巴推出的 AI 编程助手。通义灵码是基于阿里云的通义大模型,为开发者提供代码补全、代码生成等智能辅助功能。 启用和使用通义灵码 以下是如何在 IntelliJ IDEA 中安装和使用通义灵…

VSCode的常用插件(持续更新)

点击左边工具栏的“扩展”,在搜索栏中查找对应插件,点击“安装”,安装完成后右边界面的插件会显示“卸载”按钮。 1、中文(简体)语言包 2、Auto Rename Tag 修改开始标签,结束标签也会随之自动变化。 3、O…

ClickHouse的原理及使用,

1、前言 一款MPP查询分析型数据库——ClickHouse。它是一个开源的,面向列的分析数据库,由Yandex为OLAP和大数据用例创建。ClickHouse对实时查询处理的支持使其适用于需要亚秒级分析结果的应用程序。ClickHouse的查询语言是SQL的一种方言,它支…

Python 情感分析与词向量

Python 情感分析与词向量 在现代数据驱动的世界中,情感分析成为了一种重要的文本分析技术,它帮助我们理解和挖掘用户对产品、服务或事件的情感倾向。Python 作为一种强大的编程语言,提供了丰富的工具和库来支持情感分析的实现,其…

【Kubernets】配置类型资源 Etcd, Secret, ConfigMap

文章目录 所有资源概览Etcd详细说明一、基本概念二、主要功能三、架构与组件四、数据模型与操作五、安全与认证六、集群部署与管理 Secret详细说明一、Secret 的类型二、Secret 的创建三、Secret 的使用四、Secret 的更新与删除五、Secret 的安全性 ConfigMap详细说明一、Confi…

Web服务器小项目(Linux / C / epoll)

注意:前置知识: HTTP: https://xingzhu.top/archives/web-fu-wu-qi Linux 多线程: https://xingzhu.top/archives/duo-xian-cheng 源码放github上了,欢迎star: https://github.com/xingzhuz/webServer 思路 实现代码 server.h #pragma once #include &…

毕设成品 基于深度学习二维码检测识别系统

文章目录 0 简介1 二维码基础概念1.1 二维码介绍1.2 QRCode1.3 QRCode 特点 2 机器视觉二维码识别技术2.1 二维码的识别流程2.2 二维码定位2.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 最后 0 简介 今天学长向大家分享一个毕业设计项目 **毕业设计 基于深度学习…

【最新华为OD机试E卷-支持在线评测】第K个排列(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

【MySQL 保姆级教学】在Linux(CentoS 7)中安装MySQL(1)

目录 1. 卸载linux(Centos7) 中不要的环境2. 获取MySQL官方yum源2.1 获取yum源前先查看自己 linux(Centos)的版本2.2 获取官方yum源 3. 安装xftp和连接4. 开放连接端口5. 上传文件到Centos76. 安装MySQL6.1 顺利安装6.2 查询是否安…

Terminus ssh key 登陆

生成key 一、添加 KEY 配置 电脑: Terminus > Preferences,或 ⌘,。选择左侧 Keychain 标签。 手机: Terminus > Keychain 电脑: 点击右侧上方的 NEW KEY 按钮, 手机: 点加号 电脑: 在最右侧弹出的页面中填写 Label 和 Private key,Private ke…

电脑怎么录屏?探索屏幕捕捉的奥秘,新手也能成为录屏高手!

在数字时代,无论是制作教学视频、分享游戏精彩瞬间还是展示软件操作流程,屏幕录制都成了一项必不可少的技能。然而,对于许多初次接触录屏的新手来说,如何开始这一过程似乎充满了挑战。本文将为你揭开录屏的神秘面纱,带…

golang-基础知识(流程控制)

1 条件判断if和switch 所有的编程语言都有这个if,表示如果满足条件就做某事,不满足就做另一件事,go中的if判断和其它语言的区别主要有以下两点 1. go里面if条件判断不需要括号 2. go的条件判断语句中允许声明一个变量,这个变量…

MySQL8.0环境部署+Navicat17激活教程

安装MySQL 下载MySQL MySQL官网下载当前最新版本,当前是8.0.39。 选择No thanks, just start my download等待下载即可。 安装MySQL 下载完成后,双击安装进入安装引导页面。选择Custom自定义安装。 选择MySQL Server 8.0.39 - X64安装。 点击Execute执…

基于BeautyEye开发Java程序用户界面

文章目录 I idea引入jar包添加本地jar包maven方式引入本地包方式1:将第三方JAR包安装到本地仓库maven方式引入本地包方式2:引用本地路径将本地jar包打进war包Maven内置变量说明II BeautyEye Swing外观实现方案案例III 知识扩展Swing常用的顶级容器BeautyEye SwingI idea引入j…

在python中如何判断回文串(二)?

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

一次性解决vue3引入@jiaminghi/data-view需要手动修改node_modules下文件

修改文件1:node_modules\jiaminghi\data-view\lib\components\decoration6\src\main.vue 修改文件2: node_modules\jiaminghi\data-view\lib\components\decoration3\src\main.vue 修改前: 修改后: 通过打补丁的方式对引用库进行…

SpringBoot购物推荐网站:从零到一的构建过程

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…