单片机的程序编制主要是操作寄存器,而STM32功能更多,对应的寄存器也多,为了更好的管理和使用好寄存器,需要将这些寄存器进行管理和分配。以GPIOA为例;因为 GPIO 都是挂在 APB2 总线之上,所以它的基地址是由 APB2 总线的基地址+GPIOA 在 APB2 总线上的偏移地址决定的。同理依次类推,我们便可以算出 GPIOA 基地址了。

1、根据STM32存储器映射可以查到整个外设地址是----0x40000000(P41页)

#define PERIPH_BASE ((uint32_t)0x40000000)

2、APB2 总线的偏移地址是---0x10000

#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)

3、GPIOA的偏移地址是---- 0x0800(可以插P42页的地址映像表)

#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)

最后我们便可以算出 GPIOA 的基地址是:(也就是STM32的存储器映射)为了便于管理我们又引出了位绑定的概念(以后再学习)。

GPIOA_BASE= 0x40000000+0x10000+0x0800=0x4001080

查看官方手册

主函数如何定义呢?首先定义一个结构体

typedef struct           //库函数
{vu32 CRL;    // 端口配置低寄存器 ;vu32 CRH;   // 端口配置高寄存器 ;vu32 IDR;   // 端口输入数据寄存器 ;vu32 ODR;      // 端口输出数据寄存器 ;vu32 BSRR;  // 端口位设置/复位寄存器 ;vu32 BRR;   // 端口位复位寄存器 ;vu32 LCKR;  // 端口配置锁定寄存器 ;
} GPIO_TypeDef;

上面的结构体通过 强制指针类型转换得到GPIA的偏移地址

 #define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

主函数如何使用呢?

int  main(void)
{//PA.0链接AB,PA.1连接Clock,PB.0连接Clear//使得164的QA~QH输出:11000010//1、设置PA.0推挽输出,PA.1、PB.0推挽输出GPIOA->CRL = 0x33;GPIOB->CRL = 0x03;//2、进行通信return(1);
}

GPIOA 的寄存器的地址=GPIOA 基地址+寄存器相对 GPIOA 基地址的偏移值, 这个偏移值在上面的寄存器地址映像表中可以查到。

结构体存储的成员他们的地址是连续的, GPIOA 是指向GPIO_TypeDef 类型的指针,又由于GPIO_TypeDef 是结构体,所以自然而然我们就可以算出 GPIOA 指向的结构体成员变量对应地址了:

官方手册 CRL寄存器功能配置图

官方手册 CRH寄存器功能配置图

IDR 和ODR配置

BSSR和其它寄存器可以h查看手册 不列出来了 可以看书(P109页表5-4)

一起学习交流群:QQ群号码:255864236

STM32寄存器地址名称映射(学习笔记之四)相关推荐

  1. STM32工作笔记0036---C语言复习--寄存器地址名称映射

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152

  2. 基于STM32的CAN总线通信学习笔记

    转自:https://blog.csdn.net/ludaoyi88/article/details/53350077 基于STM32的CAN总线通信学习笔记 本文主要简单介绍CAN总线的相关概念,以 ...

  3. MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导

    MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导 MAC OS的启动非常快,同样的运行硬件环境,运行MAC系统感觉比运行windows系统要快不少.在使用笔记本时,同样的电池容量, ...

  4. Owl 学习笔记之四---属性

    Owl 学习笔记之四---属性 内容 概述

  5. stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...

    原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...

  6. stm32读操作失败_STM32学习笔记—通信容易出错的情况

    I²C:全称为Inter-Integrated Circuit(内部集成电路),是一种串行通讯总线,常用于嵌入式电子产品中. 这是第4篇分享,<STM32学习笔记>之I2C通信容易出错的情 ...

  7. cma linux 起始地址,CMA模块学习笔记

    CMA模块学习笔记 作者:linuxer 发布于:2017-6-28 18:29 分类:内存管理 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. 学习的 ...

  8. hive load data inpath 空目录_hive学习笔记之四:分区表

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...

  9. JVM学习笔记之四 四种引用和垃圾回收的两次标记

    四种引用和两次标记 四种引用 java中的数据类型我们知道是分为基本数据类型和引用类型的.基本数据类型是8种,分别是boolean byte short int long double float c ...

最新文章

  1. 关于学习Python的一点学习总结(13->浅复制和深复制)
  2. java检测ubuntu_在Ubuntu、Debian、CentOS Linux中检查Java版本的方法
  3. 神经算法网络基本原理
  4. 前缀 中缀 后缀表达式
  5. 手摸手教你使用vue-cli脚手架-详细步骤图文解析[vue入门]
  6. SpringBoot 第一篇入门
  7. 聊聊.net 程序设计——命名规范(上)
  8. Python-C语言语法解析:pycparser模块
  9. 弹窗动画PopupWindow
  10. 11-DNS域名解析服务
  11. 寻找那些神奇的自幂数---C语言
  12. 三星电子中国研究院院长张代君:Bixby绝非炫技而是为提升用户体验而生
  13. 反欺诈概念库-虚拟银行卡
  14. 【刷题】——小红书三套卷
  15. 猿团专访 |以技术推动发展 msup 成为企业经验智库
  16. UltralEdit 替换回车换行符
  17. 经典SQL学习笔记 (九)-比赛信息数据库练习
  18. 清华计算机考研任昱鑫,牛!赣州6名学霸提前被清华北大“锁定”!来自这些学校…...
  19. 服务器凝思系统如何设置网,凝思服务器操作系统
  20. ae教程 (六)人物滤镜 (二)清新粉色调

热门文章

  1. system-V 消息队列
  2. java ipmi关闭服务器_使用 IPMI 远程为服务器安装操作系统教程
  3. Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)
  4. php json urlencode,php json_encode url链接出现双本义字符‘\\’和中文被编码的处理方法...
  5. 网络地址分类与私有/特殊地址
  6. python-字典key的获取
  7. adb 连接真机查询appPackage和appActivity
  8. 9个已开源的GPT4平替分享(附开源代码+论文)
  9. 降维算法:主成分分析 VS 自动编码器
  10. 自动编码器部分笔记——《机器学习实战第二版》