步骤一声明GPIO 的结构:
GPIO_InitTypeDef GPIO_InitStructure;
步骤二为变量GPIO_InitStructure 的成员赋值,如果只设置其中的一部分成
员,我们需要如下代码:
/**
* LED1 -> PC2, LED2 -> PC3
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
对以上四行代码,做一个说明:
实际上这里省略掉一个函数: GPIO_StructInit , 它是用来初始化变量
GPIO_InitStructure 的,经过实验,发现不用也可以。大家可以尝试一下:)然后
修改该变量中的成员,有三个成员。在芯嵌STM32 开发板上,GPIO 端口接的
是PC2 引脚与PC3 引脚。因此,我们在GPIO_Pin 成员这里赋值GPIO_Pin_2 |
GPIO_Pin_2。在GPIO_Speed 成员上赋值GPIO_Speed_50MHz,GPIO_Mode 成
员则是设置为GPIO_Mode_Out_PP,表示推挽输出模式。
步骤三调用函数GPIO_Init()来初始化外设GPIO,代码如下:
GPIO_Init(GPIOC , &GPIO_InitStructure);
步骤四使能。注意,在固件库中,GPIO 没有GPIO_Cmd 的函数,因此这
个步骤省略。
通过以上四个步骤,我们已经对GPIO 进行了设置。还有一个问题不能忽略:
在设置外设前,我们必须给它调用一个时钟函数来使能外设时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOB ENABLE);
注意,这个时钟的使能函数,应该放在最前面。必须先有时钟,才能做后续
的操作。要使得2 个LED 都亮起来,必须把对应的引脚
清零。置1 会让LED 灭。现在打开STM32 固件库文档,找到10.2 小节,GPIO
库函数。GPIO 设置的所有函数,都在这里。我们看下要使用GPIO 库的哪个函
数。找到:GPIO_SetBits();和GPIO_ResetBits();
这两个函数, 根据说明, 分别是设置某个引脚为高电平和低电平。
GPIO_SetBits 函数是设置高电平,GPIO_ResetBits 函数则是清零操作。根据我们
获得的信息,写出如下代码:
while (1){
/*====LED1-ON=======*/
GPIO_ResetBits(GPIOB , GPIO_Pin_2);
GPIO_SetBits(GPIOB , GPIO_Pin_3);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
芯嵌stm32 www.51stm32.com
Copyright © 2009-2014 福州芯嵌工作室ALL rights reserved 5
/*====LED2-ON=======*/
GPIO_ResetBits(GPIOB , GPIO_Pin_2);
GPIO_SetBits(GPIOB , GPIO_Pin_3);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
void Delay (u32 nCount)
{
for(; nCount != 0; nCount--);
}
void GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
SystemInit();
GPIO_Config();
while(1){
GPIO_SetBits(GPIOC , GPIO_Pin_2);//因为是pc2与pc3所以是GPIOC Pin2
GPIO_ResetBits(GPIOC , GPIO_Pin_3);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
GPIO_SetBits(GPIOC , GPIO_Pin_3);
GPIO_ResetBits(GPIOC , GPIO_Pin_2);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
}
}
GPIO_InitTypeDef GPIO_InitStructure;
步骤二为变量GPIO_InitStructure 的成员赋值,如果只设置其中的一部分成
员,我们需要如下代码:
/**
* LED1 -> PC2, LED2 -> PC3
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 |GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
对以上四行代码,做一个说明:
实际上这里省略掉一个函数: GPIO_StructInit , 它是用来初始化变量
GPIO_InitStructure 的,经过实验,发现不用也可以。大家可以尝试一下:)然后
修改该变量中的成员,有三个成员。在芯嵌STM32 开发板上,GPIO 端口接的
是PC2 引脚与PC3 引脚。因此,我们在GPIO_Pin 成员这里赋值GPIO_Pin_2 |
GPIO_Pin_2。在GPIO_Speed 成员上赋值GPIO_Speed_50MHz,GPIO_Mode 成
员则是设置为GPIO_Mode_Out_PP,表示推挽输出模式。
步骤三调用函数GPIO_Init()来初始化外设GPIO,代码如下:
GPIO_Init(GPIOC , &GPIO_InitStructure);
步骤四使能。注意,在固件库中,GPIO 没有GPIO_Cmd 的函数,因此这
个步骤省略。
通过以上四个步骤,我们已经对GPIO 进行了设置。还有一个问题不能忽略:
在设置外设前,我们必须给它调用一个时钟函数来使能外设时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOB ENABLE);
注意,这个时钟的使能函数,应该放在最前面。必须先有时钟,才能做后续
的操作。要使得2 个LED 都亮起来,必须把对应的引脚
清零。置1 会让LED 灭。现在打开STM32 固件库文档,找到10.2 小节,GPIO
库函数。GPIO 设置的所有函数,都在这里。我们看下要使用GPIO 库的哪个函
数。找到:GPIO_SetBits();和GPIO_ResetBits();
这两个函数, 根据说明, 分别是设置某个引脚为高电平和低电平。
GPIO_SetBits 函数是设置高电平,GPIO_ResetBits 函数则是清零操作。根据我们
获得的信息,写出如下代码:
while (1){
/*====LED1-ON=======*/
GPIO_ResetBits(GPIOB , GPIO_Pin_2);
GPIO_SetBits(GPIOB , GPIO_Pin_3);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
芯嵌stm32 www.51stm32.com
Copyright © 2009-2014 福州芯嵌工作室ALL rights reserved 5
/*====LED2-ON=======*/
GPIO_ResetBits(GPIOB , GPIO_Pin_2);
GPIO_SetBits(GPIOB , GPIO_Pin_3);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
}
main.c
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
void Delay (u32 nCount)
{
for(; nCount != 0; nCount--);
}
void GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
SystemInit();
GPIO_Config();
while(1){
GPIO_SetBits(GPIOC , GPIO_Pin_2);//因为是pc2与pc3所以是GPIOC Pin2
GPIO_ResetBits(GPIOC , GPIO_Pin_3);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
GPIO_SetBits(GPIOC , GPIO_Pin_3);
GPIO_ResetBits(GPIOC , GPIO_Pin_2);
Delay(0xfffff);
Delay(0xfffff);
Delay(0x5ffff);
}
}