历史上的今天
返回首页

历史上的今天

今天是:2024年09月24日(星期二)

正在发生

2019年09月24日 | STM32 (5) 自己写库 构建库函数雏形1 寄存器结构体定义

2019-09-24 来源:eefocus

前面把基础部分讲得差不多,比如说什么是寄存器,寄存器映射,怎么样来寄存器编程,寄存器编程的时候应该参考官方的什么手册,


前面讲了什么是寄存器   怎么使用寄存器编程  寄存器编程的时候应该 参考哪些手册 接下来我们开始利用固件库编程,今天开始从 最底层开始写库函数  《在零死角玩转STM32》 第九章 l利用我们上节课的历程 下面这些是7个GPIO口的寄存器映射我们到GPIO口的寄存器映射,这些是最底层的东西,我们基本上已经学会了,那么接下来我们   进入固件库编程在真正进入固件库编程之前,我们应该了解固件库与寄存器的联系,参考《零死角玩转STM32F103-霸道》第九章  自己写库构建库函数雏形针对霸道 和指南者    

 

上图是我们上节课的历程,是我们对上节课 寄存器的映射,每一个寄存器都实现了寄存器的映射,GPIO口的寄存器有7个,但是如果寄存器多的话,这样的代码要写好多 就不太方便了,那么今天就要来对他进行优化


我们来看一下上图中的寄存器映射,比如说我们要操作GPIOB  ,那么就要操作  端口B外设的基地址 :GPIOB_BASE,地址在C语言里就是指针,而且他是32位的,那么他就指向了4个字节的内存,那么我们的  GPIOB_BASE就指向GPIOB的第一个地址,那么如果我们操作 GPIOB_BASE  这个指针,那么他访问的就是CRL这个寄存器,而且我们可以看到这些寄存器都是有规律的分布的,地址都是以4个字节递增,这个就跟C语言当中的结构体是类似的,因此我们在  定义一个结构体,这个结构体也有7个成员,类型叫做 GPIO_Type,我们刚刚说了GPIOB_BASE  是一个32位的通过我们这个指针他只能访问4个字节的内存,那么如果说我们想基于这个地址来访问GPIO的所有寄存器的话,该怎么办呢?如果GPIOB_BASE 这个指针是下图中的GPIO_Type的结构体类型的话,它就可以访问GPIO的所有寄存器的话了,所以说如果我这个指针和外设的基地址是一样的话那我们就可以通过一个结构体的方式访问这个寄存器了,比起上节课讲的每一个寄存器都要找到他的绝对地址这样子要方便很多,那么怎样将我们的GPIO_BASE转化成GPIO_Type这种结构体类型的指针呢?   C语言当中有一种 叫强制类型转化

然后再将上面的类型定义成一个宏

那么这个GPIOB可以指向GPIO_Type的所有成员,这里只要GPIO_Type成员的名字对应的实际地址不变那么,那么这个结构体的成员名可以 随便定义

以下的代码中就是通过GPIOB的结构体类型指针去访问他的成员变量,利用->这个 符号就可以指向他的各个成员。

总结;实现结构体方式访问的原理:1.先声明一个结构体,结构体中包含很多成员, 结构体成员的类型与分布的顺序都与我们寄存器的排列方式是一样的(上图8.5中寄存器的排列方式与我们结构体中的排列都是一致的,而且我们每一个寄存器都是u32类型的,与实际的寄存器大小一致,这样就做到了结构体GPIO_Type的成员与外设寄存器的一一对应)


2找到外设的基地址例如是GPIOB_BASE,然后把这个地址强制转化成上面的结构体类型


经过强制类型转换后,它就指向了GPIO_Type这里的所有成员,那么这样我们就可以通过C语言的结构体方式来操作stm32的所有外设。

推荐阅读

史海拾趣

Arctic Silicon Devices公司的发展小趣事

在电子行业的发展过程中,创新合作是推动产业进步的重要动力。Arctic Silicon Devices积极与高校、科研机构等合作,共同开展技术研发和人才培养。通过共享资源、互通有无,公司不仅获得了更多的创新灵感和技术支持,还推动了整个电子行业的技术进步和产业升级。

