单片机的操作本质【以STM32系列为例】

2023-05-16

单片机的操作本质

  • 摘要
    • 寄存器的本质
    • 单片机的操作本质
    • 操作寄存器的方法

摘要

本文档是笔者学习野火F103视频【课时5】至【课时7】的总结。
视频链接:https://study.163.com/course/introduction/1006510016.htm

寄存器的本质

STM32系列单片机即:32位的单片机,具有4GB的地址空间;ARM 公司将这4GB的内存空间分成8个小块,每块为512M

内存单位转换

序号用途地址范围
Block 0Code0x0000 0000 ~ 0x1FFF FFFF(512MB)
Block 1SRAM0x2000 0000 ~ 0x3FFF FFFF(512MB)
Block 2片上外设0x4000 0000 ~ 0x5FFF FFFF(512MB)
Block 3FSMC 的 bank1 ~ bank20x6000 0000 ~ 0x7FFF FFFF(512MB)
Block 4FSMC 的 bank3 ~ bank40x8000 0000 ~ 0x9FFF FFFF(512MB)
Block 5FSMC 寄存器0xA000 0000 ~ 0xCFFF FFFF(512MB)
Block 6预留0xD000 0000 ~ 0xDFFF FFFF(512MB)
Block 7Cortex-M3 内部外设0xE000 0000 ~ 0xFFFF FFFF(512MB)

表格内容来自《零死角玩转STM32》

芯片生产厂商(SOC)如:ST、TI、Freescale 等公司则在 ARM 公司的基础上将每块的地址空间再次细分作为各种片上外设的存储空间。
图片来自【STM32F103xCDE_数据手册】
根据各片上外设功能的不同,又将各外设对应的存储空间细分为一个个32位的存储空间并赋予一个名称。
我们常说的 寄存器 就是这个 名称 所对应的 存储空间

单片机的操作本质

对单片机操作实质是对寄存器的操作,也就是改变相应存储空间的数据。

操作寄存器的方法

每一个寄存器都具有其唯一的地址,利用寄存器的起始地址,通过C语言的指针操作可以实现对寄存器的访问。
实例:
片内外设 GPIOA 的地址范围: 【0x4001 0800】 - 【0x4001 0BFF】
与 GPIOB 相关的寄存器如下表:

寄存器名称寄存器起始地址
端口配置低寄存器【GPIOA_CRL 】0x4001 0800
端口配置高寄存器【GPIOA_CRH】0x4001 0804
端口输入数据寄存器【GPIOA_IDR】0x4001 0808
端口输出数据寄存器【GPIOA_ODR】0x4001 080C
端口位设置/清除寄存器【GPIOA_BSRR】0x4001 0810
端口位清除寄存器【GPIOA_BRR】0x4001 0814
端口配置锁定寄存器【GPIOA_LCKR】0x4001 0818

对端口输出数据寄存器【GPIOA_ODR】进行操作:

//先将寄存器的起始地址转换为指针:
(unsigned int*)(0x4001 080C)
//再通过指针进行访问:
*(unsigned int*)(0x4001 080C) = 0xFFFF;

//为了方便使用,一般通过 宏定义 的方式将指针命名为其他名称:
#define GPIOA_ODR    (unsigned int*)(0x4001 0C0C)
*GPIOA_ODR = 0xFFFF//或者,将整个指针操作进行宏定义:
#define GPIOA_ODR   *(unsigned int*)(0x4001 0C0C)
GPIOA_ODR = 0xFFFF
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机的操作本质【以STM32系列为例】 的相关文章

