完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
以下一段代码是关于32的但是我的问题是关于C语言的:GPIO_TypeDef* GPIOx是一个结构体类型的指针,可为什么在往void GPIO_Init()函数里面写数据时(例如是写 GPIO_Init(GPIOB, &GPIO_InitStructure)),那么为什么第一个参数是写成 GPIOB 而不是写成 &GPIOB 呢?(求赐教,谢谢)
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) { uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00; uint32_t tmpreg = 0x00, pinmask = 0x00; /* Check the parameters */ assert_param(IS_GPIO_ALL_PERIPH(GPIOx)); assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)); assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin)); ................. } |
|
相关推荐
4个回答
|
|
你看一下GPIOB的define:
“#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)”(这个是我用的一个32的固件库里的头文件stm32f10x.h定义) GPIOB已经指向GPIOB_BASE,是一个地址,不需要再用取地址了。
最佳答案
|
|
|
|
我的理解是这样的,GPIOB是底层库里面定义的一个指向B口寄存器的指针,所以就不用再次取址了。不知道对不对
|
|
|
|
GPIOB本身就被定义为一个地址了,并且定义为GPIO_TypeDef *类型的指针。也就是从GPIOB地址开始往后一块内存单元里被结构化为GPIO_TypeDef 类型的数据。
|
|
|
|
其实寄存器对我们使用而言就是普通的指针变量,对于单片机而言,他不懂什么是强制类型转换,这些都是编译层次上的。看看你寄存器的定义就明白了。或者仿真的时候看看你的memory映射。现在都讲究模块化设计,所以对这些io操作归类。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-在NXP源码基础上适配ELF 1开发板的按键功能
732 浏览 0 评论
763 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-scp出现报错no matching host key type found. Their offer: ssh-rsa
790 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-ubuntu18.04通过网线共享网络
734 浏览 0 评论
763 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
9725 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-7-8 02:04 , Processed in 0.620634 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191