码迷,mamicode.com
首页 > 其他好文 > 详细

STM32学习笔记

时间:2017-11-08 20:10:14      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:类型   进制   学习   typedef   数字   证明   表示   访问   结构体类型   

                              STM32

1.32位即表示32个二进制位(0/1),有可为八个十六进制位(0~F);
2.以最低位即第0位为例,它对应的配置位为CNF0和MODE0,MODE0【1:0】设为00(即最低两位二进制位均为0)时,IO0为输入模式,此时CNF0【1:0】设为01即为浮空输入模式。
CNF0【1:0】MODE0【1:0】连起来即为0100,即十六进制的数字4,。

.CRH和CRL均为32位寄存器,每四位控制一个IO口,所以CHR,CRL各控制八个IO口,分为高八位和低八位构成了它的十六个IO口;

/////

在数据手册上,BSRR的偏移地址为0X18,然后手册讲完BSRR后直接讲LCKR了,并且LCKR的偏移地址是 OX1C 。所以根据 OX1C-0X18=0X04 就知道BSRR是32位寄存器了。因为一个地址里面有一个字节的内容,一个字节是8位。好了,我看固件库里面的BSRRL的偏移地址是 0X18,而BSRRH的偏移地址是0X1A。不用多说了,两个都是16位的寄存器,BSRRL和BSRRH相隔两个字节,BSRRH和LCKR相隔两个字节,哦呵呵~~~发现后,我测试了一下把 BSRRL和BSRRH 编程时都试下这样: 1<<16  ,左移16位,果然报错了哈~~证明我说的没错。

       也就是说,现在BSRR 这个32位寄存器 分成了两部分,两个16位的寄存器,一低一高。然后我编程,然后成功了~~~哈哈~~~

////typedef struct 

__IO uint32_t CRL; 
__IO uint32_t CRH; 
__IO uint32_t IDR; 
__IO uint32_t ODR; 
__IO uint32_t BSRR; 
__IO uint32_t BRR; 
__IO uint32_t LCKR; 
} GPIO_TypeDef;

回到 GPIO_TypeDef 这段代码,这个代码用 typedef 关键字声明了名为 GPIO_TypeDef 的结构体类型,结构体内又定义了 7 个 __IO uint32_t 类型的变量。这些变量每个都为 32 位,也就是每个变量占内存空间 4 个字节。在 c 语言中,结构体内变量的存储空间是连续的,也就是说假如我们定义了一个 GPIO_TypeDef ,这个结构体的首地址(变量 CRL 的地址)若为 0x4001 1000, 那么结构体中第二个变量(CRH)的地址即为 0x4001 1000 +0x04 ,加上的这个 0x04 ,正是代表 4 个字节地址的

 

其实就是将一片存储空间,用来代表寄存器,从某个特定的地址开始,每4个字节代表一个寄存器,寄存器就是这个特定的地址的昵称,你访问这个寄存器,其实就是访问这个地址,说白了,还是地址

*ARM 处理器对存储器空间的访问分辨率以字节为最小单位;ARM 处理器还支持 16bit 数据(2 字节)的存储器访问和 32bit数据(4 子节)的存储器访问。在ARM 中将32 位的数据称之为‘字’,将 16 位的数据称之为‘半字

*51系列单片机是一个8位的单片机,因为只能执行8位宽的指令。Arm是一个32位的结构,不但可以执行32位的指令(称为arm指令集),也可以执行16位的指令(称为Thumb指令集)。

*8位二进制数称为字节,32位二进制数称为字,16位二进制数称为半字。

STM32学习笔记

标签:类型   进制   学习   typedef   数字   证明   表示   访问   结构体类型   

原文地址:http://www.cnblogs.com/ctq1/p/7805375.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!