STM32寄存器地址名称映射(学习笔记之四)
单片机的程序编制主要是操作寄存器,而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寄存器地址名称映射(学习笔记之四)相关推荐
- STM32工作笔记0036---C语言复习--寄存器地址名称映射
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152
- 基于STM32的CAN总线通信学习笔记
转自:https://blog.csdn.net/ludaoyi88/article/details/53350077 基于STM32的CAN总线通信学习笔记 本文主要简单介绍CAN总线的相关概念,以 ...
- MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导
MAC OS X 技术内幕 学习笔记之四 MAC OS系统的启动引导 MAC OS的启动非常快,同样的运行硬件环境,运行MAC系统感觉比运行windows系统要快不少.在使用笔记本时,同样的电池容量, ...
- Owl 学习笔记之四---属性
Owl 学习笔记之四---属性 内容 概述
- stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...
原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...
- stm32读操作失败_STM32学习笔记—通信容易出错的情况
I²C:全称为Inter-Integrated Circuit(内部集成电路),是一种串行通讯总线,常用于嵌入式电子产品中. 这是第4篇分享,<STM32学习笔记>之I2C通信容易出错的情 ...
- cma linux 起始地址,CMA模块学习笔记
CMA模块学习笔记 作者:linuxer 发布于:2017-6-28 18:29 分类:内存管理 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. 学习的 ...
- hive load data inpath 空目录_hive学习笔记之四:分区表
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类和汇总,及配套源码,涉及Java.Docker.Kubernetes.DevO ...
- JVM学习笔记之四 四种引用和垃圾回收的两次标记
四种引用和两次标记 四种引用 java中的数据类型我们知道是分为基本数据类型和引用类型的.基本数据类型是8种,分别是boolean byte short int long double float c ...
最新文章
- 关于学习Python的一点学习总结(13->浅复制和深复制)
- java检测ubuntu_在Ubuntu、Debian、CentOS Linux中检查Java版本的方法
- 神经算法网络基本原理
- 前缀 中缀 后缀表达式
- 手摸手教你使用vue-cli脚手架-详细步骤图文解析[vue入门]
- SpringBoot 第一篇入门
- 聊聊.net 程序设计——命名规范(上)
- Python-C语言语法解析:pycparser模块
- 弹窗动画PopupWindow
- 11-DNS域名解析服务
- 寻找那些神奇的自幂数---C语言
- 三星电子中国研究院院长张代君:Bixby绝非炫技而是为提升用户体验而生
- 反欺诈概念库-虚拟银行卡
- 【刷题】——小红书三套卷
- 猿团专访 |以技术推动发展 msup 成为企业经验智库
- UltralEdit 替换回车换行符
- 经典SQL学习笔记 (九)-比赛信息数据库练习
- 清华计算机考研任昱鑫,牛!赣州6名学霸提前被清华北大“锁定”!来自这些学校…...
- 服务器凝思系统如何设置网,凝思服务器操作系统
- ae教程 (六)人物滤镜 (二)清新粉色调
热门文章
- system-V 消息队列
- java ipmi关闭服务器_使用 IPMI 远程为服务器安装操作系统教程
- Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)
- php json urlencode,php json_encode url链接出现双本义字符‘\\’和中文被编码的处理方法...
- 网络地址分类与私有/特殊地址
- python-字典key的获取
- adb 连接真机查询appPackage和appActivity
- 9个已开源的GPT4平替分享(附开源代码+论文)
- 降维算法:主成分分析 VS 自动编码器
- 自动编码器部分笔记——《机器学习实战第二版》