C99结构体字面量用于STM32的GPIO_Init()

2019-12-18 18:51发布

以前看到STM32的GPIO初始化一般写成下面这样:
  1. GPIO_InitTypeDef GPIO_InitStructure;

  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                       
  3. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  4. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  5. GPIO_Init(GPIOC, &GPIO_InitStructure);
复制代码

感觉这么写有点儿繁琐,,
今天突然想到可以用C99中新添加的结构体字面量写成下面这样:
  1. GPIO_Init(GPIOC, &(GPIO_InitTypeDef){GPIO_Pin_0, GPIO_Speed_50MHz, GPIO_Mode_Out_PP});
复制代码

这种写法比较适合成员比较少的结构体,,写起来更简洁



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
leiyitan
1楼-- · 2019-12-18 19:36
这个需要注意PIN,Speed,mode先后顺序吧
sunnyqd
2楼-- · 2019-12-18 22:07
c99可以显式制定结构体要初始的变量
XIVN1987
3楼-- · 2019-12-18 23:39
leiyitan 发表于 2018-5-1 07:01
这个需要注意PIN,Speed,mode先后顺序吧


是的,,

也有不需要注意顺序的写法,,不过书写就麻烦一些了
  1. GPIO_Init(GPIOC, &(GPIO_InitTypeDef){.GPIO_Pin = GPIO_Pin_0,
  2.                                      .GPIO_Mode = GPIO_Mode_Out_PP,
  3.                                      .GPIO_Speed = GPIO_Speed_50MHz});  // LED
复制代码
huangqi412
4楼-- · 2019-12-19 05:29
XIVN1987 发表于 2018-5-1 08:21
是的,,

也有不需要注意顺序的写法,,不过书写就麻烦一些了

还是这种初始化直观
596142041
5楼-- · 2019-12-19 08:22
 精彩回答 2  元偷偷看……
XIVN1987
6楼-- · 2019-12-19 10:36
huangqi412 发表于 2018-5-1 11:25
还是这种初始化直观


单就这个例子而言,,感觉两种写法直观性方面差别很小,,因为值都是宏定义,本身就携带了参数名,,比如“.GPIO_Mode = GPIO_Mode_Out_PP”这一句,GPIO_Mode_Out_PP的前半部分就说明了参数名叫GPIO_Mode,再写一遍反而啰嗦,,

所以我更喜欢一楼那种写法,,就一行,简洁!

一周热门 更多>