关于多个gpio的初始化问题,大神求解

2019-07-20 16:27发布

GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);//PD0,1,4,5,8,9,10,14,15 AF OUT

       
  GPIO_InitStructure.GPIO_Pin = (0X1FF<<7);//PE7~15,AF OUT
  麻烦大神解释下这两句代码的具体意思

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
lnsylyl
1楼-- · 2019-07-21 10:23
本帖最后由 lnsylyl 于 2017-2-14 20:28 编辑

我觉得你不必纠结这些东西,人家的代码没毛病,每个人都有自己的书写习惯,其实,个人觉得还是下面的写法,更易于理解   
GPIO_InitStructure.GPIO_Pin =GPIO_PIN_1 |
                         | GPIO_PIN_4
                         | GPIO_PIN_5   
                         | GPIO_PIN_8
                         | GPIO_PIN_9
                         | GPIO_PIN_10
                         | GPIO_PIN_14
                         | GPIO_PIN_15;




2017214
2楼-- · 2019-07-21 16:19
GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);//PD0,1,4,5,8,9,10,14,15 AF OUT
2017214
3楼-- · 2019-07-21 18:57
初始化单个IO口:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
初始化多个IO口可以写成:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

其中GPIO_Pin_x是宏定义 :如下 (在MDK中 按键盘F12可以跟踪)
#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
................

GPIO_InitStructure.GPIO_Pin = (3<<0)|(3<<4)|(7<<8)|(3<<14);
(3<<0)==(GPIO_PIN_0 | GPIO_PIN_1)

(3<<4)==(GPIO_PIN_0 | GPIO_PIN_1)<<4==(3<<0)==(GPIO_PIN_4 | GPIO_PIN_5)

(3<<0)|(3<<4)== (3<<0)==(GPIO_PIN_0 | GPIO_PIN_1)| (3<<0)==(GPIO_PIN_4 | GPIO_PIN_5)

按这推算
2017214
4楼-- · 2019-07-21 19:38
 精彩回答 2  元偷偷看……
涝池岸黑科技
5楼-- · 2019-07-22 01:14
lnsylyl 发表于 2017-2-14 20:26
我觉得你不必纠结这些东西,人家的代码没毛病,每个人都有自己的书写习惯,其实,个人觉得还是下面的写法,更易 ...

其实我也习惯这种写法

涝池岸黑科技
6楼-- · 2019-07-22 02:35
2017214 发表于 2017-2-14 20:58
初始化单个IO口:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
初始化多个IO口可以写成:
GPIO_InitStructur ...

谢谢回复,解决了

一周热门 更多>