一,对比51单片机和STM32对寄存器的操作
1)51单片机:
sfr P0=0x80; //关键字sfr 声明地址和名称的映射
P0=0x00; //将0x00赋值给P0口的8位(51单片机一组IO为8位)
2)STM32:
GPIOA->ODR=0x00000000 //为GPIOA的ODR寄存器地址赋值0x00000000
二,以GPIOA为例说明STM32寄存器和名称的映射:
GPIOA下的某个寄存器,挂载在GPIOA下,地址为GPIOA基地址+偏移量
GPIOA挂载在APB2总线,地址为APB2总线基地址+GPIOA偏移量
ABP2挂载加外设基地址,地址为外设基地址+ABP2偏移量
源码中可以找到:
//外部总线基地址
#define PERIPH_BASE ((uint32_t)0x40000000)
//APB2基地址=外部总线基地址+偏移量
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
//GPIOA基地址=APB2基地址+偏移量
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
//GPIOA将地址顺序分配给7个32位寄存器(结构体分配)
#define GPIOA ((GPIO_TypeDef*)GPIOA_BASE)
//将寄存器地址映射到7个32位寄存器,分别控制
typedef struct
{
__IO unit32_t CRL;
__IO unit32_t CRH;
__IO unit32_t ODR;
__IO unit32_t IDR;
__IO unit32_t BSRR;
__IO unit32_t BRR;
__IO unit32_t LCKR;
}GPIO_TypeDef;
在STM32手册中:GPIO寄存器地址映像如下:
如此,实现STM32寄存器名称和地址之间的映射关系
关键字:寄存器 地址 映射
引用地址:
寄存器名称和地址的映射分析
推荐阅读最新更新时间:2024-03-16 16:12
8051单片机的寄存器是什么样的
CPU中使用寄存器来临时存储信息,这些信息可以是要处理的数据,也可以是指向要获取的数据的地址。在8051单片机中,有一种数据类型是8位,从MSB(最高有效位)D7到LSB(最低有效位)D0。对于8 位数据类型,任何大于 8 位的数据类型都必须在处理之前分成 8 位块。 8051中使用最广泛的寄存器是 A(累加器)、B、R0-R7、DPTR(数据指针)和 PC(程序计数器)。所有这些寄存器都是 8 位的,除了 DPTR和 PC。 一、8051中的存储寄存器 我们将在这里讨论以下类型的存储寄存器: 1.累加器; 2.寄存器; 3.B寄存器; 4.数据指针 (DPTR); 5.程序计数器 (PC); 6.堆栈指针 (SP)。 (
[单片机]
关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题
在编译下面一段代码时: STACK_TOP EQU 0x20002000 AREA Reset,CODE,READONLY DCD 0x20002000 DCD Start ENTRY ; CODE16 Start ldr r2,=Test LDRD r0,r1, LDRD r0,r1, LDRD r0,r1, ; movs r0,r0 ; NOP ; align 4 Test DCD 0x12345678 END 我发现,如果加上NOP或align4,程序就不会跑飞,否则程序就跑飞了。
[单片机]
ARM程序状态寄存器
ARM体系结构包含一个当前程序状态寄存器(CPSR)和五个备份的程序状态寄存器(SPSRs)。备份的程序状态寄存器用来进行异常处理,其功能包括: ─ 保存ALU中的当前操作信息 ─ 控制允许和禁止中断 ─ 设置处理器的运行模式 条件码标志(Condition Code Flags) N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。 在ARM状态下,绝大多数的指令都是有条件执行的。 在Thumb状态下,仅有分支指令是有条件执行的。 控制位 PSR的低8位(包括I、F、T和M )称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。 ─ 中断
[单片机]
基于ARM单片机中的部分寄存器地址为什么会相差4
图中是LPC1114用户手册系统控制模块(SYSCON)中的部分寄存器,请看红色框内,地址相差0x4。为什么会相差4?很多初学者问我这个问题,高手就请绕过吧。 计算机、单片机都是以字节为单位进行存储的。这里的4就是4个字节的意思。上面列举的LPC1114是ARM Cortex-M0内核,STM32是ARM Cortex-M3内核,这两ARM单片机都是32位的。1个字节是8位,4个字节就是32位。32位单片机的寄存器基本上是32位的,8位单片机的寄存器基本上也是8位的。 打开你曾经用过的reg51.h文件,看看普通51单片机的寄存器地址映射,一共不到100个寄存器,几下就写完了。但是ARM单片机内部的模块非常多,寄存器也非常
[单片机]
巧用外设复位修改只读寄存器
有STM32开发者用到STM32F429芯片开发产品,并用到其中的CAN外设。在CAN应用过程中有个专门针对收发出错情况进行次数统计的两个计数器,其值通过错误状态寄存器CAN_ESR中的REC 和TEC 两个字段来体现,CAN硬件会根据错误数据大小做适当响应或处理。 根据寄存器描述得知,TEC 和REC 的值在这个寄存器里面是只读的。而此时的STM32用户有个强烈的需求,就是期望能适时地对这两个出错记录字段做清零。他自己也尝试编写一些代码想让二者清零,均以失败告终,便邮件咨询有无解决办法。 我们在阅读CAN_ESR寄存器内容时倒有个发现,即该寄存器的复位值是0x00000000。 也就是说,芯片每次复位后其值一定是0,
[单片机]
ATtiny13 控制和状态寄存器MCUCSR
AVR 控制和状态寄存器提供了有关引起AVR复位的复位源的信息。 · Bit 7..4 –Res:保留 保留位,读操作返回值为零。 · Bit 3 – WDRF: 看门狗复位标志 看门狗复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 · Bit 2 – BORF: 掉电检测复位标志 掉电检测复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 · Bit 1 – EXTRF: 外部复位标志 外部复位发生时置位。上电复位将使其清零,也可以通过写”0” 来清除。 · Bit 0 – PORF: 上电复位标志 ATtiny13上电复位发生时置位。只能通过写”0” 来清除。为了使用这些复位标志来识别复位
[单片机]
STM32学习笔记--GPIO寄存器的定义
1、GPIO的寄存器按照功能可以分为以下几类: A、配置寄存器 B、数据寄存器 C、位寄存器 D、 锁定寄存器 2、对于GPIO端口,每个端口有16个引脚,每个引脚的模式由寄存器的四个位控制,每四位又分为两位控制引脚配置(CNFy ),两位控制引脚的模式及最高速度(MODEy ),其中y表示第y个引脚。配置GPIO引脚模式的一共有两个寄存器,CRH是高寄存器,用来配置高8位引脚,还有CRL配置低八位引脚。 3、端口位设置\清除寄存器(GPIOx_BSRR) 一个引脚 y 的输出数据由 GPIOx_BSRR 寄存器位的2 个位来控制分别为 BRy (Bit Reset y)和BSy (Bit Set y),BRy 位用于写 1清零
[单片机]
模拟前端模/数转换器的三种类型
模拟前端中三种最常见的模/数转换器类型为逐次近似型(a)、管线型(b)和△-Σ型(c)。 以下这些框图极其简单地描述了这些不同的架构概念。 a.在逐次近似模/数转换器中,模拟输入电压通过采样保持技术得以“定格”。然后,N位寄存器被设置成中幅模式:寄存器的最高位被设置为1,使得数/模转换器输出可达到中阶值。 如输入电压高于数/模转换器输出电压,比较器输出为真且最高位仍为1。但如果输入电压低于数/模转换器输出电压,寄存器的最高位将变为逻辑0。 转换器控制逻辑将转到下一个位,促使该位增高并执行另一个比较,直至到达最低位。当转换完成时,N位数字将会出现在寄存器中。请参阅相关插图 图1 b. 在管
[模拟电子]