STM32学习杂记(1)
野火的《零死角玩转STM32》里面的“流水灯的前世今生”中,三个LED灯都是连接在一个端口GPIOC的,但是我买的单片机开发板是一个在GPIOA
一个在GPIOD
野火的LED.c的代码是
在控制引脚的那行代码
1: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
他并没有提到说是控制哪个引脚啊?
后来我baidu之。
看了几个网上大家写的文章,我想,会不会是前面的代码的缘故?
1: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
2: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
3: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
4: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
5: GPIO_Init(GPIOC, &GPIO_InitStructure);
是因为有第一行,所以先开启了C端口,然后对C端口进行设置,而如果是两个不同的端口的话就必须要一个一个设置。
我也不知道对不对,只是一种猜测而已。
补充:
在网上看到一个例子,特摘录如下,原文点击这里
1: void GPIO_Configuration(void)
2: {
3: GPIO_InitTypeDef GPIO_InitStructure;
4:
5: /*允许总线CLOCK,在使用GPIO之前必须允许相应端的时钟.
6: 从STM32的设计角度上说,没被允许的端将不接入时钟,也就不会耗能,
7: 这是STM32节能的一种技巧,*/
8:
9: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
10: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
11: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
12: /* PB0,5,8,9输出 */
13: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9;
14: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
15: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
16: GPIO_Init(GPIOB, &GPIO_InitStructure);
17:
18: /* PC5,7输出*/
19: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;
20: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
21: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
22: GPIO_Init(GPIOC, &GPIO_InitStructure);
23:
24: /*PA7,输出*/
25: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
26: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
27: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
28: GPIO_Init(GPIOA, &GPIO_InitStructure);
29:
30: /*PA8,输出*/
31: GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
32: GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //开漏输出
33: GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M时钟速度
34: GPIO_Init(GPIOA, &GPIO_InitStructure);
35:
36:
37: }