Continental公司的发展小趣事

随着汽车电子化的趋势日益明显,大陆集团也开始将业务拓展到汽车电子领域。在新的架构体系中,车身电子部门被纳入“车联网和信息”这个大的业务板块中。大陆集团致力于实现车身电子的更好互联、更好呈现信息和更好的集成。通过互联技术,数据能够在汽车与外界之间进行传递,并将这些信息通过人机交互界面呈现给驾驶者和乘客。同时,大陆集团还致力于确保数据从车辆到云端的顺畅传输和处理。这些举措使得大陆集团在汽车电子领域取得了显著的进展。

华润华晶公司的发展小趣事

随着汽车工业的发展,大陆集团开始将业务扩展到汽车轮胎领域。1901年,马牌轮胎首次与德国戴姆勒·奔驰汽车公司合作参加汽车竞赛,这标志着大陆集团正式进入汽车轮胎市场。仅仅三年后,大陆集团就生产出了全世界第一条带花纹的汽车轮胎,这一创新大大提高了轮胎的抓地力和安全性。1908年,大陆集团又生产出了全世界第一个可拆装的车轮,使车轮和车轴分开,由此大大节省了换轮胎的时间。这些技术创新使得大陆集团在汽车轮胎市场上占据了重要地位。

Gwconnect (Molex)公司的发展小趣事
在允许范围内增加电路的工作电压,可以提高激励电压,从而增加超声波发射器的输出功率和遥控距离。但需要注意不要超过元件的耐压范围。
Amidon Associates Inc公司的发展小趣事
通过改进电路拓扑结构、选择更高效的元件和参数等方式来优化电路设计,提高电路的转换效率和发射功率。
CETC公司的发展小趣事

CETC深知人才是企业发展的根本。因此,公司一直注重人才培养和团队建设。公司设立了完善的培训体系,为员工提供各种学习和发展的机会。同时,CETC还积极引进国内外优秀人才,打造了一支高素质、专业化的团队。这支团队在公司的各个领域都发挥着重要作用,为公司的持续创新和发展提供了有力保障。

问答坊 | AI 解惑

全国大学生电子设计竞赛获奖作品精选(1990-1994)下载

本帖最后由 paulhyde 于 2014-9-15 03:29 编辑 因为比较大,这里没办法上传,需要的就自己去下载吧 下载地址:http://www.shinian10.com/article.asp?id=572 用户名:glive,密码为123456 是超星图书格式,学校网上图书馆应该有得下载的 第一 ...…

查看全部问答>

id卡读卡器ps2口怎么读不出卡号啊??也是和键盘输入一样的读卡器

id卡读卡器ps2口怎么读不出卡号啊??也是和键盘输入一样的读卡器…

查看全部问答>

PNG图片旋转任意角度

WinCE5.0下有什么好的方法实现啊?…

查看全部问答>

关于ARM的几点疑惑

请想请问各位大侠几个问题,请帮忙解惑 1…

查看全部问答>

导出的SDK要安装在VS2005的哪个目录下????

如题。   我自己定制了一个PB,编译好了后,把SDK导出了,但是这个SDK是要安装在VS2005的安装目录下吗??(我用的开发 工具是VS2005,但是是第一次使用)安装完了SDK,在启动VS2005,新建工程时,需要对它进行选择吗????…

查看全部问答>

怎么用VS2005做wap网站

请详细说明怎么建工程,怎么部署?谢谢!能有图片最好!…

查看全部问答>

c语言程序问题

#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit lcden=P2^7;sbit lcdrs=P2^6;sbit lcdrw=P3^6;uchar count,shi,fen ,miao;uchar code table[]=\"   2009-5-16\";uchar code table1[]=\"   0 ...…

查看全部问答>

坛子里有使用ZUKEN CR5000的软件的么?

如题,欢迎使用的公司和个人跟贴,这款软件好像满偏门的,是么?…

查看全部问答>

Getting Started with the MSP430 LaunchPad_Student Guide and Lab Manual

内容和大课堂的内容差不多,只不过是英文的。 大家看看!…

查看全部问答>