STM32(二)什么是寄存器
STM32芯片架构简图 STM32F10xx系统框图
一、什么叫存储器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址分配地址的过程就称为存储器映射。
分配地址后,会使用指针去操作内存地址。
二、什么是寄存器?
有特定功能的内存单元,通常我们会给这个特殊的内存单元取一个名字,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
三、什么叫重映射?
给存储器分配地址的过程叫存储器映射,在分配一个地址叫重映射。
四、通过寄存器访问访问内存单元的几种方式
1、通过绝对地址去访问
让GPIOB端口的16个引脚输出高电平,要怎么实现?
绝对地址=外设起始地址+寄存器偏移地址
比如现在我们要找GPIOB的绝对地址,可以查STM32芯片手册,可以看到起始地址为0x40010C00
然后再找到端口输出数据寄存器(ODR)的偏移地址
物理地址=0x40010C00 + 0x0C=0x40010C0C
要让16个引脚都输出高电平
*(unsigned int *)(0x40010C0C) = 0xFFFF;
2、通过寄存器别名的方式访问内存单元
1 2 3 | #defined GPIOB_ODR (unsigned int *)(0x40010C0C) *GPIOB_ODR = 0xFF; |
为了方便操作,我们干脆把指针操作“*”也定义到寄存器别名里面
1 2 | #define GPIOB_ODR *(unsigned int*)(0x40010C0C) GPIOB_ODR = 0xFF; |
1 2 | GPIOB_ODR & = ~(1<<0); // 让PB0输出低电平 GPIOB_ODR & |= (1<<0) // 让PB0输出高电平 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)