stm32学习之路——LED闪烁实验
1.代码示例
#ifndef _GPIO_H_
#define _GPIO_H_
#include "stm32f10x.h"
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// 启用GPIOC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
// 配置GPIOC第13引脚为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
#endif
这段代码是用于配置STM32微控制器上的一个GPIO(通用输入输出)引脚的,具体来说,是配置GPIOC的第13号引脚为推挽输出模式。下面我将逐行解释这段代码的作用:
GPIO_InitTypeDef GPIO_InitStructure;
- 这行代码声明了一个
GPIO_InitTypeDef
类型的变量GPIO_InitStructure
。GPIO_InitTypeDef
是一个结构体类型,用于存储GPIO配置的各种参数,比如引脚号、模式、速度等。这个结构体是由STM32的库函数定义的,用于方便地进行GPIO配置。
- 这行代码声明了一个
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- 这行代码的作用是启用GPIOC端口的时钟。在STM32微控制器中,要使用任何外设(包括GPIO端口),首先需要使能该外设的时钟。
RCC_APB2PeriphClockCmd
是一个函数,用于控制APB2总线上的外设时钟。RCC_APB2Periph_GPIOC
是一个宏,代表GPIOC端口的时钟。ENABLE
是一个宏,表示使能时钟。
- 这行代码的作用是启用GPIOC端口的时钟。在STM32微控制器中,要使用任何外设(包括GPIO端口),首先需要使能该外设的时钟。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- 这行代码设置
GPIO_InitStructure
结构体中的GPIO_Pin
成员为GPIO_Pin_13
,意味着我们要配置的是GPIOC的第13号引脚。
- 这行代码设置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- 这行代码设置
GPIO_InitStructure
结构体中的GPIO_Mode
成员为GPIO_Mode_Out_PP
,表示将GPIOC的第13号引脚配置为推挽输出模式(Push-Pull Output)。推挽输出模式是一种常见的输出模式,适用于驱动LED、继电器等负载。
- 这行代码设置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- 这行代码设置
GPIO_InitStructure
结构体中的GPIO_Speed
成员为GPIO_Speed_50MHz
,表示GPIO引脚的输出速度为50MHz。STM32的GPIO引脚支持不同的速度配置,以适应不同的应用场景。
- 这行代码设置
GPIO_Init(GPIOC, &GPIO_InitStructure);
- 这行代码调用
GPIO_Init
函数,将前面配置好的参数(存储在GPIO_InitStructure
中)应用到GPIOC端口上。GPIOC
是一个指向GPIOC端口的指针,&GPIO_InitStructure
是GPIO_InitStructure
变量的地址,表示将GPIO_InitStructure
中的配置应用到GPIOC端口。
- 这行代码调用
总结来说,这段代码的作用是启用GPIOC端口的时钟,并将GPIOC的第13号引脚配置为推挽输出模式,输出速度为50MHz。这是在使用STM32微控制器进行GPIO操作时的一个常见步骤,用于初始化GPIO引脚,以便后续的控制操作。
2.主程序
#include "stm32f10x.h"
#include "delay.h"
#include "gpio.h"
int main(void)
{
GPIO_Config();
while(1)
{
//低电平点亮
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
//延时
Delay(1000);
//熄灭
GPIO_SetBits(GPIOC,GPIO_Pin_13);
Delay(1000);
}
}