完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 Mrcharacter 于 2017-8-1 23:25 编辑
大家都知道STM32的库里的寄存器是用结构体来对应的,比如 定义USART1_BASE对应USART的外设地址 #define USART1_BASE (APB2PERIPH_BASE + 0x3800) 然后强制转换为USART_TypeDef*类型 #define USART1 ((USART_TypeDef *) USART1_BASE) 这样这个指针指向的地址就可以作为一个结构体来使用,结构体成员地址对应寄存器地址,修改结构体成员就是修改寄存器。定义在下面,但是我疑惑的是为什么要把结构体成员定义为16位的,这样还要定义一个无意义的RESERVEDx来占位。为什么不直接定义为32位的呢?比如定义为__IO uint32_t SR;__IO uint32_t DR;...亲测强制转换为32位的可以使用。 顺便问一下这些定义的RESERVEDx会不会被优化掉?会不会占程序存储器空间? typedef struct { __IO uint16_t SR; uint16_t RESERVED0; __IO uint16_t DR; uint16_t RESERVED1; __IO uint16_t BRR; uint16_t RESERVED2; __IO uint16_t CR1; uint16_t RESERVED3; __IO uint16_t CR2; uint16_t RESERVED4; __IO uint16_t CR3; uint16_t RESERVED5; __IO uint16_t GTPR; uint16_t RESERVED6; } USART_TypeDef; |
|
相关推荐
16个回答
|
|
楼主可以再看看STM32的数据手册关于USART这一章中的寄存器定义,因为STM32是32位单片机,所以ST公司设计这款单片机时,所有的寄存器会填充为32位,但是有的寄存器根本用不到32位这么多,比如正如楼主所提到的,这些寄存器只占用了低16位,高16位被强制舍弃,即使你写了32的数据上去,人家也会自动剔除高16位,将你写的数据的低16位赋值到寄存器的低16位,程序中的结构体之所以这样写,其实就是为了和硬件结构相对应,你也可以自行写成32位是没有问题的。望楼主采纳!!祝楼主早日掌握STM32!
最佳答案
评分
|
||
|
||
|
|
可能仅仅是为了看结构体的时候可以很清晰的明白有哪几个寄存器,位宽,有哪些没被使用而被保留了。
补充内容 (2017-8-2 14:00): 另外有些寄存器的高16位用不到,手册上可能会建议请保持默认值。如果用32位去操作的话,会容易不小心修改高位内容。 评分
|
||
|
||
这是因为芯片设计的时候确定了寄存器的地址,Reserved那些地址没有用到,这样定义结构体用户就不会去操作那些保留的地址,希望可以帮到你
评分
|
||
|
||
|
|
回帖是美德,赚分是传统
|
|
|
|
学习了 虽然学过32 但理解很浅显 仅限使用
|
|
|
|
你看USART->DR寄存器有效的只有9位,可是还是设置了16位的数据类型,感觉不像是为了保护,再说我们大多数时候都是用的ST库,ST库已经对寄存器有保护机制了,设成32位的也没有什么问题吧。会不会有特别的什么原因呢? |
|
|
|
保留的内容和寄存器表上的内容并没有完全对应,您可以对照定义和寄存器表查看一下。 |
|
|
|
指针指向的地址上的内容作为一个结构体,这个我自然是理解的,要不然也不会有这个问题。 |
|
|
|
大家似乎对这个结构体在程序存储器上占用的空间并不感兴趣啊,有没有懂编译原理的大神来指点一下呢?
|
|
|
|
Mrcharacter 发表于 2017-8-2 23:39 回头一想,哪来的9位的数据类型,真是愚蠢!!! |
|
|
|
|
|
|
|
不好意思,我参与过芯片寄存器头文件的制作,如果你仔细看,是对应起来的,有些地址保留,这个与芯片设计者有关。 |
|
|
|
谢谢您的帮助 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32串口接受中断使用C++STL中的queue导致所有中断失效
75 浏览 0 评论
2436 浏览 0 评论
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
1260 浏览 0 评论
3306 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
3078 浏览 4 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 21:08 , Processed in 0.810399 second(s), Total 83, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号