标题: 单片机寄存器的问题求助 [打印本页]

作者: 254zhang    时间: 2020-2-16 13:57
标题: 单片机寄存器的问题求助

一个寄存器有32位 , 相当于有4个字节 , 而一个地址能够存放八位 ,相当于一个寄存器占用了四个地址

但是我发现 程序都是对寄存器首地址进行操作的的  , 那另外的三个地址存放的数据能改变吗 ?

这是不是因为stm32 的 CPU的总线一次可以操作32位吗 ?

作者: csmyldl    时间: 2020-2-16 19:46
而一个地址能够存放八位 ,这个前提就不对,32位单片机一个地址能存放32位二进制,内存使用可以定义存放8位为一个地址,即使用char定义存放数据的类型
作者: 254zhang    时间: 2020-2-17 11:14
csmyldl 发表于 2020-2-16 19:46
而一个地址能够存放八位 ,这个前提就不对,32位单片机一个地址能存放32位二进制,内存使用可以定义存放8位 ...

但是拿单片机两个相邻的寄存器来看的话 :
GPIOx_CRL 偏移地址位 0x00
而GPIOx_CRLH 的偏移量位 0x04;
这不能说明 GPIOx_CRL 占了 4 个 地址吗    然后这个寄存器有 32位的    ,那么一个地址存放 8位数据
作者: banalsheep    时间: 2020-2-17 12:34
254zhang 发表于 2020-2-17 11:14
但是拿单片机两个相邻的寄存器来看的话 :
GPIOx_CRL 偏移地址位 0x00
而GPIOx_CRLH 的偏移量位 0x04 ...

字节的定义就是8位,起始地址用字节表示,所以只能说GPIOx_CRL、GPIOx_CRH的起始地址相差4个字节,物理上,32位机本身总线宽度是32位,以字节算,一个寄存器确实占用4个字节。对32位寄存器操作时,只要编译器支持32位操作,操作对象当然是起始地址(你认为的首字节)
作者: 254zhang    时间: 2020-2-18 10:07
banalsheep 发表于 2020-2-17 12:34
字节的定义就是8位,起始地址用字节表示,所以只能说GPIOx_CRL、GPIOx_CRH的起始地址相差4个字节,物理上 ...

那么32位单片机一个地址存放八位对不对呢 ?
操作寄存器的起始地址就相当于操作整个寄存器是因为编译器是32位操作




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1