以前看到STM32的GPIO初始化一般写成下面这样:
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
复制代码
感觉这么写有点儿繁琐,,
今天突然想到可以用C99中新添加的结构体字面量写成下面这样:
- GPIO_Init(GPIOC, &(GPIO_InitTypeDef){GPIO_Pin_0, GPIO_Speed_50MHz, GPIO_Mode_Out_PP});
复制代码
这种写法比较适合成员比较少的结构体,,写起来更简洁
是的,,
也有不需要注意顺序的写法,,不过书写就麻烦一些了
- GPIO_Init(GPIOC, &(GPIO_InitTypeDef){.GPIO_Pin = GPIO_Pin_0,
- .GPIO_Mode = GPIO_Mode_Out_PP,
- .GPIO_Speed = GPIO_Speed_50MHz}); // LED
复制代码还是这种初始化直观
单就这个例子而言,,感觉两种写法直观性方面差别很小,,因为值都是宏定义,本身就携带了参数名,,比如“.GPIO_Mode = GPIO_Mode_Out_PP”这一句,GPIO_Mode_Out_PP的前半部分就说明了参数名叫GPIO_Mode,再写一遍反而啰嗦,,
所以我更喜欢一楼那种写法,,就一行,简洁!
一周热门 更多>