完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32的固件库文件功能相当完善,提供的API完全能满足一般的项目需要。刚从51单片机转到STM32的人,肯定会被这么庞大的东东吓到,51单片机上对IO口操作,简简单单几行代码就搞定了,一个C源文件就搞定。假如用STM32,对IO口进行简单操作,远不是几行代码能搞定的。(其实直接操作寄存器也能搞定)。
废话不多说,这就带你解剖固件库文件,包你看完之后豁然开朗。 首先,请看一段简单的C语言代码 #include #define base 0x0012ff60 #define flash ((TestType *)base) typedef struct { int i; int j; int k; }TestType; void main() { flash->i = 0; flash->j = 1; flash->k = 2; printf( "%x n", flash->i); printf( "%x", &(flash->i)); } 有人会问了这段代码有什么用?我告诉你ST的固件库都是按照这种方式编写的上面程序打印出来结果为 0 0x0012ff60 0x0012ff60这个地址人为定义的, 而((TestType *)base)转为一个指针 ,指向0x0012ff60 对吗? TestType这个结构体的地址不是系统分配好的吗?人为不是不可以定义的吗? |
|
相关推荐
4个回答
|
|
((TestType *)base)就是把0x0012ff60这个“数值”作为“指针”对待,所指向的地址就是0x0012ff60,而从这个地址开始的储存区域以TestType的格式来访问。
如果你的这个0x0012ff60是个寄存器的地址,那就是由厂家定义好的。只要在芯片中这个寄存器的地址是0x0012ff60,那这样访问就可以访问到寄存器 |
|
|
|
了解了谢谢,主要是没有想到是厂家定义好的
|
|
|
|
自己也可以这样定义,不过 要注意字节对齐问题
|
|
|
|
赞一个,这样能够提高代码的可读性。比较清楚含义。
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4445 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
316浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
306浏览 2评论
317浏览 2评论
324浏览 2评论
357浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 23:11 , Processed in 0.735873 second(s), Total 53, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号