OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5871|回复: 7

void GPIO_Init() 疑问

[复制链接]

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-11-4
在线时间
0 小时
发表于 2013-11-25 10:17:23 | 显示全部楼层 |阅读模式
本人新手啊   C语言知识也不怎么牢固。。。现看串口初始化函数有点疑问
串口初始化函数式这样的     void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
  其中参数2   GPIO_InitStruct 是一个结构体类型指针   在编写函数的时候要 定义 GPIO_InitTypeDef  GPIO_InitStructure;
  打开结构体 GPIO_InitTypeDef 也确实是个结构体。。。
   但我的疑问是 为什么参数1 
GPIOx 就不是一个结构体类型指针了呢?   打开GPIO_TypeDef  也是一个结构体啊
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 GPIOA  而是直接向GPIOx 赋值        

勿吐槽  新人求带   我也想在系统的看一遍C  可是真的没时间了   只有哪不会问哪 了    谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

170

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2013-8-9
在线时间
3 小时
发表于 2013-11-25 10:46:21 | 显示全部楼层
CRL/CRH/IDR/ODR/BSRR/BRR/LCKR好像都是端口寄存器,不同的功能,可能GPIOx需要哪个就是哪个吧
回复 支持 反对

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-11-4
在线时间
0 小时
 楼主| 发表于 2013-11-25 10:55:44 | 显示全部楼层
回复【2楼】mylsf:
---------------------------------
 比如参数2来控制端口的速度与模式  也就是在往CRL和CRH中赋值     只是参数一是如何选择端口的  ?
    比如选择的GPIOA   难道是GPIOA也是一个结构体?然后通过参数2来往GPIOA这个结构体里面赋值?
回复 支持 反对

使用道具 举报

7

主题

170

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2013-8-9
在线时间
3 小时
发表于 2013-11-25 11:01:03 | 显示全部楼层
我不是很懂,我觉得像这样已经能够成型了的函数直接用就可以了,就像吃饭这方面,你是个大厨,你就不用在乎他的庄稼是怎么种的。你的责任是做好饭菜,这里你用好它就可以了


回复【3楼】share7we:
---------------------------------
回复 支持 反对

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-11-4
在线时间
0 小时
 楼主| 发表于 2013-11-25 11:46:57 | 显示全部楼层
回复【4楼】mylsf:
---------------------------------
 这倒是   不过不明白老师觉得心里怪怪的
回复 支持 反对

使用道具 举报

65

主题

440

帖子

0

精华

高级会员

Rank: 4

积分
782
金钱
782
注册时间
2012-8-29
在线时间
17 小时
发表于 2013-11-25 13:42:24 | 显示全部楼层
回复【楼主位】share7we:
---------------------------------
GPIO_TypeDef* GPIOx   这个就是结构体的定义,调用时候可以用 GPIOx->CRL

另外

map.h文件中 
  #define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)  ,后面的地址已经强制转换成了结构体指针类型
人生永远追逐着幻光,但谁把幻光看作幻光,谁便沉入无边的苦海
回复 支持 反对

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-11-4
在线时间
0 小时
 楼主| 发表于 2013-11-25 14:22:38 | 显示全部楼层
回复【6楼】sun_shine:
---------------------------------
  哦哦  明白了   谢谢
回复 支持 反对

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
发表于 2013-11-25 16:55:34 | 显示全部楼层
回复【楼主位】share7we:
---------------------------------
里面参数1和参数2都是经过强制转换后成为一个结构体指针的
而这里面只是一个形参,在调用该函数的时候会把实际参数传输给它(GPIOA/GPIOB/GPIOC/...)
天道酬勤
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表