随机推荐

  • cmake 设置 debug release模式

    1 通过命令行的方式 cmake DCMAKE BUILD TYPE 61 Debug 2 set CMAKE BUILD TYPE Debug CACHE STRING 34 set build type to debug 34 或者 s
  • 华为笔试题(4)

    一 计算n x m的棋盘格子 xff08 n为横向的格子数 xff0c m为竖向的格子数 xff09 沿着各自边缘线从左上角走到右下角 xff0c 总共有多少种走法 xff0c 要求不能走回头路 xff0c 即 xff1a 只能往右和往下走
  • 安装RedisBloom插件

    前言 安装RedisBloom模块会遇到很多坑 xff0c 希望你不要和我一样踩的这么全 x1f60f 如果觉得编译麻烦 xff0c 我也上传了我编译的so文件 xff0c 可以直接加载使用 https download csdn net
  • ROS Catkin 教程之 CMakeLists.txt

    1 概览 CMakeLists txt 是用 CMake 构建系统构建 ROS 程序包的输入文件 任何兼容 CMake 的包都包含一个或多个 CMakeLists txt 文件 xff0c 用以描述怎样构建和安装代码 catkin 项目采用
  • Xsens Mti-g-710 IMU driver在Ubuntu18.04 ROS melodic中的安装使用

    Ubuntu18 04下安装的ROS melodic 如何使用Xsens Mti g 710 IMU driver xff1f 这里给出一个详细步骤说明 这里的IMU是USB接口 1安装 首先插入IMU的USB口 命令行运行 gt lsus
  • PYTHON -MYSQLDB安装遇到的问题和解决办法

    PYTHON MYSQLDB安装遇到的问题和解决办法 参考文章 xff1a xff08 1 xff09 PYTHON MYSQLDB安装遇到的问题和解决办法 xff08 2 xff09 https www cnblogs com gaosh
  • 位姿估计Robot_pose_efk的配置和使用

    Robot pose efk 用于融合里程计 xff0c 惯性测量单元和视觉里程计的传感器输出 xff0c 从而减少测量中的总体误差 了解ROS的robot pose ekf软件包中扩展卡尔曼滤波器的用法 xff1a robot pose
  • linux录屏和截图软件

    linux下的录屏和截图软件有很多 xff0c kazam集成了录屏和截图两个功能 xff0c 而且十分轻量级 xff0c 比较好用 如果是在VirtualBox虚拟机中跑linux的话 xff0c virtualbox本身就提供录屏和截图
  • APM 学习 6 --- ArduPilot 线程

    ArduPilot 学习之路 6 xff0c 线程 英文原文地址 xff1a https ardupilot org dev docs learning ardupilot threading html 理解 ArduPilot 线程 线程
  • nginx 配置多个vue,环境部署

    1 最近项目要上线 xff0c 需要通过nginx作为代理 xff0c 要发布2个VUE前端项目 xff0c 记录一下nginx conf配置文件 亲自验证 xff0c 特此记录一下 xff0c 希望能帮助向我一样 小白的人 user ro
  • freertos源码分析(1)--初始篇

    代码下载地址 xff1a https www freertos org 部分转载参考 FreeRTOS基础知识 xff1a RTOS全称为 xff1a Real Time OS xff0c 就是实时操作系统 xff0c 强调的是 xff1a
  • nginx服务占用百分之百

    一 当nginx达到100 时 xff0c 也就是服务器负载突然上升 1 利用top命令查看cpu使用率较高的php cgi进程 PID USER PR NI VIRT RES SHR S CPU MEM TIME 43 COMMAND 1
  • Gazebo教程(使用roslaunch 启动Gazebo,world以及urdf模型)

    Gazebo教程 xff08 使用roslaunch 启动Gazebo xff0c world以及urdf模型 xff09 关于如何学习ROS可以参考古月居的这篇文章 1 https www zhihu com question 35788
  • dispatch_queue_create---创建队列

    dispatch queue create span class hljs keyword const span span class hljs keyword char span label dispatch queue attr t a
  • Java多种方式解决生产者消费者问题(十分详细)

    一 问题描述 生产者消费者问题 xff08 Producer consumer problem xff09 xff0c 也称有限缓冲问题 xff08 Bounded buffer problem xff09 xff0c 是一个多线程同步问题
  • Http协议WWW-Authenticate

    HTTP协议有一个叫WWW Authenticate的头字段 xff0c 可以用于实现登录验证 它是在RFC 2617中定义的 当服务器接收到一个request xff0c 并在实现下面的代码 xff1a br http response
  • Android 运行时注解

    编译时注解点击此处 xff5e xff5e xff5e 运行时注解 以 64 BindView 为例 下面是实现步骤 新建一个 apt annotation 的 java library xff0c 然后在库中新建一个注解 xff0c 传入
  • 使用k-近邻算法识别手写数字。

    在之前的文章中介绍了k 近邻算法的原理知识并且用Python实现了一个分类器 xff0c 而且完成了一个简单的优化约会网站配对效果的实例 在 机器学习实战 中有关kNN的后一部分内容就是一个手写识别系统 xff0c 可以识别手写的0 9的数
  • 在Ubuntu14.04不能添加PPA源到apt源的问题解决方法

    在Ubuntu14 04使用apt get 更新Git 时 xff0c 需要更新apt源 xff0c 添加一个带有最新Git的源 xff0c 如下命令 xff1a sudo add apt repository ppa git core p
  • 单片机的操作本质【以STM32系列为例】

    单片机的操作本质 摘要寄存器的本质单片机的操作本质操作寄存器的方法 摘要 本文档是笔者学习野火F103视频 课时5 至 课时7 的总结 视频链接 xff1a https study 163 com course introduction